问题描述
我有一些使用Exchangelib处理电子邮件的代码。由于各种原因,证书验证失败,我必须使用通常的NoVerifyHTTPAdapter:
from exchangelib.protocol import BaseProtocol,NoVerifyHTTPAdapter
# Tell exchangelib to use this adapter class instead of the default
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter
这使我想到两个问题:
-
我现在想知道,我是否以未加密的纯文本格式发送和接收?我知道我正在使用的服务器仅打开了端口443。
-
如果我不是以纯文本发送的,是否可以获取我正在使用的证书的名称?
如果在其他地方回答了这个问题,给您带来的不便,我们深感抱歉。
解决方法
您未使用纯文本发送。由于您正在通过HTTPS进行通信,因此您的数据仍处于加密状态。
当证书验证失败时,这意味着无法使用您(或OS供应商)选择信任的本地计算机上的任何根证书来验证服务器的证书,或者该证书与与您通信的服务器,证书已过期或其他任何可能导致证书验证失败的原因。
这意味着您无法保证与之通信的服务器实际上是正确的服务器,这使您容易受到中间人攻击,并使数据暴露于不受信任的服务器。但是通信通道本身仍然是加密的。
What are the implications of ignoring SSL certificate verification?
还有更多讨论如果您绝对无法解决导致证书无效的原因,则最好的选择是在本地接受证书:How to get Python requests to trust a self signed SSL certificate?