Python 转换ASN1(x509)需要帮助

Python 转换ASN1(x509)需要帮助,python,converters,Python,Converters,在任何人询问之前,我一直在尝试将我的结果从“20190211004950Z”(ASN1)转换为“2019-02-11”(标准日期),这只是一个简单的SSL到期检查,日期创建/到期日期会像我之前发布的那样持续输出 我的代码如下所示 ** **import OpenSSL import socket import ssl from pprint import pprint from urllib.error import URLError, HTTPError from

在任何人询问之前,我一直在尝试将我的结果从“20190211004950Z”(ASN1)转换为“2019-02-11”(标准日期),这只是一个简单的SSL到期检查,日期创建/到期日期会像我之前发布的那样持续输出

我的代码如下所示

          **

    **import OpenSSL
import socket
import ssl
from pprint import pprint
from urllib.error import URLError, HTTPError
from urllib.request import Request, urlopen
import datetime


def get_certificate(port=443, timeout=10):
    """

    :param timeout:
    :type port: object
    """
    context = ssl.create_default_context()
    # test=(host,port)
    host = input("enter a URL")
    conn = socket.create_connection(address=(host, port))

    sock = context.wrap_socket(conn, server_hostname=host)

    sock.settimeout(timeout)
    try:
        der_cert = sock.getpeercert(True)
    finally:
        sock.close()
    return ssl.DER_cert_to_PEM_cert(der_cert)


certificate = get_certificate()
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, certificate)


result = {
    'subject': dict(x509.get_subject().get_components()),
    'issuer': dict(x509.get_issuer().get_components()),
    'serialNumber': x509.get_serial_number(),
    'version': x509.get_version(),
    'notBefore': str(x509.get_notBefore()),
    'notAfter': str(x509.get_notAfter())
}

extensions = (x509.get_extension(i) for i in range(x509.get_extension_count()))
extension = (e.get_short_name() for e in extensions)
result.update(name=extension)
pprint(result)**

**

任何帮助都将不胜感激

结果='20190211004950Z'


格式化的_result='{}-{}-{}'。格式化(result[:4],result[4:6],result[6:8])

您的字符串是否保证始终遵循以下格式:年4位+月2位+日数?那后面的那些角色呢,它们相关吗?它们是由什么决定的

现在,这里有一个解决方案,它假设日期采用相同的格式,并且应该忽略字符串的其余部分:

导入日期时间
解析_格式=“%Y%m%d”
out\u格式=“%Y-%m-%d”
str_1='20190211004950Z'
parse_date_res=datetime.datetime.strtime(str_1[:8],parse_格式)
date\u str\u out=parse\u date\u res.strftime(out\u格式)

这段代码首先将字符串解析为一个日期对象,因为我不完全确定您是否只需要一个字符串作为输出。在任何情况下,如果没有任何东西阻止您使用日期对象,那么您可能应该

好吧,我觉得有点傻,因为我试图把代码放进去的地方不起作用。我只是得到了和往常一样的结果。你能提供更多的代码吗?输出在哪里?你能分享周围的代码,给出一些上下文吗?字符串解析/格式化与
x509
有什么关系?“ASN1(x509)”是什么意思?编辑原始代码以提供全部内容可能我是盲人,但解析应该在代码中的什么地方进行?“notBefore”:str(x509.get\u notBefore()),“notAfter”:str(x509.get\u notAfter())这些答案最终对您有帮助吗?