您可以使用与上一个答案中提到的模式类似的模式(针对另一个问题)。

本质上,掌握默认的信任管理器,创建另一个使用您自己的信任库的信任管理器。 将它们都包装在一个自定义的信任管理器实现中,该实现将调用委派给这两者(当一个失败时回退到另一个)。

TrustManagerFactory tmf = TrustManagerFactory

.getInstance(TrustManagerFactory.getDefaultAlgorithm());

// Using null here initialises the TMF with the default trust store.

tmf.init((KeyStore) null);

// Get hold of the default trust manager

X509TrustManager defaultTm = null;

for (TrustManager tm : tmf.getTrustManagers()) {

if (tm instanceof X509TrustManager) {

defaultTm = (X509TrustManager) tm;

break;

}

}

FileInputStream myKeys = new FileInputStream("truststore.jks");

// Do the same with your trust store this time

// Adapt how you load the keystore to your needs

KeyStore myTrustStore = KeyStore.getInstance(KeyStore.getDefaultType());

myTrustStore.load(myKeys, "password".toCharArray());

myKeys.close();

tmf = TrustManagerFactory

.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(myTrustStore);

// Get hold of the default trust manager

X509TrustManager myTm = null;

for (TrustManager tm : tmf.getTrustManagers()) {

if (tm instanceof X509TrustManager) {

myTm = (X509TrustManager) tm;

break;

}

}

// Wrap it in your own class.

final X509TrustManager finalDefaultTm = defaultTm;

final X509TrustManager finalMyTm = myTm;

X509TrustManager customTm = new X509TrustManager() {

@Override

public X509Certificate[] getAcceptedIssuers() {

// If you're planning to use client-cert auth,

// merge results from "defaultTm" and "myTm".

return finalDefaultTm.getAcceptedIssuers();

}

@Override

public void checkServerTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

try {

finalMyTm.checkServerTrusted(chain, authType);

} catch (CertificateException e) {

// This will throw another CertificateException if this fails too.

finalDefaultTm.checkServerTrusted(chain, authType);

}

}

@Override

public void checkClientTrusted(X509Certificate[] chain,

String authType) throws CertificateException {

// If you're planning to use client-cert auth,

// do the same as checking the server.

finalDefaultTm.checkClientTrusted(chain, authType);

}

};

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

sslContext.init(null, new TrustManager[] { customTm }, null);

// You don't have to set this as the default context,

// it depends on the library you're using.

SSLContext.setDefault(sslContext);

您不必将该上下文设置为默认上下文。 如何使用它取决于您使用的客户端库(以及从中获取套接字工厂的位置)。

这就是说,原则上,无论如何,您总是必须根据需要更新信任库。 Java 7 JSSE参考指南对此有一个“重要说明”,现在在同一指南的版本8中已降级为“重要说明”:

JDK随附有限数量的受信任的根证书   java-home / lib / security / cacerts文件。 如keytool中所述   参考页,您有责任进行维护(即添加   并删除)此文件中包含的证书(如果使用   文件作为信任库。

根据您所使用的服务器的证书配置   联系人,则可能需要添加其他根证书。 获得   需要来自适当供应商的特定根证书。

java添加信任_ssl-在Java中使用自定义信任库以及默认的on相关推荐

  1. simulink中创建自定义模块库

    simulink自带模块库虽然看似很全,实际上在工程开发中并不够用,大陆联电等供应商提供的控制策略都有自己二次开发自定义的模块库.我们公司目前有混动系统开发的项目,领导交代模仿大陆建立咱们自己的模块库 ...

  2. java添加时间,如何通过Java中的addHours()方法添加时间

    我试图让这个飞机项目工作,我不能为我的生活弄清楚如何在"public void addHours()"中添加时间,或者如果我甚至做了前面的正确!任何帮助都会很棒! 问题有待回答: ...

  3. java添加不了源代码,JAVA初学者的一些问题

    JAVA问题以下是源代码:import java.util.*;public class disanzhang { public static void main(String[] args){ in ...

  4. java converter转换器_在SpringMVC中设置自定义类型转换器Converter

    前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...

  5. java添加zip并下载,java - 使用java创建zip并使其可下载。 - SO中文参考 - www.soinside.com...

    我有一个程序,我想用它来创建一个位于目录中的文件的压缩文件. 该程序运行,但在chrome中,它无法下载,说网络错误. 在Mozilla中,它说Ut0ij4ld.ZIP.part无法保存,因为源文件无 ...

  6. 把combobox控件添加到datagridview控件中_自定义系列:控件属性添加

    本文讲述如何在布局文件中添加原本所不具备的属性,以PagerTabStrip控件为例,增加textColor与textSize属性. 一.属性声明 新建res/values下的attrs.xml文件( ...

  7. uni-app中使用自定义图标库

    方法一: 1.进入阿里图标库下载并解压字体图标库到本地(下载Unicode格式的) 2.在项目根目录下创建common目录,并把iconfont.css文件放入common目录中 3.修改iconon ...

  8. java 图片动画_java在窗口中添加图片做动画,怎么一闪一闪的?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 视频来自:优酷 在java中添加图片做动画效果,怎么一闪一闪的运动啊?怎样才能让它不闪的连续运动呢? 下面是代码,代码项目project里有两个类,一个是 ...

  9. java 多个 panel_在Java中,每次我向JPanel添加多个东西时,第二...

    我创建了一个JPanel并添加了几个简单的按钮,并附加了监听器.然后我决定将一个Image添加到我的面板的背景中,所以我将我的JPanel切换到了ImagePanel.按钮正在JPanel上工作,但现 ...

最新文章

  1. JQuery中全局变量和局部变量的理解
  2. CNN网络架构演进:从LeNet到DenseNet
  3. Android 热修复 HotFix 混淆apk生成patch包方案
  4. Windows Store App 获取文件及文件夹列表
  5. java读取pem格式私钥_openssl生成RSA格式及pkcs1与pkcs8格式互相转换
  6. 刚刚看到网友的签名 飞秋官网下载
  7. antd的table遍历之后添加合计行_付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具...
  8. mysql主从配置实例
  9. WifiConfigManager NetworkSelector 和 WifiConnectivityManager
  10. 用什么软件测试钢结构受力,钢结构平台承载力检测
  11. TCP和Udp的区别是什么?
  12. 链接了GitHub的文件,在Pycharm不同颜色的不同含义
  13. 求助 NVIDIA GeForce experience安装失败
  14. 开始起飞-golang编码技巧分享--Dave Cheney博客读后整理
  15. 华为系统wifi服务器失败是怎么回事儿,wifi 用云服务器异常
  16. python迅雷下载任务出错_迅雷下载时提示“任务出错”怎么办?(附多种解决方法)...
  17. 我的u3d游戏编程之路
  18. 【Playwright】关于无痕模式与无头模式
  19. 随机变量的期望和方差
  20. C++——HIS排班系统for Neuedu

热门文章

  1. 深度学习100例-卷积神经网络(CNN)花朵识别 | 第4天
  2. QT中写一个求QVector容器中数据均值的函数
  3. MTDDL——美团点评分布式数据访问层中间件
  4. spring源码分析之spring-core总结篇
  5. make things simple
  6. spring源码分析之spring-core-env
  7. Kubernetes系统架构简介--转
  8. Errors running builder 'JavaScript Validator' on project
  9. windows dos命令窗口的环境变量
  10. 微框架spark--api开发利器