gpt4 book ai didi

python - 如何在python中修改PEM格式证书的签名

转载 作者:行者123 更新时间:2023-12-02 19:51:41 25 4
gpt4 key购买 nike

有没有办法用 python 修改 PEM 编码的 x509 证书的签名?

我尝试使用加密Python模块,但似乎x509签名属性不可设置。我只能得到它的值(value)。是否有另一个 python 模块更适合此目的?

加密Python模块文档在这里: https://cryptography.io/en/latest/x509/reference/#x-509-certificate-object

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import Encoding
import os

#change the signature of the cert
def change_cert_sig(pem_data):
cert = x509.load_pem_x509_certificate(pem_data, default_backend())
#the line below works
print(cert.signature)
#the line below causes an exception "AttributeError: can't set attribute"
cert.set_signature(os.urandom(len(cert.signature))) #set signature to random bytes
return cert.public_bytes(Encoding.PEM)

最佳答案

Is there a way modify the signature of a PEM encoded x509 certificate with python?

是的。

我不是Python人,所以我只能描述要做什么......将证书读入内存。以下是来自 RFC 5280, Appendix A, p. 116 (and friends) 的证书的 ASN.1 结构:

Certificate  ::=  SEQUENCE  {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }

tbsCertificate 是颁发者(或证书颁发机构)签名的内容。 “TBS” 表示“待签名”。 signature 是颁发者在 tbsCertificate 上的签名。 signatureAlgorithm 描述了所使用的签名算法,例如 sha256WithRSAEncryption

跳到第三个属性,即一个签名位字符串。前 4 个八位位组是 BIT_STRING 的 ASN.1 编码的一部分。八位字节 5-37 是签名字节。获取签名字节之一并对其进行篡改。类似于 Byte b = data[6]b ^= 0x01,然后 data[6] = b

由于 signature 是证书中的最后一件事,因此您应该能够篡改文件中最后 32 个字节中的任何一个。最后 32 个字节是签名。 (32 字节假定使用 SHA-256 进行签名)。

关于python - 如何在python中修改PEM格式证书的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58036905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com