【发布时间】:2015-06-30 08:41:04
【问题描述】:
我发现 Java 有它自己的“证书存储”,它位于 lib 文件夹内安全文件夹中的一个文件中。
您可以从 Java 控制面板 -> 安全 -> 管理证书访问它。
但我想通过 Java 代码访问它们。有人有这方面的一些信息吗?证书如何存储在证书文件中?是否有 Java 内置方式或来自 Java / Oracle 的官方文档?
谢谢!
【问题讨论】:
标签: java certificate certificate-store
我发现 Java 有它自己的“证书存储”,它位于 lib 文件夹内安全文件夹中的一个文件中。
您可以从 Java 控制面板 -> 安全 -> 管理证书访问它。
但我想通过 Java 代码访问它们。有人有这方面的一些信息吗?证书如何存储在证书文件中?是否有 Java 内置方式或来自 Java / Oracle 的官方文档?
谢谢!
【问题讨论】:
标签: java certificate certificate-store
看看java keystore,它可能对你有帮助:
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
【讨论】:
我们必须通过代码使用证书来对某些应用程序进行 API 调用。 由于某些原因,我们无法在代码容器上安装证书。 API 服务提供商为我们提供了 .cer 文件。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();
}
【讨论】: