如何将交叉签名证书引入链中?

时间:2013-05-04 20:08:08

标签: certificate code-signing

我维护一个本地部署的java applet。我最近从Go Daddy购买了代码签名证书(它很便宜,而且他们已经托管了我们的网站)。我的证书链如下(所有文件都在https://certs.godaddy.com/anonymous/repository.pki处提供):

  1. 我的公司
  2. gdig2.cer
  3. gdroot-g2.crt
  4. 不幸的是,默认情况下,在Windows 7(由IE使用)或Windows JRE(我认为其他浏览器使用)上未安装此根。手动安装根证书是可行的,但它要求我的用户具有管理员访问权限或运行不熟悉的命令(从安全角度来看,说“你可以信任我的applet,并证明它,运行这个”也没有多大意义计算机上的命令“)。

    我想将我的证书链更改为

    1. 我的公司
    2. gdig2.cer
    3. gdroot-g2_cross.crt
    4. gd-class2-root.crt
    5. 似乎更普遍(例如,它是Windows JRE中的一个,用于验证https://www.godaddy.com,它将其带入Windows 7)。 Go Daddy无法为我这样做(“我们对使用我们的代码签名证书的支持是有限的”),所以我自己就这样做了。

      关注this answer,我最有希望的方法如下(在Mac OS X 10.6上):

      1. 将我的证书转换为pem格式:
        $ openssl pkcs12 -in myCert.p12 -out myCert.pem -nodes
      2. 使用文本编辑器打开myCert.pem,删除gdroot-g2.crt,然后粘贴gdroot-g2_cross.crtgd-class2-root.crt(openssl似乎不关心证书的顺序,但我放了它们按上面显示的顺序排列)
      3. 将证书转换回p12格式:
        $ openssl pkcs12 -export -in myCert.pem -out combined.p12
      4. 不幸的是,这并不是很有效。调用
        $ keytool -list -storetype pkcs12 -keystore combined.p12 -v
        显示我的证书链延伸到gdig2.cer,并停止。问题似乎是gdroot-g2_cross.cer无法证明gdig2.cer

        $ openssl verify -CAfile gd-class2-root.cer gdroot-g2_cross.cer
        gdroot-g2_cross.cer: OK
        $ cat gd-class2-root gdroot-g2_cross.cer > gdRootCross.pem
        $ openssl verify -CAfile gdRootCross.pem gdig2.cer
        gdig2.cer: /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2  
        error 20 at 0 depth lookup:unable to get local issuer certificate
        

        但是一切看起来都不错:

        $ openssl x509 -in gdig2.cer -text -noout
        . . .
        Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
        X509v3 Authority Key Identifier:
        keyid:3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
        . . .
        $ openssl x509 -in gdroot-g2_cross.cer -text -noout
        . . .
        Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=https://certs.godaddy.com/repository/, CN=Go Daddy Root Certificate Authority - G2
        X509v3 Subject Key Identifier:
        3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
        . . .
        

        这让我觉得我没有正确使用交叉证书,但我不知道我做错了什么。 (我也尝试将两个新证书附加到我的原始链上,openssl verifyerror 18 at 0 depth lookup:self signed certificate。)我几乎愿意相信不可能更改根证书,但是似乎是交叉证书的全部要点。 如何在我的证书链中引入交叉证书,以便由其他根证书颁发机构进行验证?

1 个答案:

答案 0 :(得分:1)

你没有。你只需要一个由第一个机构签署的证书;以及由第二权威机构签署的一份证书 - 两者都具有相同的公钥/指纹和主题。就是这样。