2011-08-29 115 views
3

我拿到了证书.cer,我希望脚本将它导入证书的可信发布者列表中。如何在java中导入证书?

我设法做这件事情在C#

X509Certificate2 certificate = new X509Certificate2(filePath.Text, "Telecomitalia1?12524", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); 
X509Store store = new X509Store(StoreName.TrustedPublisher); 
store.Open(OpenFlags.ReadWrite); 
store.Add(certificate); 
store.Close(); 

有没有办法做同样在Java中?

非常感谢。

回答

1

使用keytool,就像Java tutorial explains那么好。

+0

它没有解释如何添加到Windows的信任存储。 – emboss

+0

问题如何向Windows添加证书?或者如何将证书添加到用于执行程序的运行时?考虑到这个问题是关于Java范围的,我选择回答问题的第二部分。 – Riduidel

+0

我想添加此证书,以便在执行小程序时避免弹出窗口询问执行权限。我已经尝试用java keytool将我的证书添加到cacerts,但是我认为我错过了一步,因为我仍然弹出确认对话框。我认为会发生这种情况,因为在检查证书权限时,cacerts密钥库不会被Internet Explorer(也不是FireFox)使用。有什么我可以做的,或者将我的证书添加到cacerts密钥存储库只是错误的解决方案? –

2

java处理证书的方式与Windows处理证书的方式有很大不同。 Windows为计算机帐户,用户帐户和服务帐户提供了预定义的存储区,并根据其用途区分证书(例如,个人与trussted CA.)

Java仅提供密钥存储的概念 - 您的任意文件选择证书的存储位置。 JDK为可信CA使用默认密钥库,位于$JAVA_HOME/jre/lib/security/cacerts

要将证书导入密钥库,可以使用随JDK一起提供的keytool - 您使用的密钥库取决于您的应用程序。

+0

尽管cacerts是本地Java的发展方向,但您可以使用MSCapi提供程序来访问/修改Windows的根证书。 – emboss

+0

我有一个Java桌面应用程序;在给定点上,我创建了一个JFrame,并在其中打开Internet Explorer浏览器以连接到Web应用程序。在一些页面中,我们正在谈论的证书上签名的Java Applets必须执行。我想将该证书插入受信任的发布者列表中,就像我可以用C#做​​的那样。有什么我可以做的吗?我可以使用Java密钥库吗?哪一个?非常感谢。 –

+0

洛伦佐这是另一个问题。 – javahaxxor

0

如果你想从代码(不与keytool实用程序)去做那么这article将让你开始。

3

您可以在Java中执行相同的操作。查看MSCAPI供应商。

提供对MS Window密钥库的直接读写访问。 Windows-MY密钥库包含用户的私钥和相关的证书链。 Windows-ROOT密钥库包含本机信任的所有根CA证书。

KeyStore ks = KeyStore.getInstance("Windows-ROOT"); 
// Note: When a security manager is installed, 
// the following call requires SecurityPermission 
// "authProvider.SunMSCAPI". 
ks.load(null, null); 
ks.setCertificateEntry("alias", cert); 
ks.store(null, null); //again the permissions here...