如何使用 Java 访问 Java 证书库?

How to access the Java Certificate Store with Java?

我发现 Java 有它自己的 "certificate Store",它位于 lib 文件夹内的安全文件夹中的一个文件中。

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

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

谢谢!

查看 java 密钥库,它可能对您有帮助:

http://docs.oracle.com/cd/E19830-01/819-4712/ablqw/index.html

https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores

http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html

在java中导入证书的例子:

Programmatically Import CA trust cert into existing keystore file without using keytool

programmatically import .cer certificate into keystore

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

首先创建一个基于文件的密钥库并将此 .cer 文件加载到其中

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

然后将生成的keystore文件作为资源添加到应用程序中 并构建您的自定义 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();
                }