Depuis que notre fournisseur de messagerie a changé son certificat SSL, un client POP3 basé sur mono refuse de se connecter à son serveur POP sécurisé pour télécharger des e-mails. D'autres clients n'ont pas de problème; par exemple Thunderbird et Outlook; la plupart des sites SSL ne sont pas non plus capables de vérifier les ports impairs, sauf celui-ci . J'ai travaillé avec les deux fournisseurs pour tenter de cerner le problème, mais j'ai finalement atteint une impasse avec les deux, car je ne connais pas suffisamment les certificats SSL pour être en mesure de guider l'un ou l'autre fournisseur pour comprendre où réside la faute.
Au cours de l'enquête, mon attention a été attirée sur la différence de sortie des deux commandes suivantes (j'ai supprimé les certificats de la sortie pour plus de lisibilité):
echo "" | openssl s_client -showcerts -connect pop.gmail.com:995
CONNECTÉ (00000003) profondeur = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA vérifier l' erreur: num = 20: impossible d'obtenir le certificat d'émetteur local vérifier le retour: 0 --- Chaîne de certificats 0 s: / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com i: / C = US / O = Google Inc / CN = Google Internet Authority G2 ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- 1 s: / C = US / O = Google Inc / CN = Google Internet Authority G2 i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = Equifax / OU = Equifax Secure Certificate Authority ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- --- Certificat de serveur subject = / C = US / ST = California / L = Mountain View / O = Google Inc / CN = pop.gmail.com émetteur = / C = US / O = Google Inc / CN = Google Internet Authority G2 --- Aucun nom d'autorité de certification de certificat client envoyé --- La négociation SSL a lu 3236 octets et écrit 435 octets --- Nouveau, TLSv1 / SSLv3, le chiffrement est RC4-SHA La clé publique du serveur est de 2048 bits La renégociation sécurisée est prise en charge Compression: AUCUNE Expansion: AUCUNE Session SSL: Protocole: TLSv1 Chiffrement: RC4-SHA ID de session: 745F84194498529B91B7D9194363CBBD23425446CF2BFF3BF5557E3C6606CA06 ID de session-ctx: Clé principale: DED1AE0A44609F9D6F54626F4370ED96436A561A59F64D66240A277066322DCD2CCB9A6D198C95F4D2B0C7E6781EECD2 Argument clé: Aucun Heure de début: 1397678434 Délai d'expiration: 300 (sec) Vérifiez le code retour: 20 (impossible d'obtenir le certificat d'émetteur local) --- + OK Gpop prêt pour les demandes de 69.3.61.10 c13mb42148040pdj TERMINÉ
echo "" | openssl s_client -showcerts -connect secure.emailsrvr.com:995
CONNECTÉ (00000003) profondeur = 2 / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA vérifier l' erreur: num = 19: certificat auto-signé dans la chaîne de certificats vérifier le retour: 0 --- Chaîne de certificats 0 s: / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Voir www.rapidssl.com/resources/cps (c) 14 / OU = Contrôle de domaine validé - RapidSSL (R) /CN=secure.emailsrvr.com i: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- 1 s: / C = US / O = GeoTrust, Inc./CN=RapidSSL CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- 2 s: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA i: / C = US / O = GeoTrust Inc./CN=GeoTrust Global CA ----- COMMENCER LE CERTIFICAT ----- ----- CERTIFICAT FINAL ----- --- Certificat de serveur subject = / serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ / dD / OU = 4159320284 / OU = Voir www.rapidssl.com/resources/cps (c) 14 / OU = Contrôle de domaine validé - RapidSSL (R) /CN=secure.emailsrvr.com émetteur = / C = US / O = GeoTrust, Inc./CN=RapidSSL CA --- Aucun nom d'autorité de certification de certificat client envoyé --- La négociation SSL a lu 3876 octets et écrit 319 octets --- Nouveau, TLSv1 / SSLv3, le chiffrement est DHE-RSA-AES256-SHA La clé publique du serveur est de 2048 bits La renégociation sécurisée est prise en charge Compression: AUCUNE Expansion: AUCUNE Session SSL: Protocole: TLSv1 Chiffrement: DHE-RSA-AES256-SHA ID de session: 3F4EE3992B46727BE2C7C3E76A9A6A8D64D66EE843CB1BB17A76AE2E030C7161 ID de session-ctx: Clé principale: 016209E50432EFE2359DB73AB527AF718152BFE6F88215A9CE40604E8FF2E2A3AC97A175F46DF737596866A8BC8E3F7F Argument clé: Aucun Heure de début: 1397678467 Délai d'expiration: 300 (sec) Vérifiez le code retour: 19 (certificat auto-signé dans la chaîne de certificats) --- TERMINÉ
J'ai essayé de comprendre si cela était significatif, car lorsque l' -CApath
option est fournie, les commandes ne produisent aucune erreur:
openssl s_client -CApath /etc/ssl/certs -showcerts -connect secure.emailsrvr.com:995
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA
verify return:1
depth=0 serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD, OU = 4159320284, OU = See www.rapidssl.com/resources/cps (c)14, OU = Domain Control Validated - RapidSSL(R), CN = secure.emailsrvr.com
verify return:1
...
openssl s_client -CApath /etc/ssl/certs -showcerts -connect pop.gmail.com:995
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = pop.gmail.com
verify return:1
...
Je peux également utiliser l' -CAfile
option avec succès après avoir téléchargé le certificat CAfile directement depuis GeoTrust.
Néanmoins, Fog Creek semble penser que le problème réside dans le certificat, car ils ont essayé d'ajouter le certificat au Trust
magasin mono sans succès. Je ne serais pas d'accord avec eux, mais (comme mentionné ci-dessus), alors que la plupart des vérificateurs SSL ne vérifient pas le port 995 ou ne réussissent pas lors de la tentative, j'ai trouvé cette page qui produit l'erreur SSL 7.
Dois-je interpréter la sortie correctement pour signifier qu'il n'y a rien de mal avec le certificat?
la source
openssl s_client
ne semble pas importer de certificats racine par défaut. Essayez ceci à la place:,openssl s_client -connect secure.emailsrvr.com:995 -showcerts -CApath /etc/ssl/certs
et vous constaterez probablement que l'erreur auto-signée disparaît.Réponses:
La réponse (comme expliqué dans ce post security.SE ) est que les deux certificats GeoTrust Global CA que vous voyez dans la chaîne ne sont en fait pas le même certificat , l'un est dérivé de l'autre.
En raison de la signature croisée de CA!
Lorsque le certificat GeoTrust Global CA a été créé et signé pour la première fois, aucun ordinateur / navigateur / application ne l'aurait eu dans son magasin de confiance.
En faisant signer un certificat de l'autorité de certification racine GeoTrust par une autre autorité de certification (avec une réputation et une distribution préexistantes), le certificat résultant (appelé certificat "pont") peut désormais être vérifié par la deuxième autorité de certification, sans que le certificat de l'autorité de certification racine GeoTrust n'ait être explicitement approuvé par le client.
Lorsque Google présente la version à signature croisée du certificat de l'autorité de certification racine GeoTrust, un client qui ne fait pas confiance à l'original peut simplement utiliser le certificat CA Equifax pour vérifier GeoTrust - donc Equifax agit comme une sorte d'ancre de confiance "héritée".
la source
J'ai eu un problème similaire avec fetchmail lorsque j'ai activé la vérification ssl
pop.gmail.com
.J'ai téléchargé le fichier pem d'Equifax, mais cela n'a pas fonctionné tel quel, j'ai dû exécuter
c_rehash ssl/certs
ce qui a créé un lien symbolique avec une valeur de hachage, cela a ensuite fonctionné.Alternativement, la valeur de hachage peut également être connue en exécutant ...
https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem
la source
Lors de la génération et de la configuration des certificats, il faut également mettre à jour le
openssl.cnf
fichier (Debian -/etc/ssl/openssl.cnf
), pour indiquer le chemin approprié, les noms des certificats, etc., alors vous pouvez exécuter la commande et les vérifier sans-CApath
option.Et en conséquence, les hôtes distants pourraient également vérifier correctement vos certificats dans ce cas.
Voici la
openssl.cnf
section appropriée :la source
default_ca
données du (tout) fichier de configuration openssl sont utilisées uniquement pour que l'utilitaire «ca» émette et révoque éventuellement des certificats, jamais pour vérification. La façon de changer le magasin de vérification par défaut (en plus de la recompilation) est avec les variables d'environnement SSL_CERT_ {FILE, DIR}. Cependant (1) en raison d'un bogues_client
n'utilise pas la valeur par défaut (correction prévue en avril 2015) que (2) cet OP ne voulait pas changer de toute façon.