使用Python获取smtp服务器证书

时间:2011-02-24 18:09:14

标签: python ssl

连接到支持STARTTLS并获取其服务器SSL证书的SMTP服务器的最简单方法是什么?我知道可以使用openssl完成这样的事情

openssl s_client -starttls smtp -crlf -connect 192.168.0.1:25

我怎样才能在Python中做到这一点,我不想调用openssl并解析其输出。我看了M2Crypto这是一个openssl包装器,但据我所知,它不支持starttls。如何使用Python库的一个例子将非常感激。

4 个答案:

答案 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()方法,它应该处理所有问题:

http://docs.python.org/library/smtplib.html