9
votes

Vérification des pairs en SSL à l'aide de Python

J'essayais de savoir comment je peux faire la vérification d'un certificat auto-signé par un serveur en Python. Je n'ai pas pu trouver beaucoup de données dans Google. Je veux aussi m'assurer que l'URL du serveur

Merci d'avance pour toutes les idées.


0 commentaires

4 Réponses :


0
votes

Il est impossible de vérifier un certificat auto-signé en raison de sa nature même: elle est auto-signée.

Vous devez signer un certificat de certains autres certificats de tiers de confiance pour pouvoir vérifier quoi que ce soit et, après cela, vous pouvez ajouter le certificat de ce tiers à la liste de votre CAS approuvé, puis vous pourrez vérifier les certificats signés. par ce certificat / ca.

Si vous voulez des recommandations sur la façon de faire cela dans Python, vous devez fournir le nom de la bibliothèque SSL que vous utilisez, car il existe un choix de bibliothèques SSL pour Python.


2 commentaires

Tous les certificats de l'autorité de haut niveau sont auto-signés et il n'y a pas de problème sans vérification (confiance).


Bien sûr, vous pouvez vérifier un certificat auto-signé, vous avez juste besoin du certificat copié localement. Il s'agit essentiellement d'une authentification clé publique / privée à ce stade. De nombreux systèmes d'authentification locaux fonctionnent de cette façon, vérifiant que l'hôte est légitime en utilisant le Cert X.509. Regardez CertMaster et Func pour des exemples de Python



2
votes

Je suppose que vous utilisez une liaison OpenSSL. Je vois 2 façons de résoudre votre problème.

  1. Vous pouvez ajouter votre certificat au répertoire OpenSSL (Exécuter OpenSSL version -D pour le voir pour votre système). Cela affectera tous les programmes utilisant OpenSSL sur votre machine.
  2. Certificat de charge et ajoutez-le de l'heure d'exécution (la croquisse du code ci-dessous est destinée à PyopensSl, mais elle devrait être similaire pour les autres liaisons):

    . xxx


1 commentaires

Utilisation de ce code, vous ne vérifiez pas le certificat auto-signé, vous l'ajoutez explicitement à un magasin de certificats de confiance, ainsi que «vérifier» lui-même. L'ajout du certificat au répertoire OpenSSL fait exactement la même chose. Encore une fois, il est impossible de vérifier un certificat auto-signé: tout certificat auto-signé passera votre test de vérification.



10
votes

des commentaires à ma première réponse, je vois qu'il existe une malentendante générale ce qui "vérifie un certificat signifie". Je vais essayer d'écrire une brève explication ici pour éliminer certaines des illusions.

La vérification du certificat consiste à vérifier une signature sur les métadonnées de certificat (sujet, période de validité, extensions et telles) contre une signature cryptographique.

Si tout ce que vous avez pour la validation est un certificat auto-signé, vous ne pouvez pas le distinguer d'un autre certificat auto-signé avec exactement les mêmes métadonnées, mais la clé différente, à moins que vous sachiez la clé du certificat de clé à l'avance. Et n'oubliez pas que vous établissez toute cette procédure de vérification pour supprimer l'obligation de disposer de cette connaissance pré-partagée. Avec une vérification régulière du certificat, vous ne pouvez pas supprimer complètement l'obligation de disposer de knowlege pré-partagé, qui est un ensemble de certificats tiers, également appelés «certificats de l'autorité de certification». Étant donné que cette connaissance est pré-partagée, ces certificats peuvent être auto-signés, mais rappelez-vous que vous avez reçu des informations sur la validité de ces certificats non du processus de vérification, mais de certaines connaissances extérieures.

Quand vous avez Un ensemble de "certificats de CA" de confiance distribués entre pairs, vous pouvez utiliser celles-ci pour signer d'autres certificats et vérifier les signatures contre cette connaissance pré-partagée de CAS de confiance.

Mais si vous n'avez aucune connaissance supplémentaire sur un certificat auto-signé, à l'exception du certificat lui-même, vous ne pouvez faire aucune hypothèse sur la confiance de ce certificat particulier, car il peut être émis par un pirate piratévable diabolique ainsi que par vous Serveur de confiance.

S'il vous plaît, acquérir des connaissances sur homme dans le attaque moyenne , Infrastructure de clé publique et CRYPTOGRAPHIE CLÉ PUBLIQUE En général avant de mettre en œuvre tout type de processus de vérification du certificat.

Veuillez comprendre cette vérification aveugle d'un soi -signé Certificat ne vous protégera pas même d'un pirate intelligent de votre propre réseau, qui ne considérons même pas la sécurité Internet en général.

edit : question auteur a précisé qu'il cherchait Pour vérifier une signature VeriSign (ou autre CA) sur un certificat à l'aide de la fixation M2Crypto. Voici deux exemples: xxx

Si vous allez utiliser un répertoire avec de nombreux certificats de CA (qui est souvent plus pratique), vous devez renommer chaque certificat à .0 est le hachage du sujet du certificat (obtenu avec openssl x509 -noout-hash -in cert.pem ).


3 commentaires

Je cherchais en fait une vérification de certificat signée Verisign à l'aide de M2Crypto.


Soulevé pour mentionner que vous pouvez vérifier un certificat si vous avez déjà une connaissance pré-partagée de confiance du certificat.


Une autre chose à retenir lorsque vous travaillez avec SSL (en particulier les clients SSL), vous souhaitez également également vérifier que vous parlez au bon hôte. M2Crypto fait cela automatiquement.



0
votes

Vous avez demandé "Vérification de pair en SSL à l'aide de Python".

J'ai tendance à utiliser un "magasin de fiducie" local - un répertoire complet ou .crt , .pem , ou Les fichiers pour vérifier que le serveur est digne de confiance en fonction de cet annuaire local de certificats: xxx

comme @Abbott dit - Avant de vous Exécutez ce script - vous avez besoin des liens symboliques pour Capath pour fonctionner. Ceci est super simple si vous avez openssl installé: xxx

si vous n'exécutez pas c_rehash Ce ne sera pas travail. Pour plus d'informations man c_rehash .


0 commentaires