使用 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
这引出了两个问题:
我现在想知道,我是不是在没有加密的情况下以明文形式发送和接收?我知道我使用的服务器只打开了443端口。
如果我不以纯文本形式发送,有没有办法获取我正在使用的证书的名称?
如果这个问题在其他地方得到了回答,对于给您带来的不便,我们深表歉意,它一定是在我最初的搜索中遗漏了。
您发送的不是纯文本。由于您通过 HTTPS 进行通信,因此您的数据仍处于加密状态。
当证书验证失败时,这意味着服务器的证书无法使用您(或您的 OS 供应商)选择信任的本地计算机上的任何根证书进行验证,或者证书与您正在与之通信的服务器不匹配、证书已过期或任何其他可能导致无法验证证书的原因。
这意味着您无法保证与您通信的服务器实际上是正确的服务器,这使您容易受到 man-in-the-middle 攻击并将您的数据暴露给不受信任的服务器。但是通信通道本身仍然是加密的。
上还有一些讨论
如果您绝对无法解决无效证书的原因,最好的选择是在本地接受证书:
我有一些使用 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 供应商)选择信任的本地计算机上的任何根证书进行验证,或者证书与您正在与之通信的服务器不匹配、证书已过期或任何其他可能导致无法验证证书的原因。
这意味着您无法保证与您通信的服务器实际上是正确的服务器,这使您容易受到 man-in-the-middle 攻击并将您的数据暴露给不受信任的服务器。但是通信通道本身仍然是加密的。
如果您绝对无法解决无效证书的原因,最好的选择是在本地接受证书: