SSL 证书验证 – Python请求
Requests 为 HTTPS 请求验证 SSL 证书,就像 Web 浏览器一样。 SSL 证书是以数字方式将加密密钥绑定到组织详细信息的小型数据文件。通常,具有 SSL 证书的网站被称为安全网站。默认情况下,启用 SSL 验证,如果无法验证证书,Requests 将抛出 SSLError。
禁用 SSL 证书验证
让我们尝试使用Python请求访问具有无效 SSL 证书的网站
Python3
# import requests module
import requests
# Making a get request
response = requests.get('https://expired.badssl.com/')
# print request object
print(response)
Python3
# import requests module
import requests
# Making a get request
response = requests.get('https://expired.badssl.com/', verify = False)
# print request object
print(response)
Python3
# import requests module
import requests
# Making a get request
response = requests.get('https://github.com', verify ='/path / to / certfile')
# print request object
print(response)
输出 :-
该网站没有设置 SSL,因此会引发此错误。
要禁用证书验证,在客户端,可以使用verify属性。
Python3
# import requests module
import requests
# Making a get request
response = requests.get('https://expired.badssl.com/', verify = False)
# print request object
print(response)
输出
由于打印了输出响应 200,我们可以假设请求成功。
手动 SSL 验证
也可以仅通过Python请求将链接传递给证书以进行验证。
Python3
# import requests module
import requests
# Making a get request
response = requests.get('https://github.com', verify ='/path / to / certfile')
# print request object
print(response)
如果提供的路径对于 github.com 的 SSL 证书是正确的,这将起作用。
客户端证书
您还可以指定本地证书用作客户端证书,作为单个文件(包含私钥和证书)或作为两个文件路径的元组:
>>> requests.get('https://kennethreitz.org', cert=('/path/client.cert', '/path/client.key'))
或持久的:
s = requests.Session()
s.cert = '/path/client.cert'
如果您指定了错误的路径或无效的证书,您将收到 SSLError:
>>> requests.get('https://kennethreitz.org', cert='/wrong_path/client.pem')
SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib