In Ihrem Code, den Sie anrufen:
sslcontext.load_cert_chain(cert, keyfile=ca_cert)
Vom documentation:
Load a private key and the corresponding certificate. The certfile string must be the path to a single file in PEM format containing the certificate as well as any number of CA certificates needed to establish the certificate’s authenticity. The keyfile string, if present, must point to a file containing the private key in. Otherwise the private key will be taken from certfile as well. See the discussion of Certificates for more information on how the certificate is stored in the certfile.
Basierend auf den Namen der Argumente in Ihrem Beispiel, es sieht aus wie Sie ein CA-Zertifikat sind vorbei zum keyfile
Argument. Das ist falsch, Sie müssen den privaten Schlüssel übergeben, der zum Generieren Ihres lokalen Zertifikats verwendet wurde (andernfalls kann der Client Ihr Zertifikat nicht verwenden). Eine private Schlüsseldatei wird in etwa so aussehen:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,9BA4973008F0A0B36FBE1426C198DD1B
...data...
-----END RSA PRIVATE KEY-----
Sie nur das CA-Zertifikat benötigen, wenn Sie versuchen, die Gültigkeit von SSL-Zertifikaten, um zu überprüfen, die von diesem Zertifikat signiert wurden. In diesem Fall würden Sie wahrscheinlich SSLContext.load_verify_locations()
verwenden, um das CA-Zertifikat zu laden (obwohl ich vor kurzem nicht mit dem SSL-Modul gearbeitet habe, nehmen Sie mir deshalb nichts vor).
Sie erwähnen, dass die Schlüsseldatei möglicherweise nicht korrekt ist. Das Laden von Zertifikaten schlägt fehl, wenn das Zertifikat (öffentlicher Schlüssel) nicht mit der richtigen Datei für den privaten Schlüssel übereinstimmt. – Prabhu
Sie haben 'keyfile = ca_cert', was wahrscheinlich falsch ist (oder Sie haben schreckliche Variablennamen gewählt). Enthält Ihr 'ca_cert' wirklich einen privaten Schlüssel? – larsks
@larks Wie kann die Auswahl schrecklicher Variablennamen zu Fehlern im Code führen? Irgendwelche Vorschläge (oder Konvention), wie man sie nennt? Die Datei ca_cert beginnt mit '----- BEGIN CERTIFICATE -----', was ein gültiger verschlüsselter Schlüssel zu sein scheint, und endet mit '----- END CERTIFICATE -----'. Sollten Kopfzeile und Fußzeile etwas anderes sagen? – sargas