【问题标题】:Need help converting ASN1(x509)需要帮助转换 ASN1(x509)
【发布时间】:2020-02-25 01:01:23
【问题描述】:

坚持尝试将我的结果从“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)**

**

任何帮助将不胜感激

【问题讨论】:

  • 你能分享一下周围的代码,给出一些上下文吗?您的字符串解析/格式化与x509 有什么关系? “ASN1(x509)”是什么意思?
  • 编辑了原始代码以提供全部内容
  • 也许我是个盲人,但是你的代码应该在哪里进行解析呢?
  • 'notBefore': str(x509.get_notBefore()), 'notAfter': str(x509.get_notAfter())
  • 这些答案对你有帮助吗?

标签: python converters


【解决方案1】:

您的字符串是否保证始终遵循以下格式:4 位数字表示年份 + 2 位数字表示月份 + 数字表示日期?之后出现的所有这些角色呢,它们是否相关?它们是由什么决定的?

目前,这是一个假设日期遵循相同格式的解决方案,并且应该忽略字符串的其余部分:

import datetime


parse_format = ‘%Y%m%d’
out_format = ‘%Y-%m-%d’

str_1 = ‘20190211004950Z’

parse_date_res = datetime.datetime.strptime(str_1[:8], parse_format)

date_str_out = parse_date_res.strftime(out_format)

此代码首先将字符串解析为日期对象,因为我不完全确定您是否只是想要一个字符串作为输出。无论如何,如果没有什么能阻止您使用日期对象,那么您可能应该这样做!

【讨论】:

    【解决方案2】:

    结果 = '20190211004950Z'

    formatted_result = '{}-{}-{}'.format(result[:4],result[4:6],result[6:8])

    【讨论】:

    • 好的,所以我觉得有点愚蠢,因为我试图将代码放入其中不起作用。我只是得到和往常一样的结果
    • 你能提供更多的代码吗?输出在哪里?
    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2015-11-11
    • 2019-12-23
    相关资源
    最近更新 更多