Domanda

nella mia app sto usando lo sha256 dell'emittente Nome (x509CertImpl.getIssuerDN (). GetName ()) e il numero di serie del certificato di univocamente identificare un certificato, ma ora mi sono reso conto che le altre implementazioni di X509Name come il implementazione di Bouncy Castle libreria visualizza qualcosa di diverso quando chiamo bcX509Name.getName () in modo da questo identificatore non funziona per me ... la mia domanda è: come ho potuto ottenere un identificatore univoco per un X509Name ... forse un ASN.1 o DER codificato rappresentazione di entrambi sarà lo stesso.

È stato utile?

Soluzione

Non è chiaro dalla questione se si utilizza un java.security.cert.X509Certificate, o qualche classe Bouncy Castle che non utilizza le interfacce JCA.

In ogni caso, ci dovrebbe essere un metodo che restituisce un oggetto che rappresenta il nome X.500 dell'emittente. Questo oggetto dovrebbe avere un metodo che restituisce la codifica ASN.1 del nome come una matrice di byte. Utilizzare questo come un componente della vostra chiave.

Se si utilizza lo standard X509Certificate o di Bouncy Castle X509CertificateObject , uso qualcosa di simile (e se non si utilizza una di queste classi, si prega di essere più specifico):

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

Altri suggerimenti

IssuerDN è una struttura complessa e librerie diverse può avere differenti meccanismi di "serializzazione" a stringa. Così potrebbe essere necessario ripensare il suo approccio. In generale, è ok per l'uso hash del certificato stesso (in tutto) + confronto il numero di serie (per portare possibilità di collisione a quasi 0).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top