首页
学习
活动
专区
圈层
工具
发布

Python密码学-如何在自签名证书中包含“主题密钥标识符”和“授权密钥标识符”的X509扩展?

在Python密码学中,要在自签名证书中包含“主题密钥标识符”(Subject Key Identifier,SKI)和“授权密钥标识符”(Authority Key Identifier,AKI)的X509扩展,可以使用cryptography库来实现。以下是一个示例代码,展示了如何生成包含这些扩展的自签名证书。

安装依赖

首先,确保你已经安装了cryptography库:

代码语言:txt
复制
pip install cryptography

示例代码

代码语言:txt
复制
from cryptography import x509
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from datetime import datetime, timedelta

# 生成私钥
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)

# 生成公钥
public_key = private_key.public_key()

# 创建证书主题
subject = x509.Name([
    x509.NameAttribute(x509.NameOID.COMMON_NAME, u"example.com"),
])

# 创建自签名证书
cert = x509.CertificateBuilder().subject_name(
    subject
).issuer_name(
    subject  # 自签名,所以颁发者和主题相同
).public_key(
    public_key
).serial_number(
    x509.random_serial_number()
).not_valid_before(
    datetime.utcnow()
).not_valid_after(
    datetime.utcnow() + timedelta(days=365)
).add_extension(
    x509.SubjectKeyIdentifier.from_public_key(public_key),
    critical=False,
).add_extension(
    x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier(
        x509.SubjectKeyIdentifier.from_public_key(public_key)
    ),
    critical=False,
).sign(private_key, hashes.SHA256(), default_backend())

# 序列化私钥和证书
private_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption()
)

cert_pem = cert.public_bytes(
    encoding=serialization.Encoding.PEM
)

print("Private Key:")
print(private_pem.decode())
print("Certificate:")
print(cert_pem.decode())

解释

  1. 生成私钥和公钥:使用rsa.generate_private_key生成私钥,并从中提取公钥。
  2. 创建证书主题:定义证书的主题信息。
  3. 创建自签名证书:使用x509.CertificateBuilder构建证书,并添加SubjectKeyIdentifierAuthorityKeyIdentifier扩展。
  4. 序列化私钥和证书:将私钥和证书序列化为PEM格式。

参考链接

通过这种方式,你可以在自签名证书中包含所需的X509扩展,从而增强证书的安全性和可验证性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

写给开发人员的实用密码学 - CA

CA负责签发和管理数字证书,且具有权威性和公正性,它的作用就像我们现实生活中颁发证件的公司,如护照办理机构。 根CA信任模型 面对全球这么广泛的用户,仅仅一个CA显然不够。...根据服务器实体证书寻找完整证书链的方法很简单,浏览器从服务器实体证书中获取CA密钥标识符(Authority Key Identifier),进而获取上一级中间证书文件,然后通过中间证书中的CA密钥标识符不断迭代直到获取根证书...主要是迭代校验每张证书的签名,最后会找到自签名的根证书,由于浏览器已经集成了根证书,可以充分信任根证书的公钥,完成最后的签名校验。...再比如,浏览器通常会校验密钥用法(Key Usage)扩展,该扩展对应的值如果不包含数字签名(Digital Signature)和密钥协商(Key Encipherment),校验失败。...(3)中间证书也包含一个公钥,需要校验该公钥的用途,校验方法就是判断密钥用法(Key Usage)扩展,该扩展对应的值如果不包含Digital Signature(数字签名)、Certificate Sign

1.2K30

netty系列之:对聊天进行加密

在X.500基础上进行了功能增强, X.509是在1988年发布的。X.509证书由用户公共密钥和用户标识符组成。...此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。...熟悉OpenSSL的童鞋应该知道使用openssl命令可以生成私钥文件和对应的自签名证书文件。 具体openssl的操作可以查看我的其他文章,这里就不详细讲解了。...看这个类的名字就是知道它是一个自签名的证书类,并且会自动将证书文件和私钥文件生成在系统的temp文件夹中,所以这个类在生产环境中是不推荐使用的。...当然,CA服务器也不是必须的,客户端校验的目的是查看证书中的公钥和发送方的公钥是不是一致的,那么对于不能联网的环境,或者自签名的环境中,我们只需要在客户端校验证书中的指纹是否一致即可。

1.2K00
  • 基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等

    X.509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。...熟悉OpenSSL的童鞋应该知道使用openssl命令可以生成私钥文件和对应的自签名证书文件。具体openssl的操作可以查看我的其他文章,这里就不详细讲解了。...看这个类的名字就是知道它是一个自签名的证书类,并且会自动将证书文件和私钥文件生成在系统的temp文件夹中,所以这个类在生产环境中是不推荐使用的。...当然:CA服务器也不是必须的,客户端校验的目的是查看证书中的公钥和发送方的公钥是不是一致的,那么对于不能联网的环境,或者自签名的环境中,我们只需要在客户端校验证书中的指纹是否一致即可。...netty中提供了一个FingerprintTrustManagerFactory类,可以对证书中的指纹进行校验。该类中有个fingerprints数组,用来存储安全的授权过的指纹信息。

    1.2K20

    HTTPS科普(转) 为什么需要https

    问题一:公钥如何获取 这里要涉及两个非常重要的概念:证书、CA(证书颁发机构)。 证书 可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。...算法标识符用来指定CA签发证书时所使用的: 1) 公开密钥算法 2) hash算法 example: sha256WithRSAEncryption 须向国际知名标准组织(如ISO)注册...证书持有者公开密钥信息(Subject Public Key Info) 证书持有者公开密钥信息域包含两个重要信息: 1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。...此标识符包含公开密钥算法和hash算法。 8. 扩展项(extension) X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。...标准扩展是指 由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来 注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

    1K50

    最详细的 HTTPS 科普扫盲帖

    问题一:公钥如何获取 这里要涉及两个非常重要的概念:证书、CA(证书颁发机构)。 证书 可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。...算法标识符用来指定CA签发证书时所使用的: 1) 公开密钥算法 2) hash算法example: sha256WithRSAEncryption 须向国际知名标准组织(如ISO)注册4....证书持有者公开密钥信息(Subject Public Key Info) 证书持有者公开密钥信息域包含两个重要信息: 1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。...此标识符包含公开密钥算法和hash算法。8. 扩展项(extension) X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。...标准扩展是指 由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来 注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。9.

    84830

    HTTPS科普扫盲帖

    问题一:公钥如何获取 这里要涉及两个非常重要的概念:证书、CA(证书颁发机构)。 证书 可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。...算法标识符用来指定CA签发证书时所使用的: 1) 公开密钥算法 2) hash算法 example: sha256WithRSAEncryption 须向国际知名标准组织(如ISO)注册...证书持有者公开密钥信息(Subject Public Key Info) 证书持有者公开密钥信息域包含两个重要信息: 1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。...此标识符包含公开密钥算法和hash算法。 8. 扩展项(extension) X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。...标准扩展是指 由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来 注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

    47530

    HTTPS科普扫盲帖

    问题一:公钥如何获取 这里要涉及两个非常重要的概念:证书、CA(证书颁发机构)。 证书 可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。...算法标识符用来指定CA签发证书时所使用的: 1) 公开密钥算法 2) hash算法 example: sha256WithRSAEncryption 须向国际知名标准组织(如ISO)注册...证书持有者公开密钥信息(Subject Public Key Info) 证书持有者公开密钥信息域包含两个重要信息: 1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。...此标识符包含公开密钥算法和hash算法。 8. 扩展项(extension) X.509 V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。...标准扩展是指 由X.509 V3版本定义的对V2版本增加的具有广泛应用前景的扩展项,任何人都可以向一些权威机构,如ISO,来 注册一些其他扩展,如果这些扩展项应用广泛,也许以后会成为标准扩展项。

    1.5K80

    PKI - 借助Nginx实现_客户端使用CA根证书签发客户端证书

    具体地,它执行了以下操作: -x509:生成一个自签名的 X.509 格式证书。 -new:创建一个新的证书请求。 -nodes:不使用密码加密密钥。...-key client-ca.key:指定之前生成的私钥文件作为证书的密钥。 -subj "/CN=client-ca":指定证书的主题信息。...通过执行这两个命令,您可以生成一个自签名的根证书,用于签发其他证书,如服务器证书、客户端证书等。 2....如果证书中包含了 SAN 扩展,通常会优先使用 SAN 中的域名进行验证,而不是 CN 中的域名。...SAN 提供了更灵活和可扩展的方法来指定证书中的主体名称。 SAN(Subject Alternative Name)是一种 X.509 证书的扩展,它允许您将一个证书绑定到多个主机名。

    37000

    Ingress企业实战:HTTPS证书管理与双向认证篇

    这也是序列号唯一的原因 签名算法标识符:用来指定CA签署证书时所使用的签名算法,常见算法如RSA 签发者信息:颁发证书的实体的 X.500 名称信息。...主题信息:证书持有人唯一的标识,在 Internet上应该是唯一的 发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。...证书的公钥:包括证书的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数 数字证书的常见格式: CSR:证书请求文件,这个并不是证书,而是向证书颁发机构获得签名证书的申请文件 CER:存放证书文件可以是二进制编码或者...这些证书也可以用CER或者CRT作为扩展名 JKS:java的密钥存储文件,二进制格式,是一种 Java 特定的密钥文件格式, JKS的密钥库和私钥可以用不同的密码进行保护 p12/PFX:包含所有私钥...,获取对称加密的密钥,在接下来的会话中,服务器和客户端将会使用该密码进行对称加密,保证通信过程中信息的安全。

    1.1K40

    区块链实现数字 ID 的技术方案

    技术原理: DID 结构: DID 本身只是一个简单的字符串,通常包含三个部分:did:(URI 方案标识符)、{method-name}:(DID 方法标识符,指定了 DID 如何在特定区块链或去中心化网络上被创建...这种设计确保了 DID 的不可篡改性、可用性和去中心化特性。如何实现: 生成 DID 和密钥对: 用户(或其数字钱包)本地生成一个唯一的 DID,并同时生成一对加密密钥(公钥和私钥)。...如何实现: 发行者生成 VC: 某个机构(如大学)确认了用户的某个属性(如学历),然后使用其自身的 DID 和私钥,创建一个包含该信息的 VC,并对其进行数字签名。...如果验证通过,则证明该信息是真实且未被篡改的。优势: 高度防篡改: 由于加密签名和区块链锚定,VC 几乎不可能被篡改。 即时可验证性: 验证者无需联系发行者,即可通过密码学方法独立验证凭证的真实性。...公共区块链: 如 Ethereum、Polygon、Solana 等。它们提供高度的去中心化和抗审查性,但可能面临交易费用和扩展性挑战(部分通过 Layer 2 解决方案缓解)。

    7600

    CA证书介绍与格式转换

    更多公钥加密标准 X.509 是密码学里公钥证书的格式标准。 X.509是常见通用的证书格式。是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。...X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里。 应用场景如电子签名服务。...X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。...也可用于导入和导出证书和私钥。 PKCS#12 由 PFX 进化而来的,用于交换公共的和私有的对象的标准格式。 文件通常具有扩展名,例如.pkcs12 .pfx .p12。...Android签名keystore文件也是jks格式,且1.8之后要求转换到p12格式。 JKS是二进制格式,同时包含证书和私钥,一般有密码保护,只能存储非对称密钥对(私钥 + x509公钥证书)。

    5.4K21

    PKI - 借助Nginx 实现Https_使用CA签发证书

    这样,服务器可以通过 CA 签发的证书来证明自己的身份,确保客户端与合法的服务器进行通信,防止中间人攻击。 保护通信数据: 证书中包含了公钥,可以用于加密通信数据。...使用 CA 签发的证书可以保护通信数据的机密性,防止数据被窃取或篡改。 提供数据完整性: 证书中包含了数字签名,可以用于验证通信数据的完整性。...这个命令使用生成的 CA 密钥对生成了一个自签名的 CA 证书。...-x509 选项表示生成一个自签名的 X.509 证书, -subj 选项用于指定证书的主题信息, -days 选项用于指定证书的有效期, -out 选项用于指定输出的证书文件名。...可以使用以下命令检查证书中的主题信息: openssl x509 -in /cert/server.crt -noout -subject 如果主题信息中的域名与正在访问的域名不匹配,那么需要获取一个正确匹配的证书

    31310

    x.509 简介

    •证书扩展(Extensions):包括可选的扩展字段,如密钥用途、基本约束、主题备用名称等。•签名算法(Signature Algorithm):指定用于对证书进行签名的算法,通常由颁发者签署。...•数据加密:证书中的公钥可用于加密数据,只有私钥的拥有者才能解密它。•数字签名:证书可用于生成数字签名,用于验证数据的完整性和认证发送者的身份。...2. golang 中使用 x.509 Go语言的x509包是一个用于处理x.509证书和密钥的标准库包,提供了一组功能,允许你解析、验证和生成x.509证书: •解析证书:x509包允许你将X.509...这是在使用HTTPS或TLS时非常有用的功能。•生成证书:虽然通常情况下,证书由权威的CA签发,但在某些情况下,你可能需要自己生成证书。x509包提供了生成自签名证书的功能。...首先,我们生成一个RSA密钥,然后创建一个x509.Certificate结构,填充证书的各个字段,包括有效期、主题、密钥用途等。

    49420

    详解 RSA 非对称加密

    本文主要聊一聊非对称加密的相关知识、RSA加密算法的数字证书操作,也会附带一些其他相关知识和使用心得。如文章有错漏之处,烦请指出,谢谢。...数字证书是一个包含 证书拥有者公钥、证书拥有者信息、证书认证中心数字签名的文件。...证书标准 X.509是目前最能用的证书标准, 证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。...这一标准的最新版本是X.509 v3,它定义了包含扩展信息的数字证书。该版数字证书提供了一个扩展信息字段,用来提供更多的灵活性及特殊应用环境下所需的信息传送。...包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

    1.8K20

    再谈加密-RSA非对称加密的理解和使用

    有感兴趣的,可以看一下阮一峰大神的博客:RSA算法原理 以前写过一篇PHP使用openssl扩展的博客:PHP的openssl加密扩展使用小结,讲了一些加密基础和PHP中如何进行加密。...本文主要聊一聊非对称加密的相关知识、RSA加密算法的数字证书操作,也会附带一些其他相关知识和使用心得。如文章有错漏之处,烦请指出,谢谢。...数字证书是一个包含 证书拥有者公钥、证书拥有者信息、证书认证中心数字签名的文件。...证书标准 X.509是目前最能用的证书标准, 证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。...这一标准的最新版本是X.509 v3,它定义了包含扩展信息的数字证书。该版数字证书提供了一个扩展信息字段,用来提供更多的灵活性及特殊应用环境下所需的信息传送。

    2.9K90

    【网络安全】网络防护之旅 - Java安全机制探秘与数字证书引爆网络防线

    Java安全套接扩展(JSSE)提供了标准的Java API,用于实现SSL通信。其结构包括了: Javax.Net.SSI:一组核心类和接口,包含JSSE API。...e) 销毁密钥: 当密钥不再需要时,必须以安全的方式将其销毁,以防不当使用。 数字证书的精妙作用 数字证书作为验证实体身份的安全工具,通过包含公钥和数字签名,扮演着至关重要的角色。...数据完整性: 数字证书中的数字签名用于验证证书内容的完整性,从而有效防止证书被篡改。 加密会话密钥: 常被运用于安全地交换对称加密算法中使用的会话密钥。... 是密钥库文件名。执行此命令时,keytool会引导用户输入个人信息,以生成专用证书的主题(Subject),包含证书持有人的详细信息。...数字证书运用深化: 通过实验,学到了如何在Java应用程序中灵活运用数字证书,确保通信的安全性。深入了解了数字签名和证书验证的过程,增强了对通信数据完整性和真实性的理解。

    24410

    生成CSR和自签名证书

    CSR,全称Certificate Signing Request(证书签发请求),是一种包含了公钥和与主题(通常是实体的信息,如个人或组织)相关的其他信息的数据结构。...3.扩展信息:除了主题信息和公钥,CSR还可以包含各种扩展信息,以指定证书的用途、有效期、密钥用途等。...4.签名算法:CSR也包含用于签署CSR的签名算法(通常是RSA或ECDSA)。 CSR 的生成 生成CSR通常包括以下步骤: 1.生成密钥对:首先,生成一个密钥对,其中包括公钥和私钥。...通常使用RSA或ECDSA算法生成密钥。2.创建主题信息:确定要包含在CSR中的主题信息。这些信息将在颁发证书时显示在证书上。3.创建 CSR:使用上述的主题信息和生成的公钥创建CSR。...生成自签名证书: 生成自签名证书的过程需要使用之前生成的CSR和私钥。

    86040

    数字证书CA

    玛丽的证书类似于她的政府身份证-它提供有关玛丽的信息,她可以用来证明有关她的关键事实。X.509证书中还有许多其他属性,但是现在让我们仅关注这些属性。...玛丽是SUBJECT证书的作者,突出显示的SUBJECT文本显示了有关玛丽的关键事实。如您所见,该证书还包含更多信息。最重要的是,玛丽的公共密钥分布在她的证书中,而她的私人签名密钥不是。...该签名密钥必须保密。 重要的是,可以使用一种称为密码学的数学技术(字面意义上的“ 秘密写作 ”)来记录Mary的所有属性,以免篡改证书。...将Mary的X.509证书视为无法更改的数字身份证。 身份验证,公用密钥和专用密钥 身份验证和消息完整性是安全通信中的重要概念。身份验证要求交换消息的各方确保创建了特定消息的身份。...结果,如果一个人信任CA(并知道其公钥),则可以通过验证参与者的证书上的CA签名来信任特定的参与者与证书中包含的公钥绑定,并拥有包含的属性。。

    3K60

    去中心化数字身份DID简介——一、基本概念

    这个文档就是一个JSON字符串,里面一般会包含如下信息: DID文档内容 描述 DID主题 DID标识符本身,也就是DID文档所描述的该DID。...如果 DID 文档中不存在公钥,则必须假定密钥已被撤销或无效,同时必须包含或引用密钥的撤销信息(例如,撤销列表)。...授权 授权意味着他人代表 DID 主题执行操作,例如当密钥丢失的时候,可以授权他人更新 DID 文档来协助恢复密钥。...服务端点 除了发布身份验证和授权机制之外,DID 文档的另一个主要目的是为主题发现服务端点。...服务端点可以表示主题希望公告的任何类型的服务,包括用于进一步发现、身份验证、授权或交互的去中心化身份管理服务。 时间戳 文档创建时间和更新时间 以上信息并不是必须有,不过一般我们建议包含。

    5.6K33
    领券