使用 NoVerifyHTTPAdapter 时的证书验证

Certificate verification when using 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 供应商)选择信任的本地计算机上的任何根证书进行验证,或者证书与您正在与之通信的服务器不匹配、证书已过期或任何其他可能导致无法验证证书的原因。

这意味着您无法保证与您通信的服务器实际上是正确的服务器,这使您容易受到 man-in-the-middle 攻击并将您的数据暴露给不受信任的服务器。但是通信通道本身仍然是加密的。

上还有一些讨论

如果您绝对无法解决无效证书的原因,最好的选择是在本地接受证书: