Ho un codice come di seguito:SSL per la versione più vecchia di pitone
headers = {'content-type': 'ContentType.APPLICATION_XML'}
uri = "www.client.url.com/hit-here/"
clientCert = "path/to/cert/abc.crt"
clientKey = "path/to/key/abc.key"
PROTOCOL = ssl.PROTOCOL_TLSv1
context = ssl.SSLContext(PROTOCOL)
context.load_default_certs()
context.load_cert_chain(clientCert, clientKey)
conn = httplib.HTTPSConnection(uri, some_port, context=context)
io non sono davvero un programmatore di rete, così ho fatto qualche googling per la connessione stretta di mano e ho trovato ssl.SSLContext(PROTOCOL)
come la funzione necessaria, il codice funziona bene .
Quindi ho colpito il roadblock, il mio locale ha versione 2.7.10 ma tutte le caselle di produzione hanno 2.7.3 con esse, quindi SSLContext
non è supportato e l'aggiornamento della versione python non è un'opzione/in controllo.
Ho provato a leggere ssl — SSL wrapper for socket objects ma non ho potuto dare un senso.
quello che ho provato (invano):
s_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(s_, keyfile=clientKey, certfile=clientCert, cert_reqs=ssl.CERT_REQUIRED)
new_conn = s.connect((uri, some_port))
ma ritorna:
SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)')
Domanda - come generare il contesto SSL su versione precedente in modo da avere una sicura HTTPS connessione?
Non penso che la versione precedente possa funzionare con un contesto. Hai provato a creare la connessione https specificando i certificati, ad esempio conn = httplib.HTTPSConnection (host, porta, key_file, cert_file, strict, timeout) –