[LINUX] [proxy https avec squid] Éliminez l'erreur lors de l'accès à un serveur Web qui n'a pas de certificat CA intermédiaire enchaîné.

introduction

J'utilise un proxy https qui intercepte ssl, et j'ai résolu le problème, je vais donc l'enregistrer. L'environnement à utiliser est le suivant qui a été créé la dernière fois. ** Créez facilement un proxy avec liaison Active Directory et interception SSL avec squid avec docker **

Qu'est-il arrivé

Une erreur se produit lors de la tentative de connexion au site suivant. https://learningnetwork.cisco.com/s/

Il semble qu'une erreur se soit produite car l'émetteur du certificat est inconnu. La chaîne peut ne pas être bien tracée. Screenshot from Gyazo

Recherche de cause

Enquête de journal

En regardant le journal, lorsque squid reçoit le certificat du serveur, il est REFUSÉ d'essayer d'obtenir le certificat CA intermédiaire manquant. Pour cette raison, il semble que le certificat ne puisse pas être vérifié (= la chaîne ne peut pas être tracée).

squid_access.log


 TCP_DENIED/407 4118 CONNECT learningnetwork.cisco.com:443 - HIER_NONE/- text/html
 TCP_DENIED/407 4488 CONNECT learningnetwork.cisco.com:443 - HIER_NONE/- text/html
 NONE/200 0 CONNECT learningnetwork.cisco.com:443 PROSPER2\\USERNAME HIER_NONE/- -
 TCP_DENIED/407 3616 GET http://trust.quovadisglobal.com/hydsslg2.crt - HIER_NONE/- text/html;charset=utf-8
 TCP_MISS/503 7165 GET https://learningnetwork.cisco.com/s/jp-cln PROSPER2\\USERNAME HIER_DIRECT/161.71.178.161 text/html

squid_cache.log


kid1| ALE missing IDENT
kid1| ERROR: negotiating TLS on FD 23: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed (1/-1/0)

Il semble que squid 4 ou version ultérieure a une fonction qui obtient automatiquement un certificat intermédiaire. .. ..

Squid-4 is capable of downloading missing intermediate CA certificates, like popular browsers do.

Source: https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit#Missing_intermediate_certificates

Comme vous pouvez le voir dans le journal, cela ne semble pas fonctionner car la communication avec l'URL pour obtenir le certificat n'est pas autorisée.

Essayez d'obtenir un certificat

Pour learningnetwork.cisco.com

Lorsque j'ai reçu le certificat, il semble que le certificat CA ne soit pas attaché afin que la chaîne puisse suivre.

#  openssl s_client -connect learningnetwork.cisco.com:443 -showcerts | grep [si]:
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
verify error:num=21:unable to verify the first certificate
verify return:1
 0 s:C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = learningnetwork.cisco.com
   i:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2

Pour cisco.com

De ce côté, la chaîne est correctement tracée. .. ..

#  openssl s_client -connect www.cisco.com:443 -showcerts | grep [si]:
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
verify return:1
depth=0 C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = www.cisco.com
verify return:1
 0 s:C = US, ST = California, L = San Jose, O = "Cisco Systems, Inc.", CN = www.cisco.com
   i:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
 1 s:C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
   i:C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2

Solution

En d'autres termes, il devrait être possible d'obtenir un certificat CA intermédiaire qui n'a pas pu être obtenu.

Solution 1

Ajoutez l'URL pour obtenir le certificat intermédiaire dans la liste blanche.

whitelist


^(https*://)*([^/][^/]*\.)*quovadisglobal\.com(:443|:80)*(/.*)*$

Solution 2

Stockez le certificat CA intermédiaire manquant dans le serveur squid et spécifiez le certificat en tant qu'autorité de certification intermédiaire externe. Étant donné que le certificat DER ne peut pas être utilisé pour squid (?), Stockez-le en tant que PEM.

# curl -L http://trust.quovadisglobal.com/hydsslg2.crt --output - | openssl x509 -inform DER > /etc/squid/certs/ca3rd/hydsslg2.crt

Spécifiez le certificat obtenu dans squid.conf.

squid.conf


sslproxy_foreign_intermediate_certs /etc/squid/certs/ca3rd/hydsslg2.crt

Maintenant, vous pouvez bien le voir.

Screenshot from Gyazo

La source

Je l'ai utilisé comme référence ci-dessous. Comment utiliser la commande openssl https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit

Recommended Posts

[proxy https avec squid] Éliminez l'erreur lors de l'accès à un serveur Web qui n'a pas de certificat CA intermédiaire enchaîné.
L Chika (compatible HTTPS) avec Arduino lors de l'accès au serveur Web
Vérifier quand la version ne change pas dans pyenv
Lorsque vous accédez au serveur Web, L Chika avec Arduino
Lors de l'incrémentation de la valeur d'une clé qui n'existe pas
Erreur lors de l'appel du module tkinter dans un éditeur de texte ne fonctionne pas comme prévu