如何信任Java中的证书颁发机构?

如何信任Java中的证书颁发机构?,java,ssl,certificate,certificate-authority,Java,Ssl,Certificate,Certificate Authority,我的应用程序连接到SSL web服务,该服务使用证书验证其身份。最近,此证书已更改,并且由于它未由受信任的机构签名,因此我的部分应用程序失败。该服务的建议是,我应该开始信任现有证书的签名机构,而不是单个证书 如何在Java中实现这一点? 目前,我正在使用keytool将他们提供的证书添加到密钥库中,并将其组合到TrustManagerFactory中,如: public static TrustManager[] getTrustManagers() throws KeyStoreExcepti

我的应用程序连接到SSL web服务,该服务使用证书验证其身份。最近,此证书已更改,并且由于它未由受信任的机构签名,因此我的部分应用程序失败。该服务的建议是,我应该开始信任现有证书的签名机构,而不是单个证书

如何在Java中实现这一点?

目前,我正在使用keytool将他们提供的证书添加到密钥库中,并将其组合到TrustManagerFactory中,如:

public static TrustManager[] getTrustManagers() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
    KeyStore tks = KeyStore.getInstance(KeyStore.getDefaultType());
    tks.load(StarTrustManagerFactory.class.getResourceAsStream("webservice.ks"), "password".toCharArray());
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(tks);
    return tmf.getTrustManagers();
}; 
是否有方法调整此方法以返回信任我拥有的证书的签名权限的
TrustManager
?此外,如何从我拥有的证书中提取有关证书签名者的信息


谢谢,Dan。

假设发布的代码在证书更改之前起作用,请保持原样。而是修改webservice.ks密钥库并导入您要连接到的站点的中间ca证书和根ca证书

您可以通过访问web浏览器中的地址并将其保存到磁盘来获取这些证书。有关如何在firefox中实现这一点,请参阅。但是,在链接说明的步骤4中,选择要导出的根/中间ca证书(在所需证书层次结构框中单击)

然后假设.ks文件是jks密钥库,使用keytool将证书导入密钥库


更新:忽略我所说的关于中间证书的内容,您不应该需要它(请参阅)。只需导入根ca证书。

请参阅-您信任信任库中包含的任何证书。谢谢。我现在明白该怎么做了。不幸的是,对于通过浏览器访问web服务而获得的证书,它在其证书层次结构中是唯一的。所以我应该回去问他们CA的证书或者根/中介?只是澄清我应该使用的术语。谢谢听起来证书不是由CA生成的,或者他们的web服务器配置不正确。您可能需要向web服务管理员提出此问题。