2010-10-05 4 views
12

Welche Vorteile hat es beim Kauf eines Codesignaturzertifikats, mit einem PKCS12-gegen-JKS-Zertifikat zu beginnen? Einige vendors geben Anweisungen zum Starten mit einer JKS- oder PKCS12-Zertifikatsignierungsanforderung. Wir möchten eine maximale Flexibilität bei der Verwendung eines gekauften Zertifikats haben, insbesondere angesichts der Kosten. Zum Beispiel signieren wir möglicherweise mehr als nur Java-Code (z. B. iPhone oder Android-Codesignatur). Welche technischen Überlegungen sollten wir bei der Wahl eines der beiden Ansätze berücksichtigen?Was sind die Vorteile von JKS vs PKCS12 für Code-Signaturen?

Antwort

25

Wenn Sie in Java arbeiten, ist der Java Key Store ein recht natürlicher Speicherort für private Schlüssel.Java-Anwendungen erwarten normalerweise, dass sie die von JKS benötigten Schlüssel erhalten und von Ihren eigenen Java-Anwendungen aus einfach darauf zugreifen können. JKS ist jedoch von außerhalb Java nicht zugänglich (ohne durch ein paar Reifen zu springen). Die PKCS # 12 (auch bekannt als PFX) Dateien sind dagegen eine sprachneutrale Methode zum Speichern von verschlüsselten privaten Schlüsseln und Zertifikaten und sind schon lange genug vorhanden, sodass sie praktisch überall unterstützt werden. Beachten Sie jedoch, dass das Dateiformat fürchterlich zu komplex und zu allgemein ist - werfen Sie einen Blick auf Peter Gutmanns "PFX - Wie man kein Crypto-Protokoll/Standard entwickelt" (http://www.cs.auckland.ac.nz/~pgut001/pubs/pfx.html) für eine heitere Sicht auf die Probleme .

Beachten Sie, dass die Verwendung des einen oder anderen dieser Speicherformate ein Problem darstellt, wenn Ihre Anwendung lokal verschlüsselte private Schlüssel speichert. Der Anbieter, der Ihnen Ihr Zertifikat verkauft, wird den privaten Schlüssel nie sehen, so dass es ihm egal ist, welches Format Sie verwenden. Sie senden ihm (dem Anbieter/CA) eine PKCS # 10-Zertifikatanforderung (die den öffentlichen Schlüssel enthält und mit dem privaten Schlüssel signiert ist, aber NICHT den privaten Schlüssel enthält) und sendet Ihnen ein Zertifikat zurück (das Sie in JKS oder in die PKCS # 12-Datei oder beides, oder wo auch immer Sie Lust haben).

Technisch gesehen ist keines der Formate ideal, da beide den privaten Schlüssel schützen, indem sie ihn mit einem aus einem Passwort abgeleiteten Schlüssel verschlüsseln; das macht aber keinen besser als den anderen. Sicherheit (wenn auch nicht Bequemlichkeit) ist besser, wenn Sie eine Smartcard oder eine andere Hardware-Schlüsselspeicherlösung verwenden können.

Der Hauptfaktor, der Ihre Wahl bestimmt, sollte sein, wie Sie den privaten Schlüssel verwenden möchten - das heißt: welche Anwendungen müssen den privaten Schlüssel verwenden und welche Formate des Schlüsselspeichers werden bereits behandelt? PKCS # 12 ist die flexiblere Option ... Wenn Sie jedoch beabsichtigen, den Schlüssel nur mit selbst geschriebenem Code zu verwenden (Interoperabilität nicht erforderlich), sollten Sie auch PKCS # 8- oder PKCS # 15-Container verwenden.

Ich kann nicht empfehlen, Ihren eigenen Code zu schreiben, um PKCS # 12 zu verarbeiten (ich habe es gemacht, nicht lustig) - verwenden Sie eine bewährte Drittanbieter-Bibliothek (wie OpenSSL).

+0

Ok, so ist das entscheidende Element, dass Sie darauf hinweisen, dass PKCS # 12 versucht und wahr ist. Das funktioniert, danke. –

2

Falls Sie JKS Schlüsselspeicher Sie PKCS12 umwandeln kann mit Hilfe der folgenden Befehle

 
keytool -importkeystore -srckeypass secret -destkeypass meow123 -srcstorepass secretstore -deststorepass secretstore -srcalias certforsigning -destalias certforsigning -srcalias certforencryption -destalias certforencryption -srckeystore my_java_keystore.jks -destkeystore PFX_keystore.pfx -deststoretype PKCS12 

wo my_java_keystore.jks der Laden java Schlüssel ist, die zwei Schlüssel mit alias certforsigning hat und certforencryption

und Sie können auch die Schlüssel von PKCS12 in JKS konvertieren mit Keytool

Verwandte Themen