栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java SSL连接,以编程方式将服务器证书添加到密钥库

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java SSL连接,以编程方式将服务器证书添加到密钥库

您可以使用X509TrustManager来实现。

使用以下方法获取SSLContext

SSLContext ctx = SSLContext.getInstance("TLS");

然后

X509TrustManager
使用SSLContext#init用您的自定义对其进行初始化。SecureRandom和KeyManager
[]可以为null。后者仅在您执行客户端身份验证时有用,如果在您的情况下仅服务器需要身份验证而无需设置它。

从此SSLContext中,使用SSLContext#getSocketFactory获取SSLSocketFactory
并按计划进行。

关于X509TrustManager的实现,它可能看起来像这样:

TrustManager tm = new X509TrustManager() {    public void checkClientTrusted(X509Certificate[] chain,         String authType)         throws CertificateException {        //do nothing, you're the client    }    public X509Certificate[] getAcceptedIssuers() {        //also only relevant for servers    }    public void checkServerTrusted(X509Certificate[] chain,         String authType)         throws CertificateException {            }};

编辑:

Ryan是正确的,我忘了解释如何将新根添加到现有根中。假设您当前的受信任根的KeyStore来自

cacerts
(JDK随附的“
Java默认信任存储”,位于jre / lib / security下)。我假设您使用KeyStore#load(InputStream,char
[])加载了该密钥库(采用JKS格式)。

KeyStore ks = KeyStore.getInstance("JKS");FileInputStream in = new FileInputStream("<path to cacerts"");ks.load(in, "changeit".toCharArray);

cacerts
如果尚未更改,默认密码为“ changeit”。

然后,您可以使用KeyStore#setEntry添加其他受信任的根。您可以省略ProtectionParameter(即null),KeyStore.Entry将是一个TrustedCertificateEntry,它将新的根作为其构造函数的参数。

KeyStore.Entry newEntry = new KeyStore.TrustedCertificateEntry(newRoot);ks.setEntry("someAlias", newEntry, null);

如果您想在某个时候持久保存更改后的信任库,可以使用KeyStore#store(OutputStream,char
[]来实现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号