openssl - 是否可以创建没有签名字段的 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?
解决方案
但是,这没有任何意义,因为证书总是被签名的。
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”),但这仍然需要私钥(请参阅为什么在创建 CSR 时使用私钥?)。
推荐阅读
- android - backup_id 有什么用?
- forms - 检索信息时,数组集合中的数据显示为空
- python - 使用可以从命令行运行的 Python 脚本将指定数量的行复制到多个文档
- javascript - 三种 JS 颜色、金属度、灯光、着色器在我的手机上不起作用
- reactjs - Redux 表单 - 选项卡验证未发生
- python - 从列表的字典中返回包含每个键的前 N 个列表条目的字典
- sql-server - 在 SQL Server 中,如何创建一个完全控制一个架构和对其他架构进行 CRUD 的用户?
- flutter - 在构建的 apk 中未询问存储权限
- javascript - Splice() 在 javascript 中无法正常工作
- python-3.x - 当我更新矩阵时,它的复制矩阵也会更新