[LINUX] [https-Proxy mit Tintenfisch] Beseitigen Sie den Fehler beim Zugriff auf einen Webserver, auf dem kein zwischengeschaltetes CA-Zertifikat verkettet ist.

Einführung

Ich betreibe einen https-Proxy, der SSL abfängt, und ich habe das Problem gelöst, also werde ich es aufzeichnen. Die zu verwendende Umgebung ist die folgende, die beim letzten Mal erstellt wurde. ** Proxy mit Active Directory-Verknüpfung und SSL-Abfangen mit Squid mit Docker einfach erstellen **

Was ist passiert

Beim Versuch, eine Verbindung zur folgenden Site herzustellen, tritt ein Fehler auf. https://learningnetwork.cisco.com/s/

Es scheint, dass ein Fehler aufgetreten ist, weil der Aussteller des Zertifikats unbekannt ist. Die Kette ist möglicherweise nicht gut nachvollziehbar. Screenshot from Gyazo

Ursachenforschung

Umfrage protokollieren

Wenn Squid im Protokoll das Serverzertifikat empfängt, wird der Versuch verweigert, das fehlende CA-Zwischenzertifikat abzurufen. Aus diesem Grund scheint das Zertifikat nicht verifiziert werden zu können (= die Kette kann nicht verfolgt werden).

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)

Es scheint, dass Tintenfisch 4 oder höher eine Funktion hat, die automatisch ein Zwischenzertifikat erhält. .. ..

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

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

Wie Sie dem Protokoll entnehmen können, scheint es nicht zu funktionieren, da die Kommunikation mit der URL zum Abrufen des Zertifikats nicht zulässig ist.

Versuchen Sie, ein Zertifikat zu erhalten

Für learningnetwork.cisco.com

Als ich das Zertifikat erhalten habe, scheint das CA-Zertifikat nicht angehängt zu sein, damit die Kette folgen kann.

#  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

Für cisco.com

Auf dieser Seite ist die Kette richtig nachgezeichnet. .. ..

#  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

Lösungen

Mit anderen Worten, es sollte möglich sein, ein CA-Zwischenzertifikat zu erhalten, das nicht erhalten werden konnte.

Lösung 1

Fügen Sie die URL hinzu, um das Zwischenzertifikat zur Whitelist zu erhalten.

whitelist


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

Lösung 2

Speichern Sie das fehlende Zwischenzertifizierungsstellenzertifikat auf dem Squid-Server und geben Sie das Zertifikat als externe Zwischenzertifizierungsstelle an. Da das DER-Zertifikat nicht für Tintenfische (?) Verwendet werden kann, speichern Sie es als PEM.

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

Geben Sie das in "squid.conf" erhaltene Zertifikat an.

squid.conf


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

Jetzt können Sie es gut sehen.

Screenshot from Gyazo

Quelle

Ich habe es unten als Referenz verwendet. Verwendung des Befehls openssl https://wiki.squid-cache.org/ConfigExamples/Intercept/SslBumpExplicit

Recommended Posts

[https-Proxy mit Tintenfisch] Beseitigen Sie den Fehler beim Zugriff auf einen Webserver, auf dem kein zwischengeschaltetes CA-Zertifikat verkettet ist.
L Chika (HTTPS-kompatibel) mit Arduino beim Zugriff auf den Webserver
Überprüfen Sie, wann die Version nicht in pyenv wechselt
Wenn Sie auf den Webserver zugreifen, L Chika mit Arduino
Beim Inkrementieren des Werts eines Schlüssels, der nicht vorhanden ist
Der Fehler beim Aufrufen des tkinter-Moduls in einem Texteditor funktioniert nicht wie erwartet