Comment récupérer/calculer une empreinte numérique du certificat X509 en Java?
J'ai un client java qui est de l'appel d'une opération de service web qui prend un certificat "empreinte" comme paramètre. Je crois que l'empreinte est une sorte de hachage SHA1, en hexadécimal chaîne de format, de le cert de la clé publique, mais je ne suis pas sûr.
L' .NET framework semble inclure un moyen simple d'obtenir cette valeur (X509Certificate2.Empreinte numérique de la propriété). La visualisation d'un .cer propriétés du fichier dans Windows affiche également l'empreinte, ce qui ressemble à:
a6 9c fd b0 58 0d a4 ee ae 9a 47 75 24 c3 0b 9f 5d b6 1c 77
Ma question est donc: Est-ce que quelqu'un sait comment faire pour le récupérer ou de le calculer cette empreinte numérique de chaîne à l'intérieur de Java, si j'ai une instance d'un java.de sécurité.cert.X509Certificate?
- Ce Java démo (URLConnection) programme se connecte à une url https et imprime/calcule toutes sortes d'empreintes digitales, y compris les pin-sha256, de SKI et les Pouces: github.com/ecki/JavaCryptoTest/blob/master/src/main/java/net/...
Vous devez vous connecter pour publier un commentaire.
Le hachage SHA-1 de la DER encodage du certificat est ce .NET est arriver avec X509Certificate2.Empreinte.
Comme indiqué sur la remarques sur MSDN:
Java de la bibliothèque standard ne fournit pas l'empreinte directement, mais vous pouvez l'obtenir comme ceci:
Voici un plein travaillé par exemple à l'aide d'un commodément accessible fichier PEM:
Créer stackoverflow.crt.pem:
Créer X509.java:
Compiler le programme avec Java 8:
Ou Java 9 - en raison de JDK modulaire/JPMS - DataTypeConverter n'est pas dans java.la base de, mais java.xml.lier, vous devez donc vous en dépendent explicitement lors de votre build:
Sinon, sur l'île de Java 9, vous obtenez lorsque vous essayez de construire:
L'exécuter avec Java 8:
En Java 9 - en raison de JDK modulaire/JPMS - DataTypeConverter n'est pas dans java.la base de, mais java.xml.lier, de sorte que vous devez explicitement dépendent d'elle lors de l'exécution de votre programme:
Sinon, sur l'île de Java 9, vous obtenez lorsque vous essayez de l'exécuter:
Obtenir le résultat attendu:
À l'aide d'Apache Commons Codec que vous pouvez faire:
Vous pouvez générer l'empreinte à l'aide de la commande openssl, de sorte exemple, si vous avez le format pem du certificat dans un fichier (file.txt)
alors:
cat file.txt | openssl x509 -sha1 -fingerprint
- ce serait de générer la même empreinteOne-liner à l'aide de Google Goyave
Hashing.sha1()
) est utilisé comme empreinte (comme on le voit dans les autres réponses).Ici est une façon plus simple: