为什么每次检查证书的过期时间都不一样?

2024-09-30 22:11:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到一些证书的到期时间,因为我想写一个程序来通知证书何时到期。你知道吗

但是当我运行代码时,我发现有时结果(过期时间)是错误的不一样。它不是现在时间不同了,数字有很多不同,比如1和100。你可以看到图片。我猜拿到证书的过程是错误的,但是我找不到在哪里是的。再说了,这不是时区的问题。你知道吗

for length_list_domain in range(0,len(all_domains['HostedZones'])):

    HostedZoneId = all_domains['HostedZones'][length_list_domain]['Id']
    sub_domains = client.list_resource_record_sets(HostedZoneId = HostedZoneId)     
    for length_list_subdomain in range(0,len(sub_domains['ResourceRecordSets'])):

        try:
            if all_domains['HostedZones'][length_list_domain]['Name'] in null_domain:
                break
            else:

                hostname = sub_domains['ResourceRecordSets'][length_list_subdomain]['Name']
                port = 443
                conn = ssl.create_connection((hostname,port))
                context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
                sock = context.wrap_socket(conn,server_hostname = hostname)
                certificate = ssl.DER_cert_to_PEM_cert(sock.getpeercert(True))
                x509 = reqs.OpenSSL.crypto.load_certificate(reqs.OpenSSL.crypto.FILETYPE_PEM,certificate)


                expire_time_first = x509.get_notAfter()[:-1].decode()



                now = datetime.datetime.utcnow()

                expire_time = datetime.datetime.strptime(expire_time_first,'%Y%m%d%H%M%S')

                remain_time = expire_time - now
                print(remain_time.days)

                remain_time_list[all_domains['HostedZones'][length_list_domain]['Name']] = remain_time.days

                break
        except:
            pass

return remain_time_list

然后我尝试线程锁来解决这个问题,但它没有工作。你知道吗

    mutex = threading.Lock()
for length_list_domain in range(0,len(all_domains['HostedZones'])):

    HostedZoneId = all_domains['HostedZones'][length_list_domain]['Id']
    sub_domains = client.list_resource_record_sets(HostedZoneId = HostedZoneId)     
    for length_list_subdomain in range(0,len(sub_domains['ResourceRecordSets'])):

        try:
            if all_domains['HostedZones'][length_list_domain]['Name'] in null_domain:
                break
            else:
                mutex.acquire()
                hostname = sub_domains['ResourceRecordSets'][length_list_subdomain]['Name']
                port = 443
                conn = ssl.create_connection((hostname,port))
                context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
                sock = context.wrap_socket(conn,server_hostname = hostname)
                certificate = ssl.DER_cert_to_PEM_cert(sock.getpeercert(True))
                x509 = reqs.OpenSSL.crypto.load_certificate(reqs.OpenSSL.crypto.FILETYPE_PEM,certificate)


                expire_time_first = x509.get_notAfter()[:-1].decode()

                mutex.release()

                now = datetime.datetime.utcnow()

                expire_time = datetime.datetime.strptime(expire_time_first,'%Y%m%d%H%M%S')

                remain_time = expire_time - now
                print(remain_time.days)

                remain_time_list[all_domains['HostedZones'][length_list_domain]['Name']] = remain_time.days

                break
        except:
            pass

return remain_time_list

The results are as this picture,the number is the day of remain time(expired time - nowtime)

我使用x509.get\u主题和需求获取替代主题为了获取信息,我只运行了第一个域,似乎会出现另一个域,为什么?你知道吗

the results of the first domain


Tags: nameinssldatetimetimedomainalllength