web-dev-qa-db-fra.com

Rechercher si un certificat est auto-signé ou signé par une autorité de certification

J'ai une application Web qui permet à l'utilisateur de télécharger pkcs12. Je stocke le pkcs12 en tant que binaire dans la base de données. Est-il possible pour moi de savoir si le certificat du pkcs12 est auto-signé ou signé par CA?

J'utilise une application Web Java sur Tomcat et je dispose d'OpenSL.

15
Nishan

C'est un peu compliqué, mais la commande openssl x509 peut signaler l'émetteur et le sujet. Si le sujet et l'émetteur sont les mêmes, il est auto-signé; s'ils sont différents, il a été signé par une autorité de certification. (Strictement parlant, un grand nombre de certificats auto-signés sont également signés par un CA - eux-mêmes.)

Tout en testant cette théorie, j'ai effectué une poignée de tests; il y a quelque chose comme:

cd /etc/ssl/certs
for f in *.0 ; do openssl x509 -in $f -issuer | head -1 > /tmp/$f.issuer ; openssl x509 -in $f -subject | head -1 > /tmp/$f.subject ; done
 cd /tmp
 sed -i -e s/issuer=// *.issuer
 sed -i -e s/subject=// *.subject
 cd /etc/ssl/certs/
 for f in *.0 ; do diff -u /tmp/$f.issuer /tmp/$f.subject ; done

J'espère que cela t'aides.

9
sarnold

Le fil de discussion suivant indique précisément le bon moyen de vérifier si le certificat codé en Base64 (par exemple, PEM) est auto-signé ou non: http://marc.info/?l=openssl-users&m=116177485311662&w=4

Voici l'extrait de code:

openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem

devrait retourner:

self_signed_cert.pem: OK

OU comparer l'émetteur et le sujet. S'ils sont identiques, c'est auto-signé

openssl x509 -in cert.pem -inform PEM -noout -subject -issuer
12
NitinB

Avez-vous essayé le lib BouncyCastle?

http://www.bouncycastle.org/wiki/display/JA1/Frequent+Asked+Questions

"Il existe des exemples de programmes spécifiques pour traiter les certificats d'attributs, PKCS12, SMIME et OpenPGP. Vous les trouverez dans les packages:

org.bouncycastle.jce.examples org.bouncycastle.mail.smime.examples org.bouncycastle.openpgp.examples Les packages de test constituent une autre source utile d'exemples:

org.bouncycastle.crypto.test org.bouncycastle.jce.provider.test org.bouncycastle.cms.test org.bouncycastle.mail.smime.test org. org.bouncycastle.tsp.test "

0
user1352498

Java est incapable d'analyser PKCS12 de sorte que vous deviez le convertir en keystore à l'aide de openssl.

Ici, le fichier de clés contient à la fois une clé privée et un certificat X509 (ou vous pouvez uniquement choisir de stocker le certificat). Ensuite, obtenez l'émetteur auprès de keystore à l'aide de l'API Java standard et vérifiez manuellement l'émetteur.

0
frogcdcn