Frage

In meiner App verwende ich den SHA256 des Emittentennamens (x509CertImpl.getissUerdn (). getName ()) und die Zertifikatseriennummer, um ein Zertifikat eindeutig zu identifizieren, aber jetzt habe ich festgestellt, dass andere Implementierungen von x509Name als Implementierung von Bouncy Castle Library zeigt etwas anderes an, wenn ich bcx509name.getName () aufrufe von beiden wird gleich sein.

War es hilfreich?

Lösung

Aus der Frage geht nicht klar, ob Sie a verwenden java.security.cert.X509Certificate, oder eine Hüpfburgklasse, die die JCA -Schnittstellen nicht verwendet.

In jedem Fall sollte es eine Methode geben, die ein Objekt zurückgibt, das den X.500 -Namen des Emittenten darstellt. Dieses Objekt sollte eine Methode haben, die die ASN.1 -Codierung des Namens als Byte -Array zurückgibt. Verwenden Sie dies als Komponente Ihres Schlüssels.

Wenn Sie den Standard verwenden X509Certificate oder Hüpfburg X509CertificateObject, Verwenden Sie so etwas (und wenn Sie keine dieser Klassen verwenden, seien Sie bitte genauer):

X509Certificate x = ...;
byte[] issuer = x.getIssuerX500Principal().getEncoded();

Andere Tipps

IssuerDN ist eine komplexe Struktur und verschiedene Bibliotheken können unterschiedliche Mechanismen des "Serialisierenden" in die String haben. Möglicherweise müssen Sie Ihren Ansatz neu überdenken. Im Allgemeinen ist es in Ordnung, das Hash des Zertifikats selbst (insgesamt) + Seriennummervergleich zu verwenden (um die Möglichkeit der Kollision auf fast 0 zu bringen).

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