Question
Comment puis-je vérifier qu'un certificat X.509 est signé par un autre certificat en utilisant PyOpenSSL ou Twisted ? Je veux qu'un client vérifie que le certificat de serveur reçu est celui qui a signé son certificat de client.
J'ai parcouru la documentation de PyOpenSSL et je n'ai rien trouvé sur la façon de vérifier un certificat séparément de l'établissement de la connexion SSL.
J'ai trouvé une référence à OpenSSL.crypto:X509.verify()
en twisted.internet._sslverify:PublicKey.verifyCertificate()
mais la méthode twisted est commentée (dans Twisted 13.0) et la méthode X509 n'existe pas (dans PyOpenSSL 0.13).
pyOpenSSL n'a pas de support pour la vérification d'un certificat. décrit un bogue pour ne pas être en mesure de vérifier manuellement une chaîne de certificats, mais je ne suis pas tout à fait sûr si c'est ce que j'essaie de faire.
Cas d'utilisation
Certificats :
-
Génération d'un certificat CA auto-signé avec openssl.
-
Certificat de serveur généré et signé par le certificat CA.
-
Certificat client généré et signé par le certificat du serveur.
Mise en place :
-
Le serveur utilise l'outil Twisted CertificateOptions avec son certificat de serveur. Les certitudes de l'AC et du serveur permettent d'établir une chaîne dans laquelle le certificat du serveur vérifie le certificat du client reçu, et le certificat de l'AC vérifie le certificat du serveur (toutes les fonctionnalités intégrées).
-
Le client utilise également CertificateOptions pour le certificat du client. Le CA certs ne contient que le CA cert.
Tout cela fonctionne bien (les deux parties se vérifient mutuellement) mais je veux effectuer une étape supplémentaire :
- Dans le client set_verify() vérifie que le certificat du client est signé par le certificat du serveur.