从命令行启动Java应用程序时,是否可以阻止数字签名警告?

时间:2010-09-20 09:49:43

标签: java windows keystore keytool security-warning

有没有办法阻止从命令行运行Java应用程序时出现“应用程序的数字签名无法验证”警告消息?

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

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

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

screenshot of java digital signature warning

请确保,我不会询问如何签署此申请。

更新1

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

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

是否与默认keystore相关,我如何确保我导入正确的密钥库?

更新2

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

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

但这不是结束,因为当它在自动化用户帐户上运行失败时,它失败了,因为该用户还没有密钥库,并且因为命令行工具{{1}}无法创建密码为空的密钥库,请求至少6个字符。 see Sun's forum tread...

5 个答案:

答案 0 :(得分:2)

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

此处有更多详情:

默认密码是:changeit

答案 1 :(得分:1)

有两种方法:

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

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

答案 2 :(得分:1)

如果未经用户同意允许未签名的应用程序运行,那将是对用户安全/隐私的严重妥协。

答案是“不”,除非您将应用程序签名或用户手动将发布者添加到“可信”列表中。

更多here

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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