该证书具有无效的发行者密钥链。

7
我有私钥(my_ca.key)和由DigiCert签名的公钥(my_cert.crt)。现在我想生成SSL证书(版本3)并使用我的私钥进行签名。以下是我尝试做到这一点的方法。但是,当我导出到钥匙链(Mac OS X)时,我一直收到类似于“此证书具有无效的发行者密钥链”的错误。不知道如何解决这个问题。my_cert.crt是从DigiCert High Assurance CA-3扩展的,而那个又是从DigiCert High Assurance EV Root CA扩展的。还将DigiCert High Assurance CA-3、DigiCert High Assurance EV Root CA添加到了钥匙链中。它显示my_cert.crt是有效的。为什么会出现这种错误?
######### Initialization

SSL_SUBJ="/C=LK/ST=Colombo/L=Colombo/O=wso2/OU=laptop/CN=mdm.go.com"

########SSL Certificate

echo "\nGenerating SSL Certificate >>>>>> START"

openssl genrsa -out ia.key 4096
openssl req -new -key ia.key -out ia.csr -subj "$SSL_SUBJ"
openssl x509 -req -days 365 -in ia.csr -CA my_cert.pem -CAkey my_ca.pem -set_serial 765644787 -out ia.crt -extensions v3_ca -extfile ./openssl.cnf

echo "\nGenerating SSL Certificate >>>>>> END \n"

openssl pkcs12 -export -out ia.p12 -inkey ia.key -in ia.crt -CAfile my_cert.pem -name sslcert -passout pass:password

注意:在/etc/hosts中添加了自定义条目,将IP地址映射到SSL证书CN上,并且为了测试,服务器和客户端位于同一台机器上。


1
你的证书(my_cert.crt)是CA证书吗?这意味着当您在某些查看器中打开证书时,“基本约束”部分中有什么?主题类型=终端实体还是主题类型=CA? - Juraj Majer
3个回答

30
  1. 下载https://developer.apple.com/certificationauthority/AppleWWDRCA.cer并双击安装到钥匙串中。
  2. 在钥匙串应用程序中选择“显示已过期证书”选项,路径是“查看” -> “显示已过期证书”。
  3. 确保选择了“证书”类别。
  4. 从“登录”选项卡和“系统”选项卡中删除已过期的苹果全球开发者关系证书颁发机构证书。

以下是苹果公司的解决方案:

感谢您向社区提供帮助,由于您遇到的问题,我们深表歉意。这个问题源于您的系统钥匙串和登录钥匙串中都有一份已过期的 WWDR 中间证书。要解决此问题,你需要先下载并安装新的 WWDR 中间证书(双击文件即可)。接下来,在钥匙串访问应用程序中,选择系统钥匙串。确保在“查看”菜单中选择“显示已过期证书”,然后删除 Apple 全球开发者关系证书颁发机构中间证书的已过期版本(在 2016 年 2 月 14 日到期)。现在,您的证书应该在钥匙串访问应用程序中显示为有效,并可供 Xcode 用于向应用商店提交应用。

您也可以查看https://forums.developer.apple.com/thread/37208

详细信息请参阅https://developer.apple.com/support/certificates/expiration/


最初它对我没有起作用,但那是因为我只删除了一个“开发者关系证书”。在钥匙串访问中,我所做的是在左侧类别部分选择“所有项目”,然后搜索“关系”。这产生了多个结果,然后我删除了过期的一个。 - Peter Theill
谢谢你提供有关删除它的提示。我实际上已经导入了另一个,但是出于某种原因,我的证书仍然显示它具有无效的颁发者。只有在删除过期项后,现在才运作。 - micnguyen

13

我有一个简单的解决方案。

在钥匙串中选择证书,右键单击它。你会看到选项“获取信息”,点击它并选择“信任”选项。在使用此证书时选择“始终信任”选项。这样就可以将该证书标记为您帐户的可信证书。

输入图像描述


0

通常证书链中除了最后一个证书外,所有的X.509证书都是CA证书。链中的第一个证书称为根CA(在您的情况下为DigiCert High Assurance EV Root CA),然后是发行者链中的其他CA证书(如果有的话)作为中间CA,而最后一个证书则是终端实体(非CA)。我认为您无法使用非CA证书颁发新的SSL证书。因此,您可以使用由DigiCert签名的my_cert.crt作为SSL证书,但不能使用my_ca.key颁发自己的证书。


我开始理解这些东西是如何工作的了,同时在http://tools.ietf.org/html/rfc5280#section-4.2.1.9中也清楚地提到了。无论如何,谢谢你的回复。 - GPrathap

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