Sar*_*ger 2 java code-signing keystore keytool jarsigner
我仔细阅读了问题13335419、8748089、4282405和其他一些问题。他们指出最可能的原因是嵌入空间。另一个答案是可能的证书问题。我使用本教程作为指南。
\n\n我签发了真实的证书,而不是像问题中那样的自我证书。我还使用最新的 JDK,1.8.0-60(64 位)。我卸载了所有其他 JDK。
\n\n电脑:
\n\nOS: Windows 7 64-bit\nJDK Path: "C:\\Program Files\\Java\\jdk1.8.0_60"\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试了多种技术来消除空间问题。从管理命令提示符处:
\n\n命令行:
\n\njarsigner.exe \xe2\x80\x93keypass <key password> -keystore C:\\SoftDev\\JavaWorkspaces\\myproject\\Versions\\Current64\\mykeystore.keystore \xe2\x80\x93storepass <store password> -tsa http://timestamp.comodoca.com/rfc3161 -digestalg SHA2 C:\\SoftDev\\JavaWorkspaces\\myproject\\Versions\\Current64\\build\\bin\\myproject.jar 31843016-4ab3-11e5-9ba9-0015170bee96\nRun Code Online (Sandbox Code Playgroud)\n\n我通过查看证书详细信息验证了我的证书使用算法 SHA-2 (SHA-256)。当我将证书导出到 PFX 文件时,我尝试了复选框 1(包括路径中的所有证书)和复选框 3(扩展属性)的两种排列。我最初选择导出私钥。
\n\n我与密钥颁发者交谈,他们认为别名应该是 39 个字符,但是我重新检查了发出该命令的命令,经过多次尝试,我得到了 37 个字符。
\n\nkeytool.exe -importkeystore -srckeystore "C:\\Documents\\Signing\\mypfx.pfx" -srcstoretype pkcs12 -destkeystore C:\\SoftDev\\JavaWorkspaces\\myproject\\Versions\\Current64\\mykeystore.keystore -deststoretype JKS\nRun Code Online (Sandbox Code Playgroud)\n\n我使用提到的各种排列输入了上面指定的所有可执行文件(单独在上面列举的各个目录中并指定了完整路径)。我尝试指定带引号和不带引号的所有文件名。
\n\nKSoftware给我回信:
\n\n\n\n\n我认为问题在于您以某种方式为 jarsigner.exe 指定了太多参数,或者其中一个参数以某种方式无效。我对 Java 和 Jarsigner 的了解有限,但我确实注意到您使用的别名似乎与我以前见过的格式不同(它似乎太短了几个字符)。您是否从步骤 4 中获取了别名字符串,这是整个字符串吗?
\n
当我对命令执行 -help 时,这些参数与教程相匹配并且有意义。\n我无法解释别名长度和格式差异。\n有人告诉我使用 JDK 的“绝对最新版本”,该版本我是(1.8.0-60)。我提到了版本,他们对此表示同意。\n步骤 3 和 4 显示相同的别名。也许当时编写教程的人从以不同方式计算别名的 JDK 版本中获取了别名 le-e76649fec-3a2f-4cda-8a6e-441c224481b,而只是教程没有更新。Comodo 是一家大公司,因此如果教程页面源自他们或者 KSoftware 最近没有进行练习,那么教程页面可能会被他们忽视。不过,从我收集的信息来看,这些步骤似乎是合理的。
\n\n更新:
\n\n根据我与 EJP 的对话,这个问题似乎适合签名者的链问题。
\n\nComodo/KSoftware 的回复:\n@Omikron 对于最初的问题是正确的,正如我的评论中提到的。错误是从 KSoftware.net 网站进行复制/粘贴。
\n\n还有另外 2 个问题。\n2. Oracle/Java 工具链不支持 SHA-256 (SHA2),仅支持 SHA1。
\n\n签名者的链错误是由 SHA2 引起的。这是他们给我的回复:
\n\n\n\n\n我理解您的犹豫,但我向您保证,这些天我已经多次处理过“链未验证”问题,而这都与 SHA-256 迁移有关。不过,我可以解决这个问题,只需按照我发送的说明进行操作,我们就会为您解决问题...我仍然有点困惑为什么 Jarsigner 不允许您在命令中传递该密码但在这一点上这或多或少是次要的。我们仍然可以让您几乎立即通过从不同根重新发布来签署 JAR 文件。
\n\nFWIW,转向 SHA-256 和所需的新 RSA 根对 Java 来说是一团糟,因为它们在添加可信根方面非常非常慢。这一举措已经为人所知几年了,最新的 JDK 版本是第一个解决了这个问题,甚至它也没有很好地解决这个问题。目前最好的选择是使用已识别的较旧的受信任根(该根在 2020 年之前仍然有效)。
\n
我正在处理多个问题才能让我的罐子签名。
\n\n最后更新\n我从 Comodo 收到了新密钥,并且没有任何问题地签署了我的 jar。
\n\n误解:我的原始证书和新证书都是SHA-256。区别在于CA。原来的一种是“COMODO RSA Code Signing CA”,而新的一种是“COMODO SHA-256 Code Signing CA”。两者的详细视图显示完全相同的算法。问题确实是KSOftware所说的。RSA CA 尚未更新其方面。
\nkeypass命令行中“ ”和“ ”之前的字符storepass都是“ en dashes ”(ASCII 代码 0x96,请参阅https://en.wikipedia.org/wiki/Dash)。它们应该是“连字符减号”(ASCII 代码 0x2D)。
这可以通过在十六进制编辑器(如HxD )中查看字符串来检查:
由于错误的字符,“ -keypass”不被 jarsigner 识别为参数,这会弄乱整个命令,从而导致奇怪的错误消息。
类似问题:未找到证书链,但密钥库包含私钥
| 归档时间: |
|
| 查看次数: |
4178 次 |
| 最近记录: |