3

当您从命令行运行 Java 应用程序时,是否有任何方法可以防止出现“无法验证应用程序的数字签名”警告消息?

我正在寻找一个命令行解决方案,它允许在持续集成服务器上启动这样的应用程序,所以我需要一个不需要人工干预的解决方案。

此外,我不希望对任何应用程序禁用此警告,因为这可能存在安全风险。

不确定是否有帮助,但我确实知道签名的“名称”、“发布者”和“发件人”字段的值。

java数字签名警告截图

请确保,我不是在问如何签署此应用程序。

更新 1

我想解决方案是用来keytool从命令行导入证书,但由于某种原因它确实无法正确导入它,因为它没有出现在控制面板小程序中,并且应用程序仍然需要它。

keytool -importcert -file my.cer -alias alf2 -storepass changeme -noprompt

是否与 default 有关keystore,我如何确保导入正确的密钥库?

更新 2

在网上进行了大量研究后,我取得了一些进展,至少在Windows 7以下方面工作Java 6keytool -importcert -file my.cer -keystore "%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\security\trusted.certs" -storepass "" -noprompt -v

我认为 Sun 未能在文档中指定默认密钥库的实际位置以及默认密码为空白的事实。

但这还没有结束,因为当它在自动化用户帐户上运行时失败了,它失败了,因为该用户还没有密钥库,并且因为命令行工具keytool无法使用空密码创建密钥库,请求在至少 6 个字符。看Sun的论坛...

4

5 回答 5

2

trusted.certs 文件是基于用户(配置文件)的。使用 keytool 还可以将受信任的根 CA 添加到“cacert”文件中,其中存储了 java 的默认受信任 CA。XP 上的 cacert 文件位置(取决于 Java 版本):C:\Program Files\Java\jre6\lib\security

更多细节在这里:

默认密码是:changeit

于 2011-03-22T12:00:01.020 回答
1

有两种方法:

  • 让软件供应商重新发布并附上适当的签名。“更多信息”链接应该告诉您为什么无法验证签名,但最可能的原因是签名是使用自签名 CA 证书创建的,或者是已经过期的证书。(如果供应商不提供帮助,您可以使用自己的证书重新签署 JAR 文件。)

  • 将相关的签名证书作为“受信任的证书”添加到 JVM 的证书存储中。不幸的是,您需要为每台需要运行应用程序的机器上的每个 JVM 执行此操作。

于 2010-09-20T10:02:12.390 回答
1

如果未经用户同意就允许运行未签名的应用程序,这将严重损害用户的安全/隐私。

答案是“否”,除非您签署了您的应用程序或用户手动将发布者添加到“受信任”列表中。

更多在这里

于 2010-09-20T10:24:53.263 回答
0

如果证书存储实际上不存在,不知道它是否实际上仍然是 Windows XP keytool 要求输入密码,因此您应该在导入证书之前手动创建或从某处复制存储。用户存储没有密码。

于 2012-02-15T13:27:40.030 回答
-1

我认为您应该在 java.home/lib/security 中创建文件,例如 mypolicy.policy,并授予您签名的代码的所有权限,并将此文件添加到 java.security(例如,在 java.policy 路径所在的行下)此警告窗口将不再提示

于 2011-11-21T12:21:12.640 回答