📜  SSL 证书验证 – Python请求

📅  最后修改于: 2022-05-13 01:54:31.238000             🧑  作者: Mango

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-证书验证-python-requests

该网站没有设置 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)

输出

ssl-证书验证-python-requests-1

由于打印了输出响应 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