首先,我们需要了解一下什么是SSL证书以及SSL证书的作用。SSL(Secure Sockets Layer)是一种在客户端浏览器和Web服务器之间建立加密连接的安全协议。SSL证书则是由公共信任的认证机构颁发的一种数字证书,用于验证收发数据双方的身份以及保护数据的传输安全。在使用Python的requests库进行网络请求时,我们要对SSL证书进行验证,以确保数据的安全传输。
Python的requests库提供了两种SSL证书验证方式:一种是基于CA证书验证,即将CA根证书添加到本地信任列表;另一种是基于自定义证书验证,即将自己生成的证书作为信任证书使用。下面将逐步介绍这两种验证方式的实现方法。
基于CA证书验证的SSL验证方式
基于CA证书的验证方式需要将CA根证书添加到本地的信任证书列表中,只有添加了该证书,才能和网站建立SSL连接。Python的requests库已经默认使用了该验证方式,但是在某些情况下,如自签名证书、不信任的证书等情况下,需要进行手动验证。下面是一个使用requests进行HTTPS访问的示例:
import requests
url = 'https://www.google.com'
response = requests.get(url)
print(response.text)
运行上述代码会发现HTTPS连接被拒绝,并抛出requests.exceptions.SSLError
异常。这是因为Google的SSL证书是由公共信任的CA机构颁发的,但是我们没有将该证书添加到本地的信任列表中。为了解决该问题,需使用verify
参数进行 SSL证书验证,将信任的根证书添加到本地。
import requests
url = 'https://www.google.com'
response = requests.get(url, verify=True)
print(response.text)
在上述代码中,我们将verify
参数设置为True,代表对SSL证书进行验证。由于Google的SSL证书已经被公共信任的CA机构颁发,所以我们不需要另外添加证书。如果需要信任其它的证书,可将verify
参数设置为证书的路径。
基于自定义证书的SSL验证方式
基于自定义证书的验证方式是将自己生成的证书作为信任证书使用,该方式需要先生成一个证书,并添加到本地的信任列表中。以下是生成证书的步骤:
-
生成私钥文件
bash
openssl genrsa -out client.key 2048 -
生成证书签名请求(CSR)文件
bash
openssl req -new -key client.key -out client.csr -
签发自签名证书
bash
openssl x509 -req -days 3650 -in client.csr -signkey client.key -out client.crt
生成证书后,需要将该证书添加到本地信任列表中。以下是在Windows和Linux系统下将证书添加到信任列表的方法:
Windows系统下添加自定义证书
-
在“运行”对话框中输入“mmc”并回车,打开Microsoft Management Console。
-
选择“文件” -> “添加/删除管理单元”,添加“证书”管理单元。
-
选择“计算机账户” -> “本地计算机”,点击“确定”。
-
选择“受信任的根证书颁发机构” -> “证书”,右键选择“所有任务” -> “导入”。
-
选择之前生成的.crt证书,导入到受信任的根证书颁发机构中。
Linux系统下添加自定义证书
-
将生成的.crt证书复制到
/usr/share/ca-certificates/
目录下。 -
执行以下命令:
bash
sudo chmod 644 /usr/share/ca-certificates/client.crt
sudo dpkg-reconfigure ca-certificates
完成以上操作后,就可以使用自定义证书进行SSL验证了。以下是一个使用自定义证书进行HTTPS访问的示例:
import requests
url = 'https://www.example.com'
response = requests.get(url, verify='/path/to/client.crt')
print(response.text)
在上述代码中,我们将verify
参数设置为自定义证书的路径,请求会通过自定义证书进行SSL验证。
实际使用时,需要根据您的具体情况进行证书的生成和添加到信任列表的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python requests的SSL证书验证方式 - Python技术站