Java-JSSE-SSL/TLS编程代码实例-双向认证

浅谈SSL/TLS协议及其实现 开篇感谢大神们指引方向,参考资料: https://www.paolotagliaferri.com/an-overview-of-ssl-tls-secure-sockets-layer-transport-layer-security-tls-1-2/ https://www.paolotagliaferri.com/overview-of-transport-layer-security-protocol-tls-1-3/ https://tls13.ulfheim.net/ 《图解密码技术》 阅读详情

关于SSL/TLS/JSSE的介绍:
1)SSL/TLS协议运行机制
2)图解SSL/TLS协议
3)使用wireshark观察SSL/TLS握手过程
4)SSL/TLS的Java实现--JSSE

(一)使用keytool创建密钥库

使用双向认证的SSL/TLS协议通信,客户端和服务器端都要设置用于证实自己身份的安全证书,并且还要设置信任对方的哪些安全证书。
理论上一共需要准备四个文件,两个keystore文件和两个truststore文件。
通信双方分别拥有一个keystore和一个truststore,keystore用于存放自己的密钥和公钥,truststore用于存放所有需要信任方的公钥。

首先使用JDK自带的keytool工具来生成keystore和truststore。这里使用的Java版本是1.7。
1)创建server的keystore文件,生成server的公钥/私钥密钥对。需要指定keystore的密码(storepass)和密钥对的密码(keypass)。
访问keystore需要storepass。访问密钥对需要keypass。

<span style="font-family:Verdana;">C:\Program Files\Java\jre7\bin>keytool -genkey -alias catserver -keyalg rsa -keysize 1024 -sigalg sha256withrsa -keypass catserver -keystore c:\_tmp\catserver.keystore -storepass catserverks
What is your first and last name?
[Unknown]: cat
What is the name of your organizational unit?
[Unknown]: cat
What is the name of your organization?
[Unknown]: cat
What is the name of your City or Locality?
[Unknown]: cat
What is the name of your State or Province?
[Unknown]: cat
What is the two-letter country code for this unit?
[Unknown]: ct
Is CN=cat, OU=cat, O=cat, L=cat, ST=cat, C=ct correct?
[no]: y</span>


2)创建client的keystore文件。同样需要指定keystore的密码和密钥对的密码。

<span style="font-family:Verdana;">C:\Program Files\Java\jre7\bin>keytool -genkey -alias foxclient -keyalg dsa -keysize 512 -sigalg sha1withdsa -keypass foxclient -keystore c:\_tmp\foxclient.keystore -storepass foxclientks
What is your first and last name?
[Unknown]: fox
What is the name of your organizational unit?
[Unknown]: fox
What is the name of your organization?
[Unknown]: fox
What is the name of your City or Locality?
[Unknown]: fox
What is the name of your State or Province?
[Unknown]: fox
What is the two-letter country code for this unit?
[Unknown]: fx
Is CN=fox, OU=fox, O=fox, L=fox, ST=fox, C=fx correct?
[no]: y</span>


3)从server的keystore中导出server的证书(其中包括server的公钥)。

<span style="font-family:Verdana;">C:\Program Files\Java\jre7\bin>keytool -export -alias catserver -keystore c:\_tmp\catserver.keystore -storepass catserverks -file c:\_tmp\catserver.cer
Certificate stored in file <c:\_tmp\catserver.cer>
</span>

4)从client的keystore中导出client的证书(其中包括client的公钥)。

<span style="font-family:Verdana;">C:\Program Files\Java\jre7\bin>keytool -export -alias foxclient -keystore c:\_tmp\foxclient.keystore -storepass foxclientks -file c:\_tmp\foxclient.cer
Certificate stored in file <c:\_tmp\foxclient.cer>
</span>


5)创建server的truststore文件并导入client的证书(其中包括client的公钥)。

<span style="font-family:Verdana;">C:\Program Files\Java\jre7\bin>keytool -import -alias foxclient -keystore c:\_tmp\catservertrust.keystore -storepass catservertrustks -file c:\_tmp\foxclient.cer
Owner: CN=fox, OU=fox, O=fox, L=fox, ST=fox, C=fx
Issuer: CN=fox, OU=fox, O=fox, L=fox, ST=fox, C=fx
Serial number: 6eaf996f
Valid from: Wed Nov 05 16:15:41 CST 2014 until: Tue Feb 03 16:15:41 CST 2015
Certificate fingerprints:
MD5: B5:B6:92:66:84:92:A0:C2:F5:40:39:25:F8:66:2A:17
SHA1: 07:42:A3:1A:49:7B:C9:34:4B:6B:FA:37:6C:20:98:D4:20:13:7C:91
SHA256: 37:A5:00:A3:13:00:DE:99:3B:08:47:F6:1E:8A:05:F1:4A:B2:C6:22:20:
E1:AF:0E:05:B2:CE:E0:2F:94:B6:94
Signature algorithm name: SHA1withDSA
Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 69 3E 6A D0 B5 B1 1F BD 48 46 E1 A4 6C 1F 71 90 i>j.....HF..l.q.
0010: 29 06 3B 32 ).;2
]
]

Trust this certificate? [no]: y
Certificate was added to keystore</span>


6)创建client的truststore文件并导入server的证书(其中包括server的公钥)。<

java8 SSLEngine实现TLSv1.2的handshake步骤 1、TLSv1.2 Handshake步骤: 在java8 JSSE中,TLSv1.2的handshake文档链接:https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/tls.html#the_tls_1.2_handshake 下面我们直接上一个握手过程图: 在TLSv1.2 handshake中,排除掉Optional的选项(这里注意:证书部分也是可选内容,也就是说HTTPS这些基于SSL/TLS协议的通信, 阅读详情

相关推荐

Java-JSSE-SSL/TLS编程代码实例-单向认证

使用JSSE实现一个单向认证的SSL/TLS编程代码实例。

NowOrNever 1万+

使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

SSL/TLS握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程。 这个过程实际上产生三个随机数:client random, server random, pre-master secret。 前两个随机数都是明文传送的,只有pre-master secret是加密的(RSA或者DH)。 一般生成证书的时候,签名算法可以选择RSA或者DSA算法。 如果server使用RSA证书,RSA即可以用作签名也可以用作不对称加密,pre-master secret就是用server的RSA证书中包含的公

NowOrNever 6万+

Android JSSE实现SSL双向认证(阻塞模式及非阻塞模式)

一、概念及相关术语定义 SSL双向认证:SSL协商时默认只认证Server侧,即客户端(浏览器等)总是需要验证服务器端的数字证书。但在某些场合,为了验证用户的有效性,例如,登录网上银行及一些敏感的服务器时就需要用户提供自己的有效数字证书(如U盾等)。而用户数字证书被加载和鉴证的SSL协商或者重协商的过程便是SSL的双向认证。 JSSE: (Java 安全套接字扩展,Java Secure So

hrp36的专栏 1628

Java实现SSL/TLS通信系统:从证书配置到JSSE实战

在Java网络编程中,安全通信始终是工程实践的关键课题。从基础的TCP Socket通信到加密传输,SSL/TLS协议为数据传输提供了机密性、完整性与身份认证保障。Java标准库中的JSSE(Java Secure Socket Extension)封装了TLS握手、证书校验、密钥协商等核心机制,开发者无需引入第三方依赖即可构建安全的通信系统。理解单向认证与双向认证的差异,掌握KeyStore与TrustStore的配置方法,是落地此类系统的前提。无论是课程设计还是企业级应用,基于Java实现SSL/TLS

weixin_32705179的博客 238

Java国密HTTPS通信实战:基于gm-jsse的JSSE SPI实现与双向认证

在Java安全通信领域,JSSE(Java Secure Socket Extension)是构建HTTPS、SSL/TLS连接的标准API框架,其核心机制SPI(Service Provider Interface)允许开发者插入自定义的安全提供者。国密算法(SM2/SM3/SM4)作为我国自主的商用密码标准,在金融、政务等对数据安全与合规性要求极高的场景中已成为强制或推荐规范。传统集成方式往往依赖第三方密码库进行繁琐配置,难以与原生JSSE API无缝融合。gm-jsse项目通过实现完整的JSSE SP

weixin_28622215的博客 375

Java SSL Socket双向认证实现详解与实战

Java Secure Socket Extension(JSSE)是Java平台中实现SSL/TLS协议的核心API,为开发者提供了构建安全网络通信的标准化接口。作为Java SE的一部分,JSSE从JDK 1.4起被正式集成,并持续演进以支持最新的加密算法和安全协议版本(如TLS 1.3)。其设计目标是在不破坏原有Socket编程模型的前提下,无缝嵌入加密、身份认证与数据完整性保护机制。

weixin_28840811的博客 603

TLS java简单实现

NULL 博文链接:https://antlove.iteye.com/blog/2166171

JAVA实现的SSL/TLS双向认证源代码

压缩包里有客户端源码和服务器端源码,支持TCP的双向认证,也支持WEBSOCKET的双向认证,内附测试 wss的测试例子, 需要生成PKCS12的证书,导入浏览器才可以测试。

从一根USB线缆说起:深入浅出聊聊那些影响信号完整性和EMC性能的‘小细节’(双绞、屏蔽、360度搭接全解析)

本文深入探讨了USB线缆中影响信号完整性和EMC性能的关键细节,包括双绞线绞距、屏蔽层设计和360度搭接工艺。通过实验数据和实用技巧,揭示了这些‘小细节’如何显著影响高频信号质量和电磁兼容性,为工程师提供了从选购到系统设计的全面指南。

weixin_30824479的博客 432

从碰撞电离到雪崩击穿:Sentaurus仿真中的模型选择与验证艺术

本文深入探讨了Sentaurus TCAD中雪崩击穿模型的选取与验证方法,特别关注平行平面结的仿真实践。通过对比Chynoweth、van Overstraeten等主流模型的适用场景与精度差异,结合具体案例展示了从几何建模到边界条件设定的完整验证流程,并针对非理想因素提供了有效的补偿技术,助力工程师提升器件仿真的准确性与可靠性。

weixin_29074295的博客 589

eQTL:连接突变与基因表达的桥梁

欢迎关注”生信修炼手册”!在高等生物中,很多的重要性状都为数量形状,比如农作物的产量,人类复杂疾病(高血液,糖尿病)等等。对于这些数量性状而言,往往受到多个基因的调控作用。为了更好的开展...

庐州月光的博客 7055

银河麒麟桌面版V10搭建Qt4.8.6开发环境

银河麒麟桌面版V10搭建Qt4.8.6开发环境

qq_34932364的博客 2397

【OpenCV】手眼标定实战:从原理到calibrateHandEye的完整实现

本文详细解析了机器人视觉中的手眼标定原理与实战,重点介绍了如何使用OpenCV的calibrateHandEye函数实现从数据采集到结果验证的完整流程。文章深入剖析了AX=XB核心方程,区分了眼在手上与眼在手外两种配置,并提供了详细的代码示例与避坑指南,帮助开发者精准建立相机与机械臂末端的坐标转换关系,是机器人精准抓取的关键技术。

weixin_29046611的博客 501

【CODESYS】-软件Bug与处理方法(20240710更)

【CODESYS】-软件Bug与处理方法(不定期更新)

qq_35316470的博客 5175

Python 爬虫实战:简易爬取知乎回答内容

本文详细介绍了使用Python爬取知乎回答内容的实战方法。通过分析知乎异步加载API接口,讲解如何构建带反爬策略的爬虫代码,包括请求头设置、JSON数据解析和内容清洗等核心步骤。文章提供了完整可运行的代码示例,并针对多页爬取、数据保存和反爬升级给出优化建议。同时强调爬虫使用的合规性,帮助新手快速掌握动态网页爬取的核心技巧,实现从静态到动态网页爬虫的进阶。

2503_91057718的博客 2190

基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)

当前所设计的温室大棚种植监测系统基于STM32单片机开发,它能够对温室大棚内的温度、湿度、光照强度、土壤湿度、二氧化碳含量等环境参数进行实时监测,并将数据传输至OneNET云平台,实现了远程监测和管理。该系统具有体积小、功耗低、可靠性高等特点,适合在温室大棚等场合使用。

7859

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: SSL/TLS的Java实现--JSSE
下一篇: Java-JSSE-SSL/TLS编程代码实例-单向认证
fw0124
博客等级 码龄16年 901粉丝 115原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值