Hallo zusammen,
wieder einmal habe ich ein Problem damit Zertifikate in einen Keystore (ohne KeyTool!) zu packen.
Bisher habe ich die Zertifikate welche ich für Apache2 mit Certbot erhalten habe relativ einfach in einen Keystore drücken können.
Jetzt bin ich allerdings letztens von Apache auf Caddy umgestiegen und scheinbar läuft das da mit den Zertifikaten etwas anders ab.
Jetzt bin ich etwas verwirrt wie ich da mein Code am besten so umbaue das das ganze passt.
Informationen zum Zertifikat habe ich mir über openssl mal angeschaut (ich bin nicht ganz sicher wie viel ich davon zeigen kann ohne zu viel zu zeigen):
Wichtig für mich sind vermutlich die Werte "Signature Algorithm: sha256WithRSAEncryption", "Public Key Algorithm: id-ecPublicKey" und "ASN1 OID: prime256v1" auch wenn ich nicht ganz wüsste wie das zusammen passt.
Ich habe bereits etwas mit BouncyCastle rum probiert wie man das ganze zusammen setzen könnte, allerdings schlägt das ganze dann beim einfügen in den KeyStore fehl. Vermutlich ist somit vorher schon ein Fehler drinnen.
Eventuell kann mir da jemand weiter helfen
wieder einmal habe ich ein Problem damit Zertifikate in einen Keystore (ohne KeyTool!) zu packen.
Bisher habe ich die Zertifikate welche ich für Apache2 mit Certbot erhalten habe relativ einfach in einen Keystore drücken können.
Java:
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)certFactory.generateCertificate(new ByteArrayInputStream(decodedCert));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(decodedKey));
keyStore.setCertificateEntry(alias+"_cert", certificate);
keyStore.setKeyEntry(alias+"_key", privateKey, keyStorePass.toCharArray(), new Certificate[] {certificate});
- Die Zertifikate für die Domains beinhalten nun 2 Zertifikate
- Es gibt keinen Private Key mehr, nur noch einen EC Private Key (nur der Key, keine Parameter)
Jetzt bin ich etwas verwirrt wie ich da mein Code am besten so umbaue das das ganze passt.
Informationen zum Zertifikat habe ich mir über openssl mal angeschaut (ich bin nicht ganz sicher wie viel ich davon zeigen kann ohne zu viel zu zeigen):
Code:
Certificate:
Data:
Version: 3 (0x2)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
ASN1 OID: prime256v1
NIST CURVE: P-256
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Signature : ecdsa-with-SHA256
Signature Algorithm: sha256WithRSAEncryption
Ich habe bereits etwas mit BouncyCastle rum probiert wie man das ganze zusammen setzen könnte, allerdings schlägt das ganze dann beim einfügen in den KeyStore fehl. Vermutlich ist somit vorher schon ein Fehler drinnen.
Java:
ECNamedCurveParameterSpec parameterSpec = ECNamedCurveTable.getParameterSpec("prime256v1");
ECPrivateKeySpec privateKeySpec = new ECPrivateKeySpec(BigIntegers.fromUnsignedByteArray(decodedKey), parameterSpec);
KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC");
PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
keyStore.setCertificateEntry(alias+"_cert", certificate);
keyStore.setKeyEntry(alias+"_key", privateKey, keyStorePass.toCharArray(), new Certificate[] {certificate});
java.lang.IllegalArgumentException: standard length exceeded for value
at org.bouncycastle.util.BigIntegers.asUnsignedByteArray(Unknown Source)
at org.bouncycastle.asn1.sec.ECPrivateKey.<init>(Unknown Source)
at org.bouncycastle.asn1.sec.ECPrivateKey.<init>(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey.getEncoded(Unknown Source)
at java.base/sun.security.provider.KeyProtector.protect(KeyProtector.java:154)
at java.base/sun.security.provider.JavaKeyStore.engineSetKeyEntry(JavaKeyStore.java:274)
at java.base/sun.security.util.KeyStoreDelegator.engineSetKeyEntry(KeyStoreDelegator.java:111)
at java.base/java.security.KeyStore.setKeyEntry(KeyStore.java:1167)
at test.Main.main(Main.java:36)
at org.bouncycastle.util.BigIntegers.asUnsignedByteArray(Unknown Source)
at org.bouncycastle.asn1.sec.ECPrivateKey.<init>(Unknown Source)
at org.bouncycastle.asn1.sec.ECPrivateKey.<init>(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey.getEncoded(Unknown Source)
at java.base/sun.security.provider.KeyProtector.protect(KeyProtector.java:154)
at java.base/sun.security.provider.JavaKeyStore.engineSetKeyEntry(JavaKeyStore.java:274)
at java.base/sun.security.util.KeyStoreDelegator.engineSetKeyEntry(KeyStoreDelegator.java:111)
at java.base/java.security.KeyStore.setKeyEntry(KeyStore.java:1167)
at test.Main.main(Main.java:36)
Eventuell kann mir da jemand weiter helfen