有两种使用SSL /
TLS的方法:客户端身份验证和“基本”,即客户端未经身份验证。在客户端身份验证的连接中,服务器和客户端都向对方发送证书。在“基本”中,只有服务器可以。
如果您既未通过证书也未通过密钥文件,
smtplib则将使用对客户端进行身份验证的基本连接。
如果您使用证书,它将用于客户端验证的连接。在这种情况下,服务器将通过签名握手消息来要求客户端显示其拥有证书。为了使客户端能够做到这一点,它还需要私钥,该私钥可以在证书文件中,也可以作为单独的密钥文件。
长话短说,如果要使用客户端证书,则还必须使用密钥。如果没有,您可以将两者都留空。
OTOH,也许您有要用于连接的服务器证书文件或CA列表?
在这种情况下,你需要将它传递给
ssl.wrap_socket在
ca_certs参数。由于您使用Python
2.6有没有简单的方法来做到这一点与
smtplib(Python的3.3+有一个
context参数STARTTLS)。
如何解决这个问题取决于您的应用程序。例如,如果您不需要
ssl其他任何东西,那么骇人听闻的解决方案就是用猴子补丁
ssl.wrap_socket来提供您的
ca_cert(以及
cert_reqs=CERT_REQUIRED可能的)补丁。
一个更完善的解决方案是
smtplib.SMTP使用您自己的变体进行扩展,该变体允许传入这些参数。



