首页 > 其他分享 >cryptography证书相关操作

cryptography证书相关操作

时间:2023-02-22 15:35:38浏览次数:37  
标签:oid cryptography get 证书 value cert 名称 print 操作

cryptography是Python一个密码学相关包,基于OpenSSL,可以对常用X509证书、私钥、公钥等进行处理,提取信息、签名、验证签名、加密、解密等。
安装方法如下

pip3 install cryptography

证书相关使用方法如下

from cryptography import x509
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat
from cryptography.x509 import (DNSName, IPAddress)
from cryptography.x509.oid import ExtensionOID, NameOID

cert_bytes = b'''-----BEGIN CERTIFICATE-----
MIICmzCCAkCgAwIBAgIDBPBxMAoGCCqGSM49BAMCMHsxCzAJBgNVBAYTAmNuMRAw
DgYDVQQIEwdiZWlqaW5nMRAwDgYDVQQHEwdiZWlqaW5nMRMwEQYDVQQKEwpUZXN0
Q01vcmcxMRIwEAYDVQQLEwlyb290LWNlcnQxHzAdBgNVBAMMFmNhLuekuuS+i+a1
i+ivlee7hOe7hzEwHhcNMjMwMTEzMTAzMzE3WhcNMzIwMTExMTAzMzE3WjCBhDEL
MAkGA1UEBhMCY24xEDAOBgNVBAgTB2JlaWppbmcxEDAOBgNVBAcTB2JlaWppbmcx
EzARBgNVBAoTClRlc3RDTW9yZzExDjAMBgNVBAsTBWFkbWluMSwwKgYDVQQDDCPn
pLrkvovmtYvor5XnlKjmiLcxLnNpZ24uVGVzdENNb3JnMTBZMBMGByqGSM49AgEG
CCqGSM49AwEHA0IABOgUND6Hi/Sk5NxWZSYYrm4+CuwMzKEdG2pbySdkFqv8KXPO
6HcrmJqs63YJ9RVX2y4kGDwz0d0w+Pic5vIWOsujgagwgaUwDgYDVR0PAQH/BAQD
AgGmMA8GA1UdJQQIMAYGBFUdJQAwKQYDVR0OBCIEIFM1ET3HKfgbcQscGNWPIFZI
bej+SY6sCuhWtCHoSj32MCsGA1UdIwQkMCKAIK/AH4T9T1bZonOO7+tzl1eLDO24
8wX1TQdeLBVOM0l/MCoGA1UdEQQjMCGCCWxvY2FsaG9zdIIOY2hhaW5tYWtlci5v
cmeHBH8AAAEwCgYIKoZIzj0EAwIDSQAwRgIhAMl0MreFSbM5XfMUhPTbhYYPtyTC
TtQafx96xeykAHlaAiEA/6gveqPsooMn4lNPptsxwPtHxtF/BFNU1BWqyXKDS3w=
-----END CERTIFICATE-----
'''

cert = x509.load_pem_x509_certificate(cert_bytes)

print('生效时间:', cert.not_valid_before)
print('失效时间:', cert.not_valid_after)

# 证书主题信息
print('使用人名称:', cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value)
print('使用人国家名称:', cert.subject.get_attributes_for_oid(NameOID.COUNTRY_NAME)[0].value)
print('使用人位置名称:', cert.subject.get_attributes_for_oid(NameOID.LOCALITY_NAME)[0].value)
print('使用人组织名称:', cert.subject.get_attributes_for_oid(NameOID.ORGANIZATION_NAME)[0].value)
print('使用人组织单位名称:', cert.subject.get_attributes_for_oid(NameOID.ORGANIZATIONAL_UNIT_NAME)[0].value)

# 签发人
print('签发人名称:', cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value)
print('签发人组织名称:', cert.issuer.get_attributes_for_oid(NameOID.ORGANIZATION_NAME)[0].value)
print('签发人组织单位名称:', cert.issuer.get_attributes_for_oid(NameOID.ORGANIZATIONAL_UNIT_NAME)[0].value)

# 签名算法
print('签名算法名称:', cert.signature_algorithm_oid._name)
print('签名哈希算法名称:', cert.signature_hash_algorithm.name)
print('证书哈希(hex):', cert.fingerprint(cert.signature_hash_algorithm).hex())
print('证书密钥标识符SKI(hex):',
      cert.extensions.get_extension_for_oid(ExtensionOID.SUBJECT_KEY_IDENTIFIER).value.key_identifier.hex())

# 生成公钥 (如果是RSA算法format选PublicFormat.PKCS1)
print('公钥PEM:', cert.public_key().public_bytes(Encoding.PEM, format=PublicFormat.SubjectPublicKeyInfo))

# 扩展项

print('使用者替代名称-允许的域名:', cert.extensions.
      get_extension_for_oid(ExtensionOID.SUBJECT_ALTERNATIVE_NAME).value.get_values_for_type(DNSName))
print('使用者替代名称-允许的IP地址:', cert.extensions.
      get_extension_for_oid(ExtensionOID.SUBJECT_ALTERNATIVE_NAME).value.get_values_for_type(IPAddress))

执行结果如下

生效时间: 2023-01-13 10:33:17
失效时间: 2032-01-11 10:33:17
使用人名称: 示例测试用户1.sign.TestCMorg1
使用人国家名称: cn
使用人位置名称: beijing
使用人组织名称: TestCMorg1
使用人组织单位名称: admin
签发人名称: ca.示例测试组织1
签发人组织名称: TestCMorg1
签发人组织单位名称: root-cert
签名算法名称: ecdsa-with-SHA256
签名哈希算法名称: sha256
证书哈希(hex): 8e78b776113cd16a862952a830b8fe809951bdbcaa03a8476b8dabd1d262871b
证书密钥标识符SKI(hex): 5335113dc729f81b710b1c18d58f2056486de8fe498eac0ae856b421e84a3df6
公钥PEM: b'-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6BQ0PoeL9KTk3FZlJhiubj4K7AzM\noR0balvJJ2QWq/wpc87odyuYmqzrdgn1FVfbLiQYPDPR3TD4+Jzm8hY6yw==\n-----END PUBLIC KEY-----\n'
使用者替代名称-允许的域名: ['localhost', 'chainmaker.org']
使用者替代名称-允许的IP地址: [IPv4Address('127.0.0.1')]

标签:oid,cryptography,get,证书,value,cert,名称,print,操作
From: https://www.cnblogs.com/superhin/p/17144565.html

相关文章

  • Ubutun操作系统启用/查看/刷新本地DNS缓存
    前言①DNS被认为是Internet连接的关键部分之一。目的是更快地访问访问的网站。更常见的是,计算机会跟踪DNS记录,或者将其缓存。②DNS缓存是用于DNS查找的临时存储系统,负责......
  • java8 stream 常用操作
    遍历//list遍历,stream()可省略list.stream().forEach(e->{});//map遍历map.forEach((k,v)->{});过滤//保留age>18的userList.stream().filter(e......
  • MacOS 右击文件夹添加「用 VSCode 打开」操作
    打开「自动操作.app」,就是小机器人图标那个;command+n新建文稿,在「选取文稿类型」里选择「快速操作」;按以下步骤操作:第五步贴入代码forfin"$@"do......
  • Linux操作命令(一)ls命令 2.cd命令 3.pwd命令
    1、ls命令ls命令就是list的缩写,ls用来打印出当前目录的清单。参数描述-a–all列出目录下的所有文件,包括以.开头的隐含文件-l除了文件名之外,......
  • 算法随想Day20【二叉树】| LC235-二叉搜索树的最近公共祖先、LC701-二叉搜索树中的插
    LC235.二叉搜索树的最近公共祖先利用二叉搜索树的特性,中序遍历,如果当前节点的值大于q和p的值,公共祖先一定在当前节点的左子树中,同理小于q和p值时,公共祖先一定在当前节点......
  • Containerd安装配置及基本操作
    一、安装1.下载(https://github.com/containerd/containerd)wgethttps://github.com/containerd/containerd/releases/download/v1.6.10/cri-containerd-1.6.10-linux-amd64.......
  • hadoop - hadoop2.6 伪分布式 - Java API 操作 HDFS
    1.环境  hadoop2.6   hdfs地址: hdfs://localhost:9000 开发环境:eclipse  新建Map/Reduce工程2.代码示例packagecn.labelnet.demo;importjava.io.FileIn......
  • js操作shadow-root内的DOM元素
    其实就是documentfragment元素,就是动态生成的文档碎片元素。1,项目中在DOM结构里遇到了shadow-root(open),用JS方法无法直接获取其内的DOM元素2、shadow DOMWebcompon......
  • vim常用操作
    命令作用x删除光标所在行nx删除光标所在处后的n个字符dG删除光标所在处到末尾的所有行D删除光标所在处到行尾的内容:5,7d删除指定范围的行:g......
  • https 自签名证书
    创建rootCA证书cd~&&mkdirmycertcdmycertopensslgenrsa-des3-outrootCA.key2048opensslreq-x509-new-nodes-keyrootCA.key-sha256-days1024-outr......