ssl - 如何获取 .cer 或 .crt 格式的公钥

标签 ssl openssl ssl-certificate

我使用 OpenSSL 创建了自签名 SSL 证书,如下所示:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

这给了我 .pem 文件中的证书和私钥。我需要以 .cer.crt 格式向我的客户提供我的公钥。 有什么办法可以得到.cer/.crt格式的公钥吗?

我已经尝试过的:

<强>1。生成 .pem 格式的公钥并尝试将其转换为 .cer.crt [没有成功]

.pem 文件中提取公钥 [工作正常]:

`openssl x509 -pubkey -noout -in signer-cert.pem  > signer-public-key-test.pem`

.pem转换为.cer格式 openssl x509 -inform PEM -in signer-public-key-test.pem -outform DER -out signer-public-key-test.cer 我收到此错误:

unable to load certificate
140067363030680:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: TRUSTED CERTIFICATE

<强>2。将我的证书转换为 .cer(我做得很好)并尝试按照给定的说明使用 Windows 证书导出向导导出公钥 here

也没用。我无法启用导出 key 的选项,最终输出在 Notepad++ 中打开时是垃圾。

所以我的问题是,有没有办法从头开始生成证书并将公钥保存在 .cer.crt 文件中。或者以 .pem 格式生成证书,然后将公钥提取到 .crt.cer

非常感谢任何帮助。

最佳答案

由于 .cer.crt 通常表示“DER 或 PEM-DER X.509 证书”,我不知道您将公钥放入其中是什么意思那种格式。

如果你的意思是你想要一个 DER 编码的 SubjectPublicKeyInfo 代表公钥,你的管道的第二阶段将是

openssl asn1parse -noout -out some.file

您可以删除中间件

openssl x509 -in signer-cert.pem -noout -pubkey | 
    openssl asn1parse -noout -out signer-public-key-test.der

(添加换行符以删除滚动条)

或者,完全跳过证书中间人:

openssl rsa -in key.pem -pubout -outform der -out signer-public-key-test.der

不过,您想要那种特定格式似乎很奇怪。

关于ssl - 如何获取 .cer 或 .crt 格式的公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50258160/

相关文章:

java - Android 上的相互身份验证失败 w/javax.net.ssl.SSLHandshakeException : Handshake failed

amazon-web-services - 无法建立与负载平衡器的安全连接

ssl - 与公共(public)服务器的 OPENSSL 连接给出 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY

c# - 重置 ServerCertificateValidationCallback

Qt 4.7 SSL 错误 : "The certificate has expired”

java - 为什么 SSLSocket 写入选项没有超时?

c++ - SSL是否执行自动重新协商

tomcat - HAProxy 负载均衡与 tomcat SSL

android - 为什么 Android 2.2 会抛出安全警告,而 Android 4.2 不会?

amazon-web-services - 使用 AWS 负载均衡器的证书颁发机构 SSL