2009-11-28 5 views
7

Nous rencontrons un problème avec KeyManagerFactory dans Sun JRE 1.6. Nous utilisons un code similaire à celui-ci pour télécharger et utiliser un certificat en format p12:Mots de passe Sun Java KeyManagerFactory et null

KeyStore keyStore = KeyStore.getInstance(PKCS12); 
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(SUN_X509); 

InputStream certificateFile = getSSLCertificate(); 
String certificatePassword = getSSLCertificatePassword(); 
keyStore.load(certificateFile, certificatePassword); 
keyManagerFactory.init(keyStore, certificatePassword); 

Ce code fonctionne correctement lorsque le mot de passe du certificat existe. Mais lorsque le mot de passe du certificat est nul (donc le certificat n'est pas protégé par un mot de passe), nous obtenons une erreur de division par zéro de la ligne keyManagerFactory.init.

Est-ce que quelqu'un sait pourquoi cela se produit? Est-il impossible d'utiliser un certificat sans mot de passe? Merci

+0

c'est correct, vous devez avoir un mot de passe. –

Répondre

3

Étant donné que PKCS12 contient une clé privée, vous devez toujours avoir un mot de passe. Je pense que Sun applique accidentellement ceci :)

Pour toutes les API Keystore, un mot de passe est requis pour les clés de stockage et les clés privées. Si vous ne voulez pas vraiment traiter la configuration ou l'interaction avec l'utilisateur, utilisez simplement le mot de passe par défaut "changeit" partout.

+0

Sun applique intentionnellement cela, de sorte que vous n'oublie pas accidentellement que c'est important. –