只有公钥的情况下,生成证书

只有公钥的情况下,生成证书

使用RSA签名的情况越来越多,有公司要求我们提供X.509格式证书。我们的公私钥都是直接通过JAVA的RSA KeyFactory生成的,去哪里找证书?Google一下后,我发现使用openssl生成证书,要不使用私钥自签,要不使用CA私钥签,但也是需要私钥生成req的csr文件。
问题是,私钥生成后,我们都碰不到。最终,我发现了openssl的-force_pubkey,可以在使用CA私钥签名csr文件生成证书时,替换csr文件里的公钥。

# 先生成CA证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout cakey.pem -x509 -out cacert.cer
# 生成公司csr文件和临时私钥
openssl req -newkey rsa:2048 -nodes -keyout prikey.pem -out co.csr
# 若生成csr文件输的信息包含中文,需要增加参数`-utf8`
openssl req -utf8 -newkey rsa:2048 -nodes -keyout prikey.pem -out co.csr
# 签名并替换公钥
openssl x509 -req -days 2000 -in co.csr -CAkey cakey.pem -CA cacert.cer -force_pubkey true_pubkey.pem -CAcreateserial -out co.cer