使用 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的主要内容,如果未能解决你的问题,请参考以下文章

SSL 服务器证书验证在代码中失败,但在 openssl 中没有

如何创建一个自签名的SSL证书

用openssl 和 keytool 生成 SSL证书

用openssl生成的ssl证书和付费的有啥区别

openssl 生成nginx永久ssl证书

WIN64使用OPENSSL生成SSL证书