2015-08-27 19 views
16

Ich versuche, Zertifikate direkt aus dem Microsoft Store zu laden, um zu vermeiden, dass Zertifikate aus dem MS-Speicher exportiert und dann in einen JKS-Speicher importiert werden müssen.Wie Laden Next Generation-Zertifikate aus dem Microsoft Keystore mit Java 8?

Es ist mir gelungen, aus einer typischen AD CS-Webserver-Vorlage mit Legacy-Krypto direkt aus den MS-Stores mit SunMSCAPI zu erstellen.

SunMSCAPI unterstützt jedoch nicht die modernen CNG-Chiffren, die ich verwende, insbesondere RSA-2048 asymmetrische Verschlüsselung, SHA-384 Hashing und ECDSA-384 digitale Signatur.

Ist es möglich, Next Generation-Zertifikate von MS-Stores mit Java zu laden? Ich bin auf jdk1.8.0_45. Gibt es eine JCE-Anbieteralternative zu SunMSCAPI, die mit CNG umgehen kann? Ich vermute, es müsste JNI oder JNA verwenden, um auf die native Windows CNG-API zuzugreifen.

Ich habe versucht Pheox JCAPI ohne Erfolg. Es unterstützt RSA und DSA, aber nicht ECDSA. Ich habe Bouncy Castle nicht ausprobiert, aber mein Verständnis ist, dass es solch eine Fähigkeit nicht anbietet.

Gibt es andere handelsübliche JCE-Provider-Alternativen zu SunMSCAPI, die mit CNG umgehen können?

Update: JCAPI v2 supports only RSA, ECDH support planned for v3 next year.

Update: Einige haben vorgeschlagen, dass die Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for Java 8 Installation vielleicht dieses Problem zu beheben können, aber nein, das nicht hilft, da das Problem ist, dass SunMSCAPI nur RSA Chiffren unterstützt, können wie bei der Suche zu sehen die source code.

+0

Was ist das endgültige Ziel? Offensichtlich planen Sie, die Zertifikate für einige Operationen zu verwenden. Im Allgemeinen enthält unsere SecureBlackbox Klassen zur Verwendung von Windows CryptoAPI und CNG (via JNI). Diese Klassen werden dann mit SecureBlackbox-Operationen verwendet und sind nicht für APIs von Drittanbietern passierbar (auf der anderen Seite deckt SecureBlackbox alle gängigen Sicherheitsstandards, Protokolle und Algorithmen ab , so dass es nicht nötig ist, andere Bibliotheken anzurufen). –

+0

Das Hauptziel ist SSL. Idealerweise könnte ich die Standardeinstellungen von javax.net.ssl. * Verwenden, um eine JVM-Instanz so zu konfigurieren, dass sie den Microsoft-Schlüsselspeicher anstelle des JKS-Standards verwendet, um Zertifikate abzurufen. – fstarnaud

+0

Nur für den Fall - SecureBlackbox enthält eine eigene SSL-Engine und verwendet die Zertifikate, die mit anderen Klassen der Bibliothek erhalten werden (einschließlich TElWinCertStorage, um Zertifikate von Windows zu erhalten). –

Antwort

0

Die specification Staaten

Aufgrund Einfuhrbestimmungen in einigen Ländern stellt die Oracle Implementierung eine Standard-Verschlüsselungsrichtliniendatei Zuständigkeit, die die Stärke von Verschlüsselungsalgorithmen begrenzt.

Wenn stärkere Algorithmen benötigt werden (z. B. AES mit 256-Bit-Schlüsseln), müssen die JCE Unlimited Strength Jurisdiction-Richtliniendateien abgerufen und im JDK/JRE installiert werden.

Es liegt in der Verantwortung des Benutzers, zu überprüfen, ob diese Maßnahme gemäß den lokalen Vorschriften zulässig ist.

Laden Sie die JCE Unlimited Strength Jurisdiction Policy Files herunter und legen Sie sie in Ihren jre Sicherheitsordner.

+0

Ich kann eine solche Antwort nicht wirklich akzeptieren, ohne einen Hinweis darauf, dass das funktioniert. Ich habe den Autor der Frage gefragt, aber noch keine Antwort. –

+0

Ihr Kommentar wird sehr geschätzt. Ich hoffe, dass meine Antwort anderen helfen wird, wenn sie sich an diese wichtige Exportvorschrift halten. – Hannes

+0

Ja, ich habe die "Java-Kryptographie-Erweiterung (JCE) Unlimited Strength Jurisdiction Policy-Dateien" für Java 8 installiert. Das hilft jedoch nicht, da das Problem darin besteht, dass die SunMSCAPI nur die RSA-Chiffre unterstützt. – fstarnaud