如何使用 OpenSSL 的 C 库 write/read 不完整的证书签名请求?
How to write/read an incomplete Certificate Signing Request with OpenSSL's C library?
我目前正在研究 x509 证书。
我想要做的是,考虑一个拥有自己的证书和证书颁发机构的用户:
- 使用用户的 public 密钥生成证书签名请求。
- 使用 CA 的私钥签署此 CSR。
如果我知道用户的私钥和 CA 的私钥,我知道该怎么做:使用 X509_REQ_set_pubkey(req, user_private_key)
和 X509_REQ_sign(req, CA_private_key, EVP_sha256())
。
但是,用户不会知道CA的私钥,CA也不会知道用户的私钥。因此,用户必须使用 X509_REQ_set_pubkey
功能,然后以某种方式存储 CSR 并将其发送给 CA。
这就是我遇到问题的地方:用户可以通过 PEM_write_X509_REQ
函数将其 CSR 写入文件,但 CA 无法通过 PEM_read_X509_REQ
函数读取它,因为 CSR 是未签名的。
有人知道实现我想要的方法吗?
提前致谢!
--- 编辑 ---
其实这个问题有点太长了,可以换个说法:"What is the C-library equivalent to OpenSSL's command openssl req -new -key key.pem -out csr.pem
?"
经过一番研究,我发现我的问题是由于(我自己)对 CSR 的制作方式的误解造成的:它由有关该主题的一些信息组成(当然包括他的 public 密钥) 并且 用他的私钥 签名(我不明白)。然后,函数 X509_REQ_sign
不将 CA 的私钥作为参数,而是主体的私钥。因此,我可以像往常一样使用此功能和 store/read 我的 CSR 使用 PEM_write_X509_REQ
和 PEM_read_X509_REQ
.
我目前正在研究 x509 证书。 我想要做的是,考虑一个拥有自己的证书和证书颁发机构的用户:
- 使用用户的 public 密钥生成证书签名请求。
- 使用 CA 的私钥签署此 CSR。
如果我知道用户的私钥和 CA 的私钥,我知道该怎么做:使用 X509_REQ_set_pubkey(req, user_private_key)
和 X509_REQ_sign(req, CA_private_key, EVP_sha256())
。
但是,用户不会知道CA的私钥,CA也不会知道用户的私钥。因此,用户必须使用 X509_REQ_set_pubkey
功能,然后以某种方式存储 CSR 并将其发送给 CA。
这就是我遇到问题的地方:用户可以通过 PEM_write_X509_REQ
函数将其 CSR 写入文件,但 CA 无法通过 PEM_read_X509_REQ
函数读取它,因为 CSR 是未签名的。
有人知道实现我想要的方法吗?
提前致谢!
--- 编辑 ---
其实这个问题有点太长了,可以换个说法:"What is the C-library equivalent to OpenSSL's command openssl req -new -key key.pem -out csr.pem
?"
经过一番研究,我发现我的问题是由于(我自己)对 CSR 的制作方式的误解造成的:它由有关该主题的一些信息组成(当然包括他的 public 密钥) 并且 用他的私钥 签名(我不明白)。然后,函数 X509_REQ_sign
不将 CA 的私钥作为参数,而是主体的私钥。因此,我可以像往常一样使用此功能和 store/read 我的 CSR 使用 PEM_write_X509_REQ
和 PEM_read_X509_REQ
.