我最近从 GoDaddy 购买了证书,用于对 Adobe Air 应用程序进行编码签名。
我生成了一个 CSR(代码签名请求)文件并将其发送给他们。他们发回了一个 .spc 证书文件(PKCS #7 格式)。
我使用的是 Adobe Air 自带的 keytool。以下是我使用过的命令。
生成 CSR:
"C:\Program Files (x86)\Adobe\Flex Builder 3\jre\bin\keytool.exe" -genkey -alias codesigncert -keypass password123 -keyalg RSA -keysize 2048 -dname "CN=displayname,O=companyname,C=US,ST=state,L=city" -keystore codesignstore
将证书导入密钥库:
"C:\Program Files (x86)\Adobe\Flex Builder 3\jre\bin\keytool.exe" -import -alias codesigncert -file cert.spc -keystore codesignstore
运行此命令后我收到的错误是:
keytool error: java.lang.Exception: Certificate reply does not contain public key for <codesigncert>
可能出了什么问题?
我遵循的指南是这样的: http://help.godaddy.com/article/4780
答案1
答案很简单。证书文件不是由 CSR 文件生成的,而是由另一个 CSR 文件生成的。我只是获得了一个新证书,它就起作用了。
将证书导入密钥库后,我就可以运行以下命令来签署 Adobe Air 中间文件。
adt -sign -alias codesigncert -storetype jks -keystore codesignstore -storepass storepass123 -keypass password123 "C:\myapp\widget.airi" "C:\myapp\widget.air"
答案2
我遇到了类似的问题;颁发的证书和证书请求文件不匹配导致错误消息:
keytool error: java.lang.Exception: Certificate reply does not contain public key for <xyzzy>
就我而言,我使用的是另一个证书颁发机构 Thawte。问题的原因是,当我访问 Thawte 证书网站领取新颁发的证书时,该网站显示我的证书已准备好下载,但奇怪的是,他们默认选择了一个不同的两年前的证书,而不是刚刚颁发的证书。所以,我下载了错误的证书。直到我这样做:
keytool -printcert -v -file the-pkcs7-file
看到证书上的旧日期后,我意识到发生了什么。然后我下载了正确的 PKCS7 证书文件。