Delphi Indy vérifier le certificat de serveur SSL
J'ai parcouru l'internet et n'ont pas trouvé une solution ou une méthode sur la façon de vérifier le certificat lors de la connexion via le protocole HTTPS à l'aide de TIdHTTP.
J'ai accroché jusqu'à un IdSSLIOHandlerSocketOpenSSL composant que l'IOHandler, définir la SSLModes, etc. mais quand je parcourir pour https://s3.amazonaws.com il ne peut pas vérifier le certificat.
OpenSSL (Indy) donne
"Erreur lors de la connexion avec SSL. SSL3_GET_SERVER_CERTIFICATE: Certificat de vérifier échec"
Les bibliothèques OpenSSL avez correctement chargé (vérifié avec WhichFailedToLoad). Le OnStatusInfo événement écrit ce qui suit:
Statut SSL: "avant de brancher l'initialisation"
Statut SSL: "avant de brancher l'initialisation"
Statut SSL: "SSLv2/v3 écrire client hello"
Statut SSL: "SSLv3 serveur de lecture bonjour"
Statut SSL: "SSLv3 lire certificat de serveur B"
Statut SSL: "SSLv3 lire certificat de serveur B"
Statut SSL: "SSLv3 lire certificat de serveur B"
Et OnVerifyPeer, AOk = False.
Comment puis-je obtenir pour vérifier correctement. Ce qui se passe?
Merci pour la lecture,
Adrian
OriginalL'auteur Adrian | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Vous devez implémenter un gestionnaire d'événement pour l'OnVerifyPeer événement de votre TIdSSLIOHandlerSocketOpenSSL composant.
De IdSSLOpenSSL.pas:
Si vous voulez juste de considérer la validité de la même certificats de la Bibliothèque estime également valable, vous avez juste à le mettre en œuvre cette manière:
Comme Indy première vérifie la validité du certificat et de passer à côté de vous si il est Ok ou pas dans l'AOk paramètre. Le dernier mot est dans votre code, vous pourriez laisser passer certains types de mineur erreurs de validation, tout comme de jour, ou même demander à l'utilisateur si le certificat est accepté ou non en cas d'erreur (mineur ou pas).
De comprendre pourquoi cela fonctionne de cette façon, vous pouvez aussi lire tous les commentaires en haut de la IdSSLOpenSSL.pas fichier:
OriginalL'auteur jachguate
Je sais que c'est un ancien post, mais c'est tout ce que je pouvais trouver pour résoudre le problème. Donc, je tiens à ajouter à Marcus de réponse pour les autres avec le même problème:
Lorsque OpenSSL ne peut pas trouver le certificat racine sur le PC, l'Erreur sera de retour #19 (X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN), et de l'AOK sera faux pour le certificat Racine. Lorsque vous chargez manuellement le certificat racine à partir d'un fichier, AOK doit toujours renvoyer la valeur true (et que vous avez obtenu de certificat d'épinglage de quelque sorte trop):
FSSLIOHandlerSocketOpenSSL.SSLOptions.RootCertFile := 'MyRoot.cer';
OriginalL'auteur Piet du Preez
Si vous obtenez une erreur comme
SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
, alors continuer à lire:Il semble en Indy 10, que si vous définissez un
VerifyDepth
de0
, le0
signifie en faitall
.OriginalL'auteur Marcus Adams