Python 转换ASN1(x509)需要帮助
在任何人询问之前,我一直在尝试将我的结果从“20190211004950Z”(ASN1)转换为“2019-02-11”(标准日期),这只是一个简单的SSL到期检查,日期创建/到期日期会像我之前发布的那样持续输出 我的代码如下所示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
**
**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())这些答案最终对您有帮助吗?