1

我发现 Java 有它自己的“证书存储”,它位于 lib 文件夹内安全文件夹中的一个文件中。

您可以从 Java 控制面板 -> 安全 -> 管理证书访问它。

但我想通过 Java 代码访问它们。有人有这方面的一些信息吗?证书如何存储在证书文件中?Java/Oracle 的官方文档或官方文档是否有 Java 内置方式?

谢谢!

4

2 回答 2

2

我们必须通过代码使用证书来对某些应用程序进行 API 调用。由于某些原因,我们无法在代码容器上安装证书。API 服务提供商为我们提供了 .cer 文件。为此目的使用了 Apache HTTP 客户端

首先创建一个基于文件的密钥库并将这个 .cer 文件加载到它上面

keytool -import -alias joe -file <path>/file.cer -keystore <keystoreName> -storepass <password>

然后将生成的密钥库文件作为资源添加到应用程序中,并构建您的自定义 HTTPClient 以使用此密钥库

 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
 import org.apache.http.ssl.SSLContexts;
 import javax.net.ssl.SSLContext;
 import java.io.File;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;

            File file = new File(getClass().getClassLoader().getResource(<pathTokeystoreFile>).getFile());
                    SSLContext sslcontext = SSLContexts.custom()

                            .loadTrustMaterial(file, CERT_PASSWORD.toCharArray(),
                                    new TrustSelfSignedStrategy())
                            .build();
                    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                            sslcontext,
                            new String[]{"TLSv1", "SSLv3", "TLSv1.1", "TLSv1.2"},
                            null,
                            SSLConnectionSocketFactory.getDefaultHostnameVerifier());


             CloseableHttpClient customClient; 
            customClient = HttpClients.custom()
                            .setSSLSocketFactory(sslConnectionSocketFactory)
                            .build();
                }
于 2017-01-09T15:18:38.010 回答