作为将PFX证书转换为JKS、P12和CRT的后续,我们现在有了一个密钥存储库和一个信任存储库(如果有人需要的话),我们将使用这个密钥存储库来使用Spring的RestTemplate发送客户端身份验证。

首先在您的类路径中复制keystore.jks和truststore.jks,没有人想要绝对路径正确吗? 再次提醒您,如果您不知道,则信任库和密钥库之间的区别是(来自JSSE参考指南的引文): TrustManager:确定是否应该信任远程身份验证凭据(以及连接)。

KeyManager:确定要发送到远程主机的身份验证凭据。神奇之处在于SSLContext的创建。请记住,Spring Boot有一个很好的RestTemplateBuilder,但我不会使用它,因为你们中的一些人可能有一个更老的版本,或者像我一样,可能只是使用一个普通的老的惊人的Spring。

如果你只是想使用密钥库:


final String allPassword = "123456";
SSLContext sslContext = SSLContextBuilder
.create()
.loadKeyMaterial(ResourceUtils.getFile("classpath:keystore.jks"),
allPassword.toCharArray(), allPassword.toCharArray())
.build();

如果您只想使用信任库


final String allPassword = "123456";
SSLContext sslContext = SSLContextBuilder
.create()
.loadTrustMaterial(ResourceUtils.getFile("classpath:truststore.jks"), allPassword.toCharArray())
.build();

我想您知道如何同时使用这两个;),如果您想忽略信任库证书检查并信任所有证书(对于测试目的和localhost可能很方便)


final String allPassword = "123456";
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = SSLContextBuilder
.create()
.loadTrustMaterial(ResourceUtils.getFile("classpath:truststore.jks"), allPassword.toCharArray())
.loadTrustMaterial(null, acceptingTrustStrategy) //accept all
.build();

您只需执行sslContext即可:


HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();
HttpComponentsClientHttpRequestFactory requestFactory =new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(client);
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;

还有Voala,现在每次您进行一次get / post或与restTemplate进行交换时,您都将发送客户端证书。 发送客户端证书并忽略SSL证书的完整示例(“测试”版本)。


private RestTemplate getRestTemplateClientAuthentication()throws IOException, UnrecoverableKeyException, CertificateException, NoSuchAlgorithmException,KeyStoreException, KeyManagementException {
final String allPassword = "123456";TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;SSLContext sslContext = SSLContextBuilder.create().loadKeyMaterial(ResourceUtils.getFile("classpath:keystore.jks"),allPassword.toCharArray(), allPassword.toCharArray())
//.loadTrustMaterial(ResourceUtils.getFile("classpath:truststore.jks"), allPassword.toCharArray()).loadTrustMaterial(null, acceptingTrustStrategy).build();
HttpClient client = HttpClients.custom().setSSLContext(sslContext).build();
HttpComponentsClientHttpRequestFactory requestFactory =new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(client);
RestTemplate restTemplate = new RestTemplate(requestFactory);
return restTemplate;
}

from: https://dev.to//gochev/use-client-certificate-authentication-with-java-and-resttemplate-1if3

通过 Java 和 RestTemplate 使用客户端证书身份验证相关推荐

  1. 谷歌邮箱服务器验证失败,Gmail错误:SMTP服务器需要安全连接,或者客户端未经身份验证。服务器响应为...

    Gmail错误:SMTP服务器需要安全连接,或者客户端未经身份验证.服务器响应为 我使用以下代码发送电子邮件.代码在我的本地机器中正确工作.但是在生产服务器上,我得到了错误消息.var fromAdd ...

  2. Java SSL与TLS客户端证书配置

    一.TLS安全概念 (1)PKI PKI是 Public Key Infrastructure的简称,意思是公钥基础设施. 公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证 ...

  3. java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL

    我需要连接到远程ms sql.I有连接的Windows服务器登录信息 . 并且该登录用户可以连接到MSSQL服务器 . (我的意思是我可以通过Windows身份验证与该用户连接到MSSQL服务器) 我 ...

  4. 使用Linux docker容器中的集成安全性对SQL Server的.Net Core客户端进行身份验证

    目录 面对问题 逐步发现解决方案 先决条件 我们的演示应用 在容器中准备kerberos身份验证 KDC消费所需的包 创建一个合适的krb5.conf文件 生成keytab文件 Docker化演示应用 ...

  5. mysql插件验证_mysql8 参考手册--客户端明文身份验证插件

    提供了客户端身份验证插件,使客户端可以将密码以明文形式发送到服务器,而无需哈希或加密.该插件内置在MySQL客户端库中. 下表显示了插件名称. 表6.15用于明文身份验证的插件和库名称 插件或文件 插 ...

  6. java mifare_java – NTAG212 Mifare Ultralight与身份验证

    我是NFC Android的新手,我已经坚持了几天试图通过身份验证获得NTAG212 Mifare Ultralight的第7页,我已经有了PWD和PACK来完成基于NTAG212文档的PWD_AUT ...

  7. 统一身份认证服务(客户端用户身份验证)

    /// <summary>/// 基本用户身份验证(各系统可根据自己的实际需要,自定义验证方法,此多语言模块实现了验证并提供参考依据)/// 详细说明:判断用户是否登录,如果未登录则跳转到 ...

  8. java ocsp请求_java – 客户端证书上的OCSP吊销

    如果仅使用客户端的java.security.cert.X509Certificate,如何使用OCSP手动检查java中的证书撤销状态?我看不清楚这样做的明确方法. 或者,我可以让tomcat自动为 ...

  9. 帝国时代2决定版服务器证书身份验证失败,《帝国时代2决定版》常见问题解决方法介绍 常见问题怎么解决...

    帝国时代2决定版常见问题怎么解决?游戏中会遇到很多的小问题,可能大家都还不清楚怎么解决吧,今天小编给大家带来帝国时代2决定版常见问题解决方法介绍,一起来看一下吧. 常见问题解决方法介绍 如图,是不是排 ...

最新文章

  1. getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解
  2. view,control,service,dao,model层的关系
  3. coredata 数据库升级
  4. python创建函数、可以接受任意多个整数参数并求和_pythonxlwt:求和函数最大参数限制?...
  5. Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析
  6. springside 参考地址
  7. 剑指offer面试题61. 扑克牌中的顺子(排序)(遍历)
  8. 自己写的一个执行带参数的sql,PreparedStatement
  9. Linux中创建 静态库和动态库(共享库) 本人亲测可行
  10. java模拟网银登录_Java模拟网上银行业务
  11. matlab从无到有系列(二):矩阵运算基础
  12. parallels desktop 网络初始化失败_升级Big Sur后Parallels虚拟机无法联网解决方法
  13. Delphi中ComPort通信中的数据处理
  14. [渝粤教育] 江西财经大学 中国会计准则(全英文) 参考 资料
  15. Python Data mining - Enron Email Dataset
  16. Ubuntu1804编译QWebEngine
  17. 测试开发 | 这些常用测试平台,你们公司在用的是哪些呢?
  18. react xlsx 数据转换excle 插件
  19. 用户故事地图,产品经理必须掌握的分析利器
  20. FPGA ISE PROMs下载程序问题

热门文章

  1. 东北大学2022019年计算机排名多少,2021年东北大学排名U.S.News世界大学排名第177...
  2. JVM详解之:运行时常量池
  3. matlab导入地图文件,matlab 外部数据导入方法详解
  4. css中如何让自己的背景图片平铺整个屏幕
  5. 【C/C++开源库】单片机/嵌入式中的C语言日志库
  6. Android开发知识(一)(理论篇)
  7. HTTP CONNECT
  8. IDEA自行设置快捷键Live Templates(sout、main)
  9. Python 的Tkinter包系列之六:好例子
  10. -EL 和 -JSTL