Python通过OpenSSL获取指定域名对应的SSL证书

2019/12/28 14:21:27

本文主要是介绍Python通过OpenSSL获取指定域名对应的SSL证书,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

同一台服务器上配置了不同的虚拟主机域名证书也可以获取到,直接上代码了:


def get_certificate(hostname, port):
    import idna
    from socket import socket
    from OpenSSL import SSL

    sock = socket()

    sock.connect((hostname, port), )
    ctx = SSL.Context(SSL.SSLv23_METHOD)
    ctx.check_hostname = False
    ctx.verify_mode = SSL.VERIFY_NONE

    sock_ssl = SSL.Connection(ctx, sock)
    sock_ssl.set_tlsext_host_name(idna.encode(hostname))  # 关键: 对应不同域名的证书
    sock_ssl.set_connect_state()
    sock_ssl.do_handshake()
    cert = sock_ssl.get_peer_certificate()
    sock_ssl.close()
    sock.close()
    return cert


for u in ['https://www.baidu.com/', 'https://mp.weixin.qq.com/', 'https://www.qq.com/']:
    from urllib import parse

    rs = parse.urlparse(u)
    cert = get_certificate(rs.hostname, int(rs.port or 443))
    print(u)
    print('\ttime:', cert.get_notBefore(), '~', cert.get_notAfter())


这篇关于Python通过OpenSSL获取指定域名对应的SSL证书的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程