是否可以创建没有签名字段的 x509 证书? [复制]

Posted

技术标签:

【中文标题】是否可以创建没有签名字段的 x509 证书? [复制]【英文标题】:Is it possible to create a x509 certificate without signature field? [duplicate] 【发布时间】:2020-01-28 11:05:23 【问题描述】:

出于测试目的,我想创建一个没有签名字段的证书。 (我想我可以称之为未签名。)到目前为止,我所有的尝试都失败了。每当我创建证书时,它都有一个签名字段。

我使用这个命令来创建证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 365 -subj '/CN=localhost'

然后我查看证书:

openssl x509 -in cert.pem -text

但它有一个签名字段:

Signature Algorithm: sha256WithRSAEncryption
     bb:98:a0:6f:3c:4b:5c:6d:29:1b:4b:1a:e8:70:6b:72:03:39:
     ...

这个问题不是重复的:

How do you sign a Certificate Signing Request with your Certification Authority?

因为他的问题是关于签署证书(他已经拥有证书)。我想创建一个证书(我不想签署任何证书)。

我还尝试像这样创建一个 CSR(如下面的回答中所建议的):

openssl genrsa -des3 -passout pass:test1234 -out keypair.key 2048
openssl rsa -passin pass:test1234 -in keypair.key -out moh.key
openssl req -new -key moh.key -out jo.csr
openssl req -noout -text -in jo.csr

甚至生成的 CSR 也有签名。

也许可以创建没有签名字段的 CSR?

【问题讨论】:

【参考方案1】:

不过,这没有任何意义,因为证书总是经过签名的。

来自IETF RFC 5280, section 4.1:

Certificate  ::=  SEQUENCE  
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  

TBSCertificate  ::=  SEQUENCE  
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    

证书是已签名的 TBSCertificate(待签名证书),并且 TBSCertificate 已经必须具有颁发者名称(第 4 字段)。虽然每个可以读取 X.509 证书的库都(有效地)有一个 TBSCertificate 解析器,但它并不是真正的***对象。

最接近“未签名证书”的是证书请求(通俗地称为“CSR”),但它仍然需要私钥(请参阅Why private key is used amidst creation of CSR?)。

【讨论】:

以上是关于是否可以创建没有签名字段的 x509 证书? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

iOS适配HTTPS,创建一个自签名的SSL证书(x509)具体步骤

[转]如何创建一个自签名的SSL证书(X509)

如何创建一个自签名的SSL证书(X509)

使用 C# 从 CA 证书为设备创建 X509 证书

使用 OpenSSL 以编程方式创建 X509 证书

CA签名X509证书包含X509v3扩展名“主题备用名称”两次