Pregunta

En mi aplicación, estoy usando el SHA256 del nombre del emisor (x509certimpl.getissuerdn (). getName ()) y el número de serie del certificado para identificar de manera única un certificado, pero ahora me he dado cuenta de que otras implementaciones de x509name como la implementación de Bouncy Castle Library muestra algo diferente cuando llamo bcx509name.getName () para que este identificador no funcione para mí ... mi pregunta es cómo podría obtener un identificador único para un nombre x509 ... tal vez una representación codificada ASN.1 o der en de ambos serán lo mismo.

¿Fue útil?

Solución

No está claro por la pregunta si está utilizando un java.security.cert.X509Certificate, o una clase de castillo hinchable que no usa las interfaces JCA.

En cualquier caso, debe haber un método que devuelva un objeto que represente el nombre X.500 del emisor. Este objeto debe tener un método que devuelva la codificación ASN.1 del nombre como una matriz de bytes. Use esto como un componente de su clave.

Si está utilizando el estándar X509Certificate o el castillo hinchable X509CertificateObject, use algo como esto (y si no está utilizando una de estas clases, sea más específico):

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

Otros consejos

Issuerdn es una estructura compleja y diferentes bibliotecas pueden tener diferentes mecanismos de "serializar" a la cadena. Por lo tanto, es posible que deba repensar su enfoque. En general, está bien usar el hash del certificado en sí (en todo) + comparación de números de serie (para aportar la posibilidad de colisión a casi 0).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top