Question

Nous avons une application Java qui stocke les clés publiques RSA et permet à un utilisateur de chiffrer un flux à court d'informations avec l'une des clés. L'application permet également à l'utilisateur d'importer un nouveau certificat de clé dans le keystore. Lorsque nous charger le certificat d'un fichier, nous voulons utiliser le nom commun (CN) comme l'alias. Voici le problème:

CertificateFactory x509CertFact = CertificateFactory.getInstance("X.509");
X509Certificate cert = x509CertFact.generateCertificate(certificateInputStream);
String alias = cert.getSubjectX500Principal().getName();

assert alias.equals("CN=CommonName, OU=TestCo..."); // FAILS
assert alais.equals("cn=commonname, ou=testco..."); // PASSES

Nous savons pertinemment que le nom du sujet dans le fichier a mélangé boîtier et nous devons préserver ce boîtier. Est-ce que quelqu'un sait comment obtenir plus flexible soutien X.509 de l'entreprise criminelle commune java6?

Nous avons pensé à utiliser l'API légère BouncyCastle, mais la documentation est presque inexistante.

EDIT: Utilisation 6u11 Voici JDK la liste des fournisseurs de sécurité de java.security:

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

Le certificat:

-----BEGIN CERTIFICATE-----
MIIDHjCCAtugAwIBAgIESnr4OzALBgcqhkjOOAQDBQAwcjELMAkGA1UEBhMCVVMxFTATBgNVBAoT
DEdlbWFsdG8gSW5jLjEnMCUGA1UECxMeU29sdXRpb25zIGFuZCBTcGVjaWFsIFByb2plY3RzMSMw
IQYDVQQDExpGUkJCTHVuYUNyeXB0b1NlcnZlci0xLjAuMDAeFw0wOTA4MDYxNTM1MjNaFw0wOTEx
MDQxNTM1MjNaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxHZW1hbHRvIEluYy4xJzAlBgNVBAsT
HlNvbHV0aW9ucyBhbmQgU3BlY2lhbCBQcm9qZWN0czEjMCEGA1UEAxMaRlJCQkx1bmFDcnlwdG9T
ZXJ2ZXItMS4wLjAwggG3MIIBLAYHKoZIzjgEATCCAR8CgYEA/X9TgR11EilS30qcLuzk5/YRt1I8
70QAwx4/gLZRJmlFXUAiUftZPY1Y+r/F9bow9subVWzXgTuAHTRv8mZgt2uZUKWkn5/oBHsQIsJP
u6nX/rfGG/g7V+fGqKYVDwT7g/bTxR7DAjVUE1oWkTL2dfOuK2HXKu/yIgMZndFIAccCFQCXYFCP
FSMLzLKSuYKi64QL8Fgc9QKBgQD34aCF1ps93su8q1w2uFe5eZSvu/o66oL5V0wLPQeCZ1FZV466
1FlP5nEHEIGAtEkWcSPoTCgWE7fPCTKMyKbhPBZ6i1R8jSjgo64eK7OmdZFuo38L+iE1YvH7YnoB
JDvMpPG+qFGQiaiD3+Fa5Z8GkotmXoB7VSVkAUw7/s9JKgOBhAACgYBHBBVNzuoXgpPFPkSN71rI
MKkSIUAVE7iLagFCklCEvHlh1UxyRhCWNh/UazaJzHRZofWlVPRGmgtl+J6BJRJIDorPqt8FfifY
fpbAbCQctMToFF5QqggumOlJozXyfV9eyYyNn+Y4yZDr8JKq70WX/S2M+Oo1+SBJsXMTeDdfkDAL
BgcqhkjOOAQDBQADMAAwLQIUA+VcqEYMHwXdKY4XC+oO/zF/pRkCFQCDKAS5HpSMazbZgToEEYft
QFJSvw==
-----END CERTIFICATE-----
Était-ce utile?

La solution

Si vous voulez dire que vous êtes littéralement en utilisant l'opérateur d'identité (==) pour tester, l'affirmation doit toujours échouer. Utilisez alias.equals ( "CN = CommonName, OU = ...") à la place.

Cependant, en supposant que n'est pas le problème, peut ajouter:

System.out.println(x509CertFact.getProvider());
System.out.println(alias);

aux points appropriés dans le code et d'afficher les résultats? Il pourrait se présenter plus de prospects. Affichage du certificat que vous chargez (dans le texte convivial format PEM) serait utile aussi, si elle ne divulgue aucune information d'identification personnelle.

Autres conseils

Essayez d'utiliser X500Principal # getName (String) pour obtenir le DN dans le format de votre choix. Ensuite, vous pouvez analyser le nom commun de cela.

Par ailleurs, si vous cartographiez un alias à un certificat réel que vous pouvez stocker le « alias » en majuscules (et l'interroger en majuscules), mais vous auriez encore le boîtier original du certificat cartographié

Impossible de reproduire l'erreur. Qu'est-ce que vous utilisez JCE? Nous utilisons de Java 5 et 6 JCE du Soleil et nous obtenons toujours le DN en cas d'origine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top