Non riesco a far funzionare correttamente l'handshake.Le richieste Python inviano il certificato come stringa
cert = 'path/to/cert_file.pem'
url = 'https://example.com/api'
requests.get(url, cert=cert, verify=True)
Questo va bene quando lo uso a livello locale dove ho il file fisicamente. Ospitiamo la nostra applicazione su heroku e utilizziamo environmentvariables.
Il modulo delle richieste sembra non accettare i certificati come stringhe. per esempio.
$ export CERTIFICATE="long-list-of-characters"
requests.get(url, cert=get_env('CERTIFICATE'), verify=True)
Ho anche provato qualcosa di simile:
cert = tempfile.NamedTemporaryFile()
cert.write(CERTIFICATE)
cert.seek(0)
requests.get(url, cert=cert.name, verify=True)
Prima di tutto, funziona in locale ma non su Heroku. Ad ogni modo, non sembra una soluzione solida. Ottengo un errore di handshake SSL.
Qualche suggerimento?
Possibile duplicato di [Come aprire il socket ssl utilizzando il certificato memorizzato in variabili stringa in python] (http://stackoverflow.com/questions/12336239/how -to-open-ssl-socket-using-certificato-memorizzato-in-string-variabili-in-python) –
@Gelbander, che ha firmato il file cert_file.pem? È autofirmato dall'autorità di certificazione personalizzata/inhouse root? Hai provato a caricare il tuo file pem su Heroku, solo per essere sicuro che funzioni passando il percorso completo di pem in Heroku? –
Inoltre non sono sicuro che l'uso delle variabili env sia il modo preferito. Probabilmente è meglio usare "heroku certs: aggiungi server.crt server.key" –