我需要为许多人安装 Java 应用程序中的证书。我想使用一键程序或批处理文件将其导入为受信任证书(在控制面板->安全->证书中)。这样他们第一次使用该应用程序时就不需要按“始终允许”了。
我已经将所需的证书提取为 和.csr
(.cer
通过.csr
控制面板和.cer
通过 keytool)。现在我需要在不单击菜单的情况下取回其中一个。
我不太明白.cer
使用 keytool 导入的文档,想要一个示例。或者有没有比使用 keytool 更简单的方法?
答案1
以下是使用“keytool”执行此操作的几个示例
- http://download.oracle.com/javase/tutorial/security/toolsign/rstep2.html
- http://www.talkingtree.com/blog/index.cfm?mode=entry&entry=25AA75A4-45A6-2844-7CA3EECD842DB576
此处的第二个链接有一个示例批处理文件:
@echo off
echo
echo This will import an X.509 SSL certificate into the keystore for the JVM
specified
echo
echo Press Control+C to abort.
pause
SETLOCAL
rem -------------------------------------------------
rem 1) Set the path to you JVM here
rem -------------------------------------------------
set JAVA_HOME=C:\j2sdk1.4.2_05
rem -------------------------------------------------
rem 2) SET THE CERTIFICATE NAME AND ALIAS HERE
rem -------------------------------------------------
set CERT_NAME=mycert.cer
set CERT_ALIAS=mycert
rem -------------------------------------------------
rem 3) SET THE KEYTOOL PASSWORD HERE
rem -------------------------------------------------
set KEYTOOL_PASS=changeit
rem -------------------------------------------------
rem DO NOT EDIT BELOW THIS LINE
rem -------------------------------------------------
set JAVA_SECURITY=%JAVA_HOME%\jre\lib\security
set CERT=%JAVA_SECURITY%\%CERT_NAME%
%JAVA_HOME%\jre\bin\keytool -import -trustcacerts -keystore %JAVA_SECURITY%\cacerts
-storepass %KEYTOOL_PASS% -noprompt -alias %CERT_ALIAS% -file %CERT%
ENDLOCAL
pause
您在理解哪一部分时遇到困难?是否有某个部分没有意义?您需要批处理文件方面的帮助吗?您具体在哪里遇到困难?也许我可以更具体地提供帮助。
答案2
Java keytool 和签名应用程序的信任链概念要求用户通过采取肯定行动来确认信任。在这种情况下,用户会将与代码发布者相关的公钥导入到他们的密钥库中,这要求他们拥有与之相关的 Java 密钥库和密码。请参阅http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html部分内容说明 -
6:将证书导入为受信任证书
Ray 将 SSignedApplet.jar 和 CompanyCer.cer 下载到他的主目录。Ray 现在必须 >创建一个密钥库数据库 (raystore),并使用别名 >company 将证书导入其中。Ray 在他的主目录中使用 keytool 来执行此操作:...
这带来了相当大的挑战,因此默认行为是使用您尝试解决的 OK 对话框运行已签名的应用程序。远程访问/为其他人创建 Java 密钥库违反了安全设计。
答案3
我们在尝试避免在签名的小程序上弹出证书接受窗口时遇到了类似的问题。我们找到了一个解决方案,虽然不太好,但到目前为止似乎有效。每个用户都有一个受信任的.certs 密钥库(取决于操作系统,它位于 下的某个位置<username>/AppData...Sun/Java/Deployment/trusted.certs
),该密钥库是在他们第一次访问给定机器上的小程序时生成的。您可以让启动脚本从某个中心位置为每个用户替换此文件。要创建新文件trusted.certs
,我们只需在一台机器上接受我们想要的证书,然后将整个trusted.certs
密钥库复制到新机器上。
加载到 JRE 的中央证书密钥库对我们来说不起作用,所以我们选择了另一条路线。这很丑陋,如果你有该密钥库的密码,你也可以通过批处理脚本设置它,如上所示,但我们就是这么做的。
这种方法对我们来说最有意义,因为它基于每个用户进行工作,并且由于它与登录相关联,因此它允许集中管理和批量更新。
答案4
创建C:\Windows\Sun\Java\Deployment
一个名为 的文件deployment.config
。
该文件的内容应为:
deployment.system.config=file:///C:/Windows/Sun/Java/Deployment/deployment.properties
deployment.system.config.mandatory=false
在同一位置创建另一个文件deployment.properties
,并在 deploy.properties 中包含此行:
deployment.system.security.trusted.certs=C\:\\Windows\\Sun\\Java\\Deployment\\trusted.certs
从用户配置文件中复制 trust.certs 以及所有必要的证书c:\windows\sun\java\deployments
。
该文件包含的所有证书现在将显示在 Java 控制面板的“系统/受信任的证书”下
您还可以对大多数其他 java 属性执行此操作,方法是将它们包含在文件中,deployment.properties
例如:
deployment.javaws.autodownload=NEVER
deployment.javaws.autodownload.locked
deployment.security.level=MEDIUM
deployment.security.level.locked
deployment.security.mixcode=HIDE_RUN
deployment.security.mixcode.locked
deployment.insecure.jres=NEVER
deployment.insecure.jres.locked
deployment.expiration.check.enabled=false
deployment.expiration.check.enabled.locked
deployment.webjava.enabled=true
deployment.webjava.enabled.locked
第一行设置属性,第二行(末尾.locked
)阻止用户更改 Java 控制面板中的属性
您还可以通过在同一位置创建一个名为 exception.sites 的文件并将网址添加到此文件(每行一个站点)并将此行包含在以下内容中来管理站点例外列表deployment.properties
:
deployment.user.security.exception.sites=C\:\\Windows\\Sun\\Java\\Deployment\\exception.sites
此链接将解释大多数可配置属性:
http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/jcp/properties.html