Conversie Keytool naar OpenSSL

De nodige stappen om een Java keystore om te zetten naar OpenSSL formaat zijn afhankelijk van de gebruikte Java versie. Vanaf Java 1.6.x is het mogelijk een keystore direct om te zetten naar PKCS12 formaat. Met eerdere versies moeten de private key en het certificaat eerst worden geëxporteerd voordat deze omgezet kunnen worden. Volg onderstaande stappen.

Java 1.6.x en hoger

De keystore kan direct worden omgezet naar PKCS12 formaat met onderstaand commando:

keytool -importkeystore -srckeystore KEYSTORENAAM.jks -destkeystore PKCS12NAAM.pfx -deststoretype PKCS12

Vervang in dit voorbeeld KEYSTORENAAM.jks door de naam van de bestaande keystore en PKCS12NAAM.pfx door de gewenste naam van het PKCS12 bestand.

Java 1.5.x en lager

Met het keytool programma kan alleen het certificaat (public key) worden geëxporteerd. Er is een ander programma nodig (zoals ExportPriv of Keystore Explorer) om de private key te exporteren. Door deze twee bestanden te combineren maak je PKCS12 bestand.

Exporteer de public key (certificaat)

  • Exporteer de public key van de keystore met het commando:
    keytool -export -alias jekey-keystore keystore -file exported.crt
  • Het resultaat is een DER (binary) geformatteerd certificaat in exported.crt
    openssl x509 -noout -text -in exported.crt -inform der
  • Nu moet het certificaat PEM geformatteerd worden, wat makkelijk gebruikt kan worden door Apache en OpenSSL voor de PKCS12 conversie:
    openssl x509 -out exported-pem.crt -outform pem -text -in exported.crt -inform der

Exporteer de private key met ExportPriv

  • Download, compile & draai ExportPriv, deze is hier te verkrijgen. De key zal geschreven worden naar STDOUT. Het is de bedoeling om deze te re-directen naar > exported.key.
    javac ExportPriv.java
    java ExportPriv > exported-pkcs8.key
  • De private key is nu geëxporteerd naar een PKCS#8 PEM formaat. Vervolgens wordt het bestand omgezet naar het RSA formaat voor gebruik met Apache:
    openssl pkcs8 -inform PEM -nocrypt -in exported-pkcs8.key -out exported.key
  • Mocht OpenSSL een foutmelding genereren dat het certificaat niet te decoderen is, probeer dan eerst dit commando en vervolgens het voorgaande commando nogmaals:
    openssl rsa -in privkey-java.key -out privkey.key

Alternatieve manier om private key te exporteren

  • Een andere manier om de private key te exporteren, is om Keystore Explorer aan te schaffen. Dit programma exporteert de key in het PKCS12 formaat. Helaas werkt dit niet in de evaluatie versie van het programma.

Samenvoegen public en private key

  • Nu de public en private key geëxporteerd zijn, moeten de twee bestanden samen worden gevoegd in één bestand van PKCS12 formaat:
    openssl pkcs12 -export -out exported.pfx -inkey exported.key -in exported-pem.crt
point up