python - 如何使用 python 获取 ssl 证书详细信息

标签 python request urllib

我正在使用以下代码来验证 ssl 证书状态,我们能否使用请求模块或 urllib 获取有关证书的更多详细信息,例如公用名 (CN)、到期日期和颁发者

import requests

def check_ssl(url):
    try:
        req = requests.get(url, verify=True)
        print url + ' has a valid SSL certificate!'
    except requests.exceptions.SSLError:
        print url + ' has INVALID SSL certificate!'

check_ssl('https://google.com')
check_ssl('https://example.com')

最佳答案

import socket
import ssl
import datetime

domains_url = [
"devnote.in",
"devnote_wrong.in",
"stackoverflow.com",
"stackoverflow.com/status/404"
]

def ssl_expiry_datetime(hostname):
    ssl_dateformat = r'%b %d %H:%M:%S %Y %Z'

    context = ssl.create_default_context()
    context.check_hostname = False

    conn = context.wrap_socket(
        socket.socket(socket.AF_INET),
        server_hostname=hostname,
    )
    # 5 second timeout
    conn.settimeout(5.0)

    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()
    # Python datetime object
    return datetime.datetime.strptime(ssl_info['notAfter'], ssl_dateformat)

if __name__ == "__main__":
    for value in domains_url:
        now = datetime.datetime.now()
        try:
            expire = ssl_expiry_datetime(value)
            diff = expire - now
            print ("Domain name: {} Expiry Date: {} Expiry Day: {}".format(value,expire.strftime("%Y-%m-%d"),diff.days))
        except Exception as e:
            print (e)

#Output :

Domain name: devnote.in Expiry Date: 2020-11-11 Expiry Day: 46
[Errno -2] Name or service not known
Domain name: stackoverflow.com Expiry Date: 2020-11-05 Expiry Day: 41
[Errno -2] Name or service not known

关于python - 如何使用 python 获取 ssl 证书详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41620369/

相关文章:

python - 计算 CSV 列中单词的出现次数并写入另一个 CSV?

python - 杀死 Python 多处理池

python - 从元组列表中获取交集

javascript - 如何解码诺克记录的响应

java - 如何从HTTP请求中获取正确的数据

对 Coindesk 的 Python API 调用返回 403 或 405。如何排除故障?

python-3.x - 如何在没有 "[ ] '的url字符串中传递列表变量“在python中

python - django 动态蜘蛛错误 "check_mandatory_vars"

Symfony 重定向请求

python - 使用Python获取百度搜索结果url