连接到支持STARTTLS并获取其服务器SSL证书的SMTP服务器的最简单方法是什么?我知道可以使用openssl完成这样的事情
openssl s_client -starttls smtp -crlf -connect 192.168.0.1:25
我怎样才能在Python中做到这一点,我不想调用openssl并解析其输出。我看了M2Crypto这是一个openssl包装器,但据我所知,它不支持starttls。如何使用Python库的一个例子将非常感激。
答案 0 :(得分:1)
这将返回二进制格式的证书(DER编码):
import socket, ssl
s = socket.socket()
s.connect(("host", 25))
s.send("STARTTLS\n")
s.recv(1000)
ss = ssl.wrap_socket(s)
certificate_der = ss.getpeercert(True)
这当然是需要一个想法,错误处理等。如果要解码证书中的信息,您必须为可接受的CA生成证书颁发机构bundle /目录(getpeercert()将在这种情况下返回有意义的dict),或者使用功能更强大的ssl库,例如M2Crypto。
答案 1 :(得分:0)
您可以尝试以下方式:
import ssl
cert = ssl.get_server_certificate(('imap.gmail.com',993))
获取服务器证书
答案 2 :(得分:0)
由于我无法评论住持答案,请注意,根据服务器配置,您可能需要在STARTTLS之前发送EHLO:
ID: NUMBERS:
A 488
A 980
A 32
B 693
C 78
C 45
答案 3 :(得分:-2)
smtplib提供了starttls()方法,它应该处理所有问题: