使用 OpenSSL 生成的 SSL 证书不适用于 NSS
Posted
技术标签:
【中文标题】使用 OpenSSL 生成的 SSL 证书不适用于 NSS【英文标题】:SSL certificate generated with OpenSSL not working on NSS 【发布时间】:2014-04-25 07:37:55 【问题描述】:我在 Linux Mint 机器上使用 OpenSSL 生成了 SSL 证书(key.pem、cacert.pem、pcert.pem)。现在我正在尝试将我的应用程序移动到另一台安装了带 NSS 的 Fedora 18 的服务器。
cURL 返回此错误:
unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
我再次测试,在我的计算机上工作正常,但在服务器上却不行。我认为这是因为我使用 OpenSSL 生成证书但在服务器上安装了 NSS。
我找不到如何使用“certutil”或“openssl”生成对 NSS 有效的证书。
【问题讨论】:
如何使用 openssl 生成证书? 您的密钥文件以什么开头?我的意思是-----BEGIN WHAT-----
。
我生成:openssl pkcs12 -in YOURPFX.pfx -nocerts -out key.pem openssl pkcs12 -in YOURPFX.pfx -clcerts -nokeys -out pcert.pem openssl pkcs12 -in YOURPFX.pfx - cacerts -nokeys -out cacert.pem
我的证书以:-----BEGIN CERTIFICATE-----开头
私钥呢?
【参考方案1】:
失败是由于我的 PKCS#8 私钥格式:
- 使用 PKCS#8 私钥-----BEGIN ENCRYPTED PRIVATE KEY-----
标头
或-----BEGIN PRIVATE KEY-----
标头
curl+openssl 有效,但 curl+nss+libnsspem.so
- 使用 RSA 私钥-----BEGIN RSA PRIVATE KEY-----
标头
curl+openssl 和 curl+nss+libnsspem.so 都可以工作。
因此,请使用此命令 openssl rsa -in key.pem -out newkey.pem
删除 RSA 私钥上的密码:
【讨论】:
如果您不想从您的密钥中删除密码,只需使用另一个加密算法,curl+nss
将成功理解。使用openssl rsa -des3 -in your.key -out your.encrypted.key
重新加密。
@cronfy,des3 是 curl+nss 似乎在 Centos 7.4 上接受的唯一密码。有什么想法吗?
显然这是一个已知的错误,报告于 2016 年。nss-pem 不支持使用除 des 之外的加密的密钥。 -- bugzilla.redhat.com/show_bug.cgi?id=1369251以上是关于使用 OpenSSL 生成的 SSL 证书不适用于 NSS的主要内容,如果未能解决你的问题,请参考以下文章