首页 文章

如何使用aiohttp检查SSL证书的到期日期?

提问于
浏览
5

我知道如何使用pyopenssl获取证书信息,例如到期日期,但是有可能使用aiohttp response object吗?

3 回答

  • 8

    以前的答案是正确的,但你也可以使用套接字lib(这是用python 3.7测试)

    from urllib.request import Request, urlopen, ssl, socket
    from urllib.error import URLError, HTTPError
    import json
    #some site without http/https in the path
    base_url = 'CHANGE_ME_TO_YOUR_SITE'
    port = '443'
    
    hostname = base_url
    context = ssl.create_default_context()
    
    with socket.create_connection((hostname, port)) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
            data = json.dumps(ssock.getpeercert())
            # print(ssock.getpeercert())
    
    print (data)
    
  • 1

    检查这个名为check-tls-certs的仓库 . 它's not really aiohttp, but it'基于asyncio,所以它异步工作 .

  • 1

    我不能在日期之后将其与您当前的日期进行比较,以确定它是否已过期 . 更多详细信息How to import OpenSSL in python还有一段代码可以满足您的需求,但您需要预先安装OpenSSL

    pip install pyopenssl

    import OpenSSL
    import ssl, socket
    cert=ssl.get_server_certificate(('www.google.com', 443))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
    x509.get_notAfter()
    

    对于使用SNI的网站,请参阅以下有关如何获取证书的答案ssl.get_server_certificate for sites with SNI (Server Name Indication)

相关问题