使用NoVerifyHTTPAdapter时的证书验证

问题描述

我有一些使用Exchangelib处理电子邮件的代码。由于各种原因,证书验证失败,我必须使用通常的NoVerifyHTTPAdapter:

from exchangelib.protocol import BaseProtocol,NoVerifyHTTPAdapter
# Tell exchangelib to use this adapter class instead of the default
BaseProtocol.HTTP_ADAPTER_CLS = NoVerifyHTTPAdapter

这使我想到两个问题:

  1. 我现在想知道,我是否以未加密的纯文本格式发送和接收?我知道我正在使用的服务器仅打开了端口443。

  2. 如果我不是以纯文本发送的,是否可以获取我正在使用的证书的名称?

如果在其他地方回答了这个问题,给您带来的不便,我们深感抱歉。

解决方法

您未使用纯文本发送。由于您正在通过HTTPS进行通信,因此您的数据仍处于加密状态。

当证书验证失败时,这意味着无法使用您(或OS供应商)选择信任的本地计算机上的任何根证书来验证服务器的证书,或者该证书与与您通信的服务器,证书已过期或其他任何可能导致证书验证失败的原因。

这意味着您无法保证与之通信的服务器实际上是正确的服务器,这使您容易受到中间人攻击,并使数据暴露于不受信任的服务器。但是通信通道本身仍然是加密的。

What are the implications of ignoring SSL certificate verification?

还有更多讨论

如果您绝对无法解决导致证书无效的原因,则最好的选择是在本地接受证书:How to get Python requests to trust a self signed SSL certificate?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...