Frage

Wir haben eine Java-Anwendung, die speichert öffentlichen RSA-Schlüssel und ermöglicht es einem Benutzer zu verschlüsseln eine kurz-stream von Informationen, die mit einem der Schlüssel.Die Anwendung ermöglicht auch die Benutzer zu importieren, ein neues key-Zertifikat in den keystore.Wenn wir laden Sie das Zertifikat aus einer Datei wollen wir mit dem gemeinsamen Namen (CN) als alias.Hier ist das problem:

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

Wir wissen, für eine Tatsache, dass das Thema Namen in die Datei hat gemischt Gehäuse und das müssen wir bewahren das Gehäuse.Weiß jemand, wie man mehr flexible X. 509 Unterstützung der JCE in Java6?

Wir haben gedacht, der mit den BouncyCastle lightweight-API, aber die Dokumentation ist fast nicht existent.

EDIT:Mit dem JDK 6u11 Hier ist die Liste der security-Anbieter aus java.Sicherheit:

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

Zertifikat:

-----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-----
War es hilfreich?

Lösung

Wenn du meinst, dass Sie buchstäblich mit der identity-operator (==), um zu testen, dann soll die Aussage immer fehl.Verwenden Sie alias.equals("CN=CommonName, OU=...") statt.

Jedoch, vorausgesetzt, das ist nicht das problem, hinzufügen können:

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

an den entsprechenden stellen in den code und die Ergebnisse posten?Es kann bis mehr führt.Buchen Sie das Zertifikat, das Sie einlegen (in text-freundliche PEM-format) wäre ebenfalls hilfreich sein, wenn es nicht Offenlegung Ihrer persönlich identifizierbaren Informationen.

Andere Tipps

Versuchen Sie es mit X500Principal#getName(String) um den DN in das format Ihrer Wahl.Dann können Sie analysieren den gemeinsamen Namen aus.

Alternativ, wenn Sie eine Zuordnung eines alias zu einem eigentlichen Zertifikat, das Sie speichern könnte die "alias" in allen Kappen (und Abfragen es in all caps), aber Sie würden immer noch die original Gehäuse von der zugeordneten Zertifikat

Den Fehler reproduzieren können.Was JCE tun Sie verwenden?Wir nutzen die Sonnenenergie JCE von Java 5 und 6 und wir bekommen immer die DN in der ursprünglichen Fall.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top