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



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

我使用此命令创建证书:

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:
...

这个问题不是重复的:

如何与证书颁发机构签署证书签名请求?

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

我还尝试创建一个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?

但是,这没有意义,因为证书始终是签名的。

来自 IETF RFC 5280 第 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
}

证书是已签名的 TBS证书(待签名证书(,TBS证书已具有颁发者名称(第 4 个字段(。 虽然每个可以读取 X.509 证书的库都有(有效地(一个 TBSCertificate 分析器,但它实际上并不期望是顶级对象。

最接近"未签名证书"的是证书请求(俗称"CSR"(,但这仍然需要私钥(请参阅为什么在创建 CSR 时使用私钥?

最新更新