有没有办法阻止从命令行运行Java应用程序时出现“应用程序的数字签名无法验证”警告消息?
我正在寻找一个命令行解决方案,它允许在持续集成服务器上启动这样的应用程序,因此我需要一个不需要手动干预的解决方案。
此外,我不希望为任何应用程序禁用此警告,因为这可能存在安全风险。
不确定是否有帮助,但我确实知道签名的“名称”,“发布者”和“来自”字段的值。
请确保,我不会询问如何签署此申请。
我认为解决方案是使用keytool
从命令行导入证书但由于某种原因它无法正确导入它,因为它在此之后没有出现在控制面板applet中且应用程序仍然需要它。
keytool -importcert -file my.cer -alias alf2 -storepass changeme -noprompt
是否与默认keystore
相关,我如何确保我导入正确的密钥库?
经过大量的网络研究后,我取得了一些进展,至少在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...
答案 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)
答案 3 :(得分:0)
如果证书存储不存在,不知道它是否仍然是Windows XP keytool要求输入密码,因此您应该在导入证书之前手动创建或从某处复制存储。用户商店没有密码。
答案 4 :(得分:-1)
我认为您应该在java.home / lib / security中创建文件,例如mypolicy.policy,并将所有权限授予您签名的代码,并将此文件添加到java.security(例如,在线下,其中是java.policy路径)此警告窗口将永远不会再次提示