Nel codice, si sta chiamando:
sslcontext.load_cert_chain(cert, keyfile=ca_cert)
Dal 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.
In base al nome degli argomenti nel tuo esempio, sembra che si sta passando un certificato CA all'argomento keyfile
. Non è corretto, è necessario passare la chiave privata utilizzata per generare il certificato locale (altrimenti il client non può utilizzare il certificato). Un file della chiave privata avrà un aspetto simile:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,9BA4973008F0A0B36FBE1426C198DD1B
...data...
-----END RSA PRIVATE KEY-----
è necessario solo il certificato CA se si sta cercando di verificare la validità dei certificati SSL che sono stati firmati da questo certificato. In tal caso, probabilmente si utilizzerà SSLContext.load_verify_locations()
per caricare il certificato CA (sebbene non abbia lavorato di recente con il modulo SSL, quindi non prendere la parola su quel punto).
Si dice che la chiave -file potrebbe non essere corretta. Il caricamento del certificato fallirà se il certificato (chiave pubblica) non viene associato al file della chiave privata corretta. – Prabhu
Hai 'keyfile = ca_cert', che probabilmente non è corretto (o hai scelto nomi di variabili orribili). Il tuo 'ca_cert' contiene davvero una chiave privata? – larsks
@larsks In che modo la scelta di nomi di variabili orribili può causare errori nel codice? Qualche suggerimento (o convenzione) su come nominarli? Il file ca_cert inizia con '----- BEGIN CERTIFICATE -----', quella che sembra essere una chiave crittografata valida e termina con '----- CERTIFICATO DI FINE -----'. L'intestazione e il piè di pagina dovrebbero dire qualcosa di diverso? – sargas