# Keytool: pkcs12 in JKS



## Sleepwalker (5. Aug 2011)

Moin,

ich weiß nicht, ob ich hier richtig bin.

- Ich habe einen Keystore zum Testen bekommen. Der hat zwei Einträge.
Alias priv ist ein PrivateKeyEntry.​Alias cert ist ein trustedCertEntry mit einer Zertifikatskette.​
Soweit, so gut. Damit läuft alles. Nun möchte ich selbst einen Keystore erstellen.



1. Ich habe mittels openssl einen Private Key (PEM-Format mit des3) und einen CSR erstellt.

2. Der CSR ging weg und es kam eine Zertifikartskette in pkcs7 zurück.

3. Das pkcs7 habe ich in PEM umgewandelt

```
openssl pkcs7 -in incerts.p7b -out outcerts.csr -print_certs
```

4. Nun mache ich aus der neuen Zertifikatskette und dem Private Key einen pkcs12 Keystore

```
openssl pkcs12 -export -out keystore.p12 -inkey mykey.pem -in outcerts.crt
```
Darin sind jetzt zu Anfang die Zertifikate und am Ende mein Private Key.​
5. Jetzt habe ich versucht aus dem p12 ein jks zu machen

```
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -destkeystore keystore.jks
```

Nun der Fehler:
Im JKS sind nicht zwei, sondern nur ein Eintrag. Nämlich ein PrivateKeyEntry. Dort sind sogar die Zertifikate drin?!?!

Frage:
Wie bekomme ich Zertifikate und Private Key mittels separaten "aliasen" in den JKS?

Danke im Voraus.


----------



## Sleepwalker (8. Aug 2011)

Scheint kein sonderlich beliebtes Thema zu sein  Ich hänge immer noch fest.

Eine Idee, die ich nicht umsetzen kann:
Wie bekomme ich *nur* den Private Key in einen PKCS12 keystore bzw. gleich mit alias "priv" in einen neuen JKS?

Wenn das ginge, könnte man mit

```
keytool -importcert -alias cert ...
```
die Zertifikate separat hinzufügen.

Hat da vllt. jemand eine Idee?


----------



## Guest2 (8. Aug 2011)

Moin,

ich nutze dafür immer den KeyMan von IBM, der kann problemlos P12 in JKS importieren. Außerdem lässt sich damit alles Relevante im JKS ansehen/bearbeiten. (Ist kostenlos, aber imho muss man sich mittlerweile für den Download registrieren.)

Gruß,
Fancy


----------



## Sleepwalker (8. Aug 2011)

Danke,

ich habe leider vergessen zu erwähnen, dass das automatisiert ablaufen muss. KeyMan hat anscheinend nur rudimentäre Kommandozeilenoptionen.

Werde trotzdem mal schauen, ob mein Vorhaben damit funktioniert. Als finale Lösung brauch ich aber etwas Automatisierbares.


----------



## Guest2 (8. Aug 2011)

OK, wenn Du das automatisieren willst, hast Du mal versucht den JKS direkt selbst zu bauen?

Von P12 aus sollte das in etwa so gehen: https://gist.github.com/1131587 (allerdings nur runtergeschrieben, noch nicht wirklich getestet)

(Die Schritte die Du vorher per OpenSSL machst, lassen sich auch in Java realisieren.)

Gruß,
Fancy


----------



## Sleepwalker (8. Aug 2011)

Mit Java hab' ich das noch nicht probiert, weil ich dachte, mit OpenSSL ginge es schneller. Aber nach 3 Tagen Probiererei noch von "schnell" zu reden, ist wohl nicht mehr angebracht...
Habe das Gefühl, dass ich die Zertifikatskette beim Konvertieren irgendwie immer zerhaue und es deswegen nicht mit OpenSSL klappt.

Danke für den Code. Werde ich wohl morgen mal ausprobieren. Gibt es irgendwo eine Art Tutorial, wie man mit Java Zertifikate & Schlüssel konvertiert und all so Kram?


----------



## Sleepwalker (9. Aug 2011)

Ich glaube, nun scheint es zu funktionieren.

Soweit ich das verstanden habe, wurde nur der PrivateKeyEntry erstellt, weil eben nur der private Schlüssel mit den Zertifikaten, die zurück kamen, signiert wurde?! Kommt das so hin?

Ich habe
- nach Schritt 6 den Alias im JKS von "1" auf "priv" geändert
- ein weiteres bekommenes Zertifikat mit

```
keytool -importcert -v -alias cert -trustcacerts -file certificate.cer -keystore keystore.jks
```
eingebunden.

Fertig.

Nun muss ich das nur noch testen...

Kann mir jemand den genauen Ablauf erklären, den ich ab Schritt 4 getätigt habe? Zum Verständnis. Bin mir nicht sicher, ob ich das 100%ig richtig verstanden habe.
Danke.


----------

