一、TLS安全概念

(1)PKI

PKI是 Public Key Infrastructure的简称,意思是公钥基础设施。
公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。通过证书和秘钥来确认通讯双方是否可信任。

(2)CA
CA是Certificate Authority的简称,即证书的签发机构,它是PKI的核心。
正常情况来说,CA是具有权威性的机构,通过CA获取证书需要给钱。
但是有的时候可能不想用CA机构的证书,又想要使用https站点,那么可能就需要自己生成证书,但是这种证书浏览器是认为不安全的,本文档后边的具体步骤即针对这种场景。

(3)https
https是http+ssl,通俗点说,就是采用http通讯的安全传输协议,用来保证http传输过程中数据的机密性、完整性和可靠性,ssl需要证书。

(4)单向认证
网络通讯是双向的,但是安全认证不一定都是双向。大多数情况下可能都是单向的,只需要客户端确认服务端是可靠的,而服务端不管客户端是否可靠。即客户端,比如浏览器会验证服务端证书,服务端不需要客户端证书。

(5)双向认证
双向认证相对于单向认证,即客户端需要确认服务端是否可信,服务端也需要确认客户端是否可信。双方都要验证对方的证书

(6)SSL 
 Secure Sockets Layer,一种加密协议规范,如https就使用它进行加解密

(7)OpenSSL
一种ssl规范的实现,可以帮助我们生成解析各类证书

(8)X.509
证书标准,比如证书应该包含哪些信息

(9)PEM
Privacy Enhanced Mail,一种编码格式,常用于Apache和UNIX服务器,查看证书信息:openssl x509 -in certificate.pem -text -noout

(10)DER
Distinguished Encoding Rules,一种编码格式,常用于Java和Windows服务器,查看证书的信息:openssl x509 -in certificate.der -inform der -text -noout

(11)CRT

certificate,证书文件,常见于UNIX系统,大多应是PEM编码
(12)CER

certificate,证书文件,常见于Windows系统,大多应是DER编码.
(13)KEY

通常用来存放一个公钥或者私钥,查看不同编码格式文件内容

(14)CSR

Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,查看方法:openssl req -noout -text -in my.csr (DER格式同上后面加上-inform der)
(15)PFX/P12

predecessor of PKCS#12,对Unix服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,因此这个文件包含了证书及私钥。

(16)JKS

Java Key Storage,跟OpenSSL关系不大,Java的keytool工具可以将PFX转为JKS,也能直接生成JKS

二、证书存储格式

1、pem格式:pem、crt、key后缀。编码方式base64,key使用pkcs1、pkcs8格式存储

2、p12(通用的证书存储格式)

3、jks(java的证书存储格式,依赖jdk版本,小版本差异会报错)

三、证书客户端设置

KeyManager是提供客户端证书管理,TrustManager是信任服务端证书管理

(1)单向认证

        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");FileInputStream caInputStream = new FileInputStream(caPath);List<X509Certificate> caList =  certificateFactory.generateCertificates(caInputStream).stream().map(v->(X509Certificate)v).collect(Collectors.toList());KeyStore keystore = KeyStore.getInstance("JKS");keystore.load(null, null);for(X509Certificate ca: caList)keystore.setCertificateEntry(ca.getSubjectDN().getName(), ca);TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");tmf.init(keystore);SSLContext context = SSLContext.getInstance("TLS");context.init(null, tmf.getTrustManagers(), new SecureRandom());

(2)双向认证

   private void sslContext() {// 初始化密钥库KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");KeyStore keyStore = getKeyStore("client.jks", "123456", "PKCS12");keyManagerFactory.init(keyStore, "123456".toCharArray());// 初始化信任库TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");KeyStore trustkeyStore = getKeyStore("server.jks", "123456", "JKS");trustManagerFactory.init(trustkeyStore);// 初始化SSL上下文SSLContext ctx = SSLContext.getInstance("SSL");ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);}private  KeyStore getKeyStore(String keyStorePath, String password, String type)throws Exception {FileInputStream is = new FileInputStream(keyStorePath);KeyStore ks = KeyStore.getInstance(type);ks.load(is, password.toCharArray());is.close();return ks;}

Java SSL与TLS客户端证书配置相关推荐

  1. php ssl tls_SSL/TLS多种证书类型的转换

    SSL/TLS多种证书类型的转换对应用于不同服务器中的部署,通常我们使用openSSL工具对其进行转换,也可使用本站的在线工具https://ssldun.com/tools/ssl-converte ...

  2. 通过 Java 和 RestTemplate 使用客户端证书身份验证

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

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

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

  4. 【Java 网络编程】客户端 Socket 配置 ( 超时时间 | 端口复用 | Nagle 算法 | 心跳包机制 | 连接关闭机制 | 缓冲区大小 | 性能权重设置 | 紧急数据设置 )

    文章目录 I 设置读取超时时间 II Socket 复用绑定端口设置 III 开启 Nagle 算法 ( 沾包 ) IV 心跳包机制 V 连接关闭处理 VI Socket 紧急数据内敛设置 VII S ...

  5. java代码实现证书生成客户端证书 实现ssl双向认证

    目的:实现web项目的ssl双向认证客户端证书代码生成. 使用openssl生成ca证书和服务端证书,当然也可以通过代码实现 1)创建CA私钥,创建目录ca openssl genrsa -out c ...

  6. RFC8705-OAuth 2.0双向TLS客户端身份验证和证书绑定访问令牌

    RFC8705-OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens 目录 摘要 1. 简介(I ...

  7. java ocsp校验_Nginx使用OCSP验证客户端证书

    此前,Nginx只支持OSCP验证服务器证书. 目前,Nginx 1.19.0+已经支持使用OSCP验证客户端证书:https://trac.nginx.org/nginx/ticket/1534 有 ...

  8. 什么是SSL?什么是TLS?SSL与TLS 区别

    什么是SSL?什么是TLS?SSL与TLS 区别 chunqianpo7385 一.什么是ssl?什么是tls? SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的 ...

  9. Java nginx 双向ssl_nginx配置ssl双向验证 nginx https ssl证书配置

    参考<nginx安装>:http://www.ttlsa.com/nginx/nginx-install-on-linux/ 如果你想在单IP/服务器上配置多个https,请看<ng ...

最新文章

  1. [置顶] think in java interview-高级开发人员面试宝典(二)
  2. centos7 tomcat 设置开机启动
  3. 开卡教程_流量卡开卡教程(必看)
  4. POJ2528 线段树+离散化+hash(成段更新)
  5. 【flink】RocksDB介绍以及Flink对RocksDB的支持
  6. c 语言 00字符串 截断,c语言截断字符串
  7. NetLog 大规模应用实战:Database-sharding 技术
  8. pillow图像格式转化和缩放操作
  9. 单片机c语言6种开方,单片机快速开平方的算法
  10. PT1000 电桥测温
  11. 机器学习概念西洋跳棋
  12. GPU深度报告,三大巨头,十四个国内玩家一文看懂【物联网智商精选】
  13. 深入理解GlusterFS之数据均衡
  14. HTNL5列表,表格,音频,视频,iframe内联框架
  15. 祝福大家新年快乐,身体健康,工作顺利,万事如意!
  16. 莫队算法(小Z的袜子)
  17. 我读 《国富论》 - 亚当 · 斯密 / 论资本利润
  18. VC,MFC开发技巧收集
  19. iOS 去除字符串中的空格或多余空格(适合英文单词)
  20. python爬虫 关于Max retries exceeded with url 的错误

热门文章

  1. 和平使命-2007中方部队抵达演习区域
  2. [多核并行计算]进程间通信(三)套接字
  3. 字体大宝库:16款漂亮的免费英文手写字体推荐
  4. Oracle RAC清理crfclust.bdb文件
  5. 【汇编语言04】第3章 寄存器(内存访问)
  6. Adversarial disentanglement spectrum variations and cross-modality attention networks阅读笔记
  7. 浏览器本地存储webStorage
  8. Huffman编码与译码
  9. Qt 实现压缩文件、文件夹和解压缩操作zip
  10. 大学物理---质点运动学