错误:公钥证书和私钥不匹配

92
我正在尝试在Amazon AWS上设置的新负载均衡器上安装GoDaddy SSL证书。我最初使用keytool程序在Godaddy上创建了该证书,以便直接安装在Glassfish 3.1服务器(Amazon Linux AMI)上。在服务器上直接设置没有任何问题。现在我需要将证书从Web服务器移动到新的负载均衡器上。亚马逊要求私钥和证书以PEM格式提供,因此我使用GoDaddy的"rekey"工具创建了新的证书。当我在AWS管理控制台的负载均衡器设置屏幕中加载这些证书时,出现错误消息:"公钥证书和私钥不匹配"。
以下是我创建密钥的步骤:
$ openssl genrsa -des3 -out private.key 2048
$ openssl req -new -key private.key -out apps.mydomain.com.csr

我然后在“重新密钥”过程中将.csr文件提交给GoDaddy。完成重新密钥后,我下载了两个新创建的证书(apps.mydomain.com.crt和gd_bundle.crt)。我选择(Apache)作为服务器类型进行下载(我也尝试过“其他”和“Cpanel”,但它们看起来都是一样的)。
此时,我使用以下命令从private.key文件中移除加密。
$ openssl rsa -in private.key -out private.pem

此时,我回到AWS管理控制台,创建负载均衡器,添加安全服务器重定向,并将以下文件的内容放入屏幕上要求设置SSL证书的相应字段中。
private.pem --> Private Key
apps.mydomain.com.crt --> Public Key Certificate
gd_bundle.crt --> Certificate Chain

当我点击“继续”按钮时,出现了错误提示:“错误:公钥证书和私钥不匹配。”
- 有没有办法可以测试一下我是否从亚马逊那里得到了有效的错误信息?我觉得很奇怪,按照GoDaddy的指示操作,为什么密钥会不匹配。
我尝试在创建.csr文件之前,将private.key文件创建为无RSA加密,但似乎没有任何区别。
我还假设我从GoDaddy下载的.crt文件是.PEM格式的,但我不确定如何验证这一点。
有什么想法吗?

2
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户更适合提问。另请参阅我应该在哪里发布Dev Ops相关的问题? - jww
6个回答

66

对我来说,这是一个简单的两步操作:

  1. 将私钥转换为PEM格式:

    openssl rsa -in yourdomain.key -outform PEM

  2. 将证书和证书束转换为PEM格式

    openssl x509 -inform PEM -in yourdomain.crt

    openssl x509 -inform PEM -in bundle.crt


2
这个特定的答案真的帮了我很多。谢谢Jonathan。记录一下,yourdomain.crt是公钥,也就是你从提供商那里得到的证书(也可能是.cer)。 - user_v
我一直收到一个错误 警告:无法打开配置文件:/etc/pki/tls/openssl.cnf - t q
2
@tq - 一些 OpenSSL 命令也需要使用 -config 选项。使用它来指定你正在使用的配置文件的路径。 - jww
@felby 应该将此答案标记为已接受的答案。这是唯一一个不会在iOS设备上创建SSL信任问题的答案。 - Noel Baron
这个答案对通配符SSL非常有帮助。你需要转换domain.crt和gd_bundle.crt文件。 - Ducle

44

仅供记录,任何其他试图理解此问题的人:

yourdomain.key -> 终端命令:sudo openssl rsa -in yourdomain.key -outform PEM -out yourdomain.pem -> 私钥

yourdomain.crt -> 公钥

gd_bundle.crt -> 证书链

然后你就可以开始了 :)


2
天啊,我因为这个问题浪费了很多时间,你刚刚救了我!我购买了一个RapidSSL证书:关键是要1)像你在这里建议的那样转换私钥,2)颠倒RapidSSL提供的证书链中证书的顺序。谢谢! - MiniQuark
一直要求我输入密码,但我的RapidSSL证书是没有密码生成的。 - t q
sudo 命令会要求输入管理员密码,除非您的帐户通过几种不同的方法设置为无需密码。您指的是这个密码吗? - Chris J
为了让需要的人能够找到所需的内容,我们从客户那里获得了一个 Host Gator 证书,看起来设置得相当不错 - 没有 pem 转换,并且 CA bundle 已经被串联在一起。然而,它无法进入 Amazon。证书包中证书的顺序也是同样的问题。通过反转顺序,它成功地进入并工作了。 - CargoMeister

24

看起来问题出在我将密钥和证书内容从gedit屏幕复制到运行在Windows桌面上的浏览器时的操作方式。我是使用运行在Windows 7桌面上的Virtual Box中的Ubuntu桌面环境,通过共享剪贴板将值从gedit屏幕复制并粘贴到浏览器中。一旦我在与Web浏览器相同的框架中打开密钥和证书文件(在这种情况下是Windows),证书就可以成功通过了。我猜想,在Virtual Box客户端和主机之间使用共享剪贴板时,文件的某些部分可能没有正确传输。案件关闭。


你能采纳你的答案,这样大家就知道问题已经解决了吗? - Phil Sturgeon
2
奇怪,我以为我很久以前就已经接受了那个了... - Felby

7
我们找到了一个替代解决方案来解决这个问题。我们遇到了相同的症状和错误。
然后我们尝试重新输入PEM代码,但这次我们确保每个窗口在最后一行时按一次回车并确保光标位于空白行上。然后我们保存了它。
它成功了。
这解决了我们的问题,所以它可能也能解决其他人的问题。

1

有一个小问题。我正在使用Windows系统(Win 7 Pro),当我使用OpenSSL的Windows端口时,输出的文件具有Unix风格的行尾字符(LF)。

我必须将文件转换为Windows风格(CRLF)以上传私钥。


0

我可以向您建议另一种解决方案并提供信息。 通常所有证书都是PEM文件格式。您只需打开记事本或任何文本编辑器,并拖动以.crt文件格式接收的文件,即可将其转换为.PEM文件。如果证书已加载到您的keytool中,则可以从keytool导出证书作为pfx文件。然后,您可以从pfx文件中分离私钥文件和pfx文件,因为pfx文件是您的证书和私钥的组合。因此,您可以单独获取私钥文件并在Amazon AWS上使用它。

我怀疑可能有另一种安装证书的方法。也许您可以联系证书颁发机构,了解是否有重新发行证书的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接