import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
Если URL-адрес использует самоподписанный сертификат, это не сработает с
requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Я знаю, что могу перейти False
к verify
параметру, например:
r = requests.post(url, data=data, verify=False)
Однако я бы хотел направить запросы на копию открытого ключа на диске и сказать ему доверять этому сертификату.
python
ssl
python-requests
Мэтью Мойзен
источник
источник
Ответы:
пытаться:
r = requests.post(url, data=data, verify='/path/to/public_key.pem')
источник
ssl.get_server_certificate
загружал сертификат для(self-signed.badssl.com, 443)
, сохранял этот сертификатcert.pem
, а затем запускал,requests.get('https://self-signed.badssl.com/', verify='cert.pem')
но все равно не получалось с ошибкой SSL (этот сертификат самоподписанный).С помощью
verify
параметра вы можете предоставить пакет настраиваемого центра сертификацииИз документов :
источник
Самый простой - экспортировать переменную,
REQUESTS_CA_BUNDLE
которая указывает на ваш частный центр сертификации или на конкретный пакет сертификатов. В командной строке это можно сделать следующим образом:Если у вас есть центр сертификации и вы не хотите вводить его
export
каждый раз, вы можете добавитьREQUESTS_CA_BUNDLE
его~/.bash_profile
следующим образом:echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
источник
Случай, когда требуется несколько сертификатов, был решен следующим образом: объединить несколько корневых файлов pem, myCert-A-Root.pem и myCert-B-Root.pem, в файл. Затем установите запросы REQUESTS_CA_BUNDLE var в этот файл в моем ./.bash_profile.
$ cp myCert-A-Root.pem ca_roots.pem $ cat myCert-B-Root.pem >> ca_roots.pem $ echo "export REQUESTS_CA_BUNDLE=~/PATH_TO/CA_CHAIN/ca_roots.pem" >> ~/.bash_profile ; source ~/.bash_profile
источник
Настройка
export SSL_CERT_FILE=/path/file.crt
должна делать свою работу.источник
REQUESTS_CA_BUNDLE
в моем случае переменная не действует).Если кто-то случайно приземлится здесь (как это сделал я), желающий добавить CA (в моем случае Charles Proxy) для httplib2, похоже, вы можете добавить его в
cacerts.txt
файл, включенный в пакет python.Например:
Переменные среды, на которые есть ссылки в других решениях, кажутся специфичными для запросов и не были обнаружены httplib2 в моем тестировании.
источник
Вы можете попробовать:
settings = s.merge_environment_settings(prepped.url, None, None, None, None)
Вы можете прочитать больше здесь: http://docs.python-requests.org/en/master/user/advanced/
источник