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.
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.
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
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 "
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.