У меня возникла проблема с проверкой конечной точки HTTPS при предоставлении определенного пути сертификата к опции «проверка»; установка «проверяет» на истинную работу DOES:Проверка подлинности Python [SSL: CERTIFICATE_VERIFY_FAILED] (_ssl.c: 590)
import requests
def run_tests():
url="https://www.google.com"
certfilename="google.crt"
generate_cert_file(certfilename)
response = requests.get(url, verify=False)
print "URL:%s, Verify=False. Result: %s"%(url, response.status_code)
response = requests.get(url, verify=True)
print "URL:%s, Verify=True. Result: %s"%(url, response.status_code)
response = requests.get(url, verify=certfilename)
print "URL:%s, Verify=%s. Result: %s"%(url, certfilename, response.status_code)
def generate_cert_file(filename):
cert_text=('''\
-----BEGIN CERTIFICATE-----
MIIEgDCCA2igAwIBAgIIIxZ+YmNtB9AwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTUwOTA5MjI1MzM5WhcNMTUxMjA4MDAwMDAw
WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEXMBUGA1UEAwwOd3d3
Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqH1dz
jOr385g9DXVZowTLkhjCoYGQ/zOLzslSFowYqZnlMiE7iZ8Vm9/iJfhStSMoA6gZ
87uqLENCi3NK+pk4+n1SIPRZS0jorb1jsyenMMy6Fxb9sQe3ndqZpWBtsW5ezW9t
7q5HWA1cNm1KSi2fmwZpDrSaN0TYQdFbRAz6cPf6J/P66qyEC7OInFgLsy4FDdp8
itpjCo/gnk2gz1vpWjiRYLCkz/dlFY3M3kR/s7YcJa7UP7BZ+QmmDfN3y4mxmEfn
Cg8rB25ZbD+oQ+Hua3/oMrx4r3lliou3yrD08/ABEqs16EEPX5wFHtI4CQYAUt5E
rEDl36bpvFD0QkfLAgMBAAGjggFLMIIBRzAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
KwYBBQUHAwIwGQYDVR0RBBIwEIIOd3d3Lmdvb2dsZS5jb20waAYIKwYBBQUHAQEE
XDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2dsZS5jb20vR0lBRzIuY3J0
MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29vZ2xlLmNvbS9vY3NwMB0G
A1UdDgQWBBQHiMS+8X3+WcfbMQymf9yX9XA1yDAMBgNVHRMBAf8EAjAAMB8GA1Ud
IwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMCEGA1UdIAQaMBgwDAYKKwYBBAHW
eQIFATAIBgZngQwBAgIwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29n
bGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAUvY5/JbZLfahjC4F
IZU0jVtGRBDa6tXLhCHAdwLHYLQdHn74oQ8Y1vxL0AYd7V2SBAgrDjCoK9bDQbQi
UZ7xwG9K2O75bS2qYc/OlZLJr0Gdfs71ZpQzlv14SGBXvwPuD6noj+hiZjqICd6t
3Rd5oIFiZvkhNDdN6Uag28rIfR8HECdlkbZNZeLZnyoIaxsprANvlEkY0wEbn1K9
kww3/SYKbdPJ8VQSUOtWgGsO1RPFaE4PP7hCg8Q062+mmCs0ZMQSvrzzv7JQsO5J
EkdG6691HdVA6z/rRGGX8E6assTnJLmVMxRayV+Do07KvywLONTInUWue8heHUSX
EHJZbg==
-----END CERTIFICATE-----\
''')
with open(filename, "wb") as output:
output.write(cert_text)
if __name__=='__main__':
run_tests()
Я делаю что-то неправильно здесь? (Я встроил сертификат inline, чтобы сделать код проще для запуска без необходимости предоставления отдельного файла сертификата)
Я получаю «запросы» от репозитория git - самая новая версия TAG в истории - V2.7.0 и последний коммит является «46ff1a9a543cc4d33541aa64c94f50f0a698736e»
EDIT: Я на самом деле был неправильный сертификат здесь (спасибо Штеффен Ульрих за указание на это), но я теперь подтвердил я есть правильный CERT/конечная точка: и я получаю то же самое ошибка.
Я извлек серт так:
openssl s_client -connect www.google.com:443
И просто скопировал CERT детали в программу питона. Проблема на самом деле происходит и для моих собственных собственных систем - с использованием самозаверяющих сертификатов (что является моим реальным прецедентом).
В качестве альтернативы: где опция 'verify = True' действительно ищет доверенные сертификаты/центры сертификации? (На Java это будет «cacerts» - не знаете, что эквивалентно здесь для Python/запросов?).
Я на платформе Windows здесь.
Какие импортные товары необходимы для этого? Я получаю «NameError: name« Session »не определен» - я попробовал «запросы», «urllib», «urlib2», но не смог заставить их работать. Cheers John – monojohnny
привет, я думаю, вам нужно это: из запросов import Request, Session – Hetdev