Dabei SSL-client-Authentifizierung python
OK, ich bin versucht, client-Zertifikate zur Authentifizierung eines python-client auf einem Nginx server. Hier ist, was ich bisher ausprobiert:
Erstellt eine lokale ZERTIFIZIERUNGSSTELLE
openssl genrsa -des3 -out ca.key 4096 openssl req -new-x509 -days 365-key der ca.Schlüssel -out ca.crt
Erstellte server-Schlüssel und das Zertifikat
openssl genrsa -des3 -out server.key 1024 openssl rsa -in server.key -out server.Schlüssel openssl req -new-key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -CA CA.crt -CAkey ca.key -set_serial 01 -out server.crt
Verwendet eine ähnliche Vorgehensweise zum erstellen eines client-key und Zertifikat
openssl genrsa -des3 -out client.key 1024 openssl rsa -in client.key -out client.Schlüssel openssl req -new-key client.key -out client.csr openssl x509 -req -days 365 -in-client.csr -CA CA.crt -CAkey ca.key -set_serial 01 -out client.crt
Fügen Sie diese Zeilen, um meine nginx config
server { listen 443; ssl auf; server_name dev.lightcloud.com; keepalive_timeout 70; access_log /usr/local/var/log/nginx/lightcloud.- Zugang.melden Sie; error_log /usr/local/var/log/nginx/lightcloud.Fehler.melden Sie; ssl_certificate /Users/wombat/Lightcloud-Web/ssl/server.crt; ssl_certificate_key /Users/wombat/Lightcloud-Web/ssl/server.Schlüssel; ssl_client_certificate /Users/wombat/Lightcloud-Web/ssl/ca.crt; ssl_verify_client auf; location /{ uwsgi_pass unix:///tmp/uwsgi.Buchse; gehören uwsgi_params; } }
erstellt eine PEM client-Datei
cat client.crt client.Schlüssel ca.crt - > client.pem -
erstellt eine test-python-Skript
import ssl import http.client Kontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) Kontext.load_verify_locations("ca.crt") Kontext.load_cert_chain("client.pem") conn = http.client.HTTPSConnection("localhost", context=Kontext) conn.set_debuglevel(3) conn.putrequest('GET', '/') conn.endheaders() Antwort = conn.getresponse() print(response.read())
Und jetzt bekomme ich 400 Die SSL-Zertifikat-Fehler vom server. Was mache ich falsch?
- Es sieht aus wie mein problem vielleicht selbst-signiertes Zertifikat. Sieht aus wie die einzigen Optionen für die client-überprüfung, dass nginx unterstützt ist entweder voll-auf denen scheitert an sich selbst-signiert und optional_no_ca, die es clients ermöglicht, auch wenn keine Bescheinigung vorgelegt wird. Gibt es eine Möglichkeit zu machen, nginx, benötigen ein gültiges client-Zertifikat ohne überprüfung auf Vertrauenswürdige CA? Oder ist es Vertrauen in meine lokale ZERTIFIZIERUNGSSTELLE?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass mein problem war, dass ich nicht den CA richtig war und nicht-signing-Schlüssel der richtige Weg. Ein CA-Zertifikat unterschrieben werden muss und wenn Sie so tun, als top-level CA, die Sie selbst melden Sie Ihr CA-cert.
Dann verwenden Sie ca-Befehl zum signieren von Anfragen