有两种使用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
可能的)补丁。