SSL双向认证java实现

java实现ssl双向认证 使用httpclient实现双向认证转载自:http://www.blogjava.net/itvincent/articles/330988.html 1、生成服务器端证书 keytool -genkey -keyalg RSA -dname “cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn” -alias server -keypas 阅读详情

本文通过模拟场景,介绍SSL双向认证的java实现 默认的情况下,我认为读者已经对SSL原理有一定的了解,

所以文章中对SSL的原理,不做详细的介绍。如果有这个需要,那么通过GOOGLE,可以搜索到很多这样的文

章。 模拟场景: Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,

Server只能接受Client的消息。 实现技术: JSSE(Java Security Socket Extension)是Sun为了解决在

Internet上的安全通讯而推出的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据

加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,开发人员可以在客户机和服务器

之间通过TCP/IP协议安全地传输数据 为了实现消息认证。

Server需要:

   1)KeyStore: 其中保存服务端的私钥

   2)Trust KeyStore:其中保存客户端的授权证书同样,

Client需要:

    1)KeyStore:其中保存客户端的私钥

    2)Trust KeyStore:其中保存服务端的授权证书 我们可以使用Java自带的keytool命令,去生成这样信息文件 1)生成服务端私钥,并且导入到服务端KeyStore文件中

        keytool -genkey -alias serverkey -keystore kserver.keystore

          过程中,分别需要填写,根据需求自己设置就行

keystore密码:123456

名字和姓氏:stone

组织单位名称:eulic

组织名称:eulic

城市或区域名称:HZ

州或省份名称:ZJ

国家代码:CN

serverkey私钥的密码,不填写和keystore的密码一致:123456 就可以生成kserver.keystore文件

server.keystore是给服务端用的,其中保存着自己的私钥

2)根据私钥,导出服务端证书 keytool -export -alias serverkey -keystore kserver.keystore -file server.crt   server.crt就是服务端的证书

3)将服务端证书,导入到客户端的

        Trust KeyStore中 keytool -import -alias serverkey -file server.crt -keystore tclient.keystore tclient.keystore

是给客户端用的,其中保存着受信任的证书 采用同样的方法,

生成客户端的私钥,客户端的证书,并且导入到服务端的Trust KeyStore中

1)keytool -genkey -alias clientkey -keystore kclient.keystore

2)keytool -export -alias clientkey -keystore kclient.keystore -file client.crt

3)keytool -import -alias clientkey -file client.crt -keystore tserver.keystore

如此一来,生成的文件分成两组服务端保存:kserver.keystore tserver.keystore 客户端保存:kclient.keystore  tclient.kyestore 接下来,就采用JSSE,分别生成SSLServerSocket,SSLSocket 服务端,生成SSLServerSocket代码

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



KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");

TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");



KeyStore ks = KeyStore.getInstance("JKS");

KeyStore tks = KeyStore.getInstance("JKS");



ks.load(new FileInputStream("data/kserver.keystore"), SERVER_KEY_STORE_PASSWORD.toCharArray());

tks.load(new FileInputStream("data/tserver.keystore"), SERVER_TRUST_KEY_STORE_PASSWORD.toCharArray());



kmf.init(ks, SERVER_KEY_STORE_PASSWORD.toCharArray());

tmf.init(tks);



ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSockt serverSocket = (SSLServerSocket) ctx.getServerSocketFactory().createServerSocket(DEFAULT_PORT);
serverSocket.setNeedClientAuth(true); //表明需要验证客户端的身份。




return  serverSocket;

客户端,生成SSLSocket的代码,大同小异

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



KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");

TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");



KeyStore ks = KeyStore.getInstance("JKS");

KeyStore tks = KeyStore.getInstance("JKS");



ks.load(new FileInputStream("data/kclient.keystore"), CLIENT_KEY_STORE_PASSWORD.toCharArray());

tks.load(new FileInputStream("data/tclient.keystore"), CLIENT_TRUST_KEY_STORE_PASSWORD.toCharArray());



kmf.init(ks, CLIENT_KEY_STORE_PASSWORD.toCharArray());

tmf.init(tks);



ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);



return (SSLSocket) ctx.getSocketFactory().createSocket(DEFAULT_HOST, DEFAULT_PORT);

如此,就完成了服务端和客户端之间的基于身份认证的交互。 client采用kclient.keystore中的clientkey

私钥进行数据加密,发送给server server采用tserver.keystore中的client.crt证书(包含了clientkey的公钥)

对数据解密,如果解密成功,证明消息来自client,进行逻辑处理 server采用kserver.keystore中的serverkey

私钥进行数据叫米,发送给client client采用tclient.keystore中的server.crt证书(包含了serverkey的公钥)

对数据解密,如果解密成功,证明消息来自server,进行逻辑处理 如果过程中,解密失败,那么证明消息

来源错误。不进行逻辑处理。这样就完成了双向的身份认证。 下面我附上简单的SSLServer.java SSLClient.java,供大家演示用。启动服务端的时候,大家不妨采用telnet 127.0.0.1 7777连接,看看能不能实现消息传递。

SSL Demo

备注: demo是采用maven构建项目的 demo文件的编码是用utf8,为了避免中文乱码,请把workspace设置成utf8编码本文引用自:http://www.blogjava.net/stone2083/archive/2007/12/20/169015.html

JAVA实现发送HTTPS请求(SSL双向认证) 一、项目背景 Java项目需要作为客户端发起HTTPS请求访问服务端,并且需要携带证书进行SSL双向认证,当前提供的证书相关文件有:ca.crt、ca.key、client.crt、client.key、server.crt、server.key 二、实现步骤 1、对客户端证书和私钥进行打包处理(需要输入密码,之后在代码中需要用到该密码) openssl pkcs12 -export clcerts -in client.crt -inkey client.key -out client.p12 2、.p 阅读详情

相关推荐

Android与Java实现SSL/TLS双向认证实战指南

SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是目前广泛使用的两种加密协议,旨在提供网络通信的数据安全和完整性。SSL的最初版本由网景公司设计,后来被IETF标准化并演进为TLS。TLS是SSL的后续版本,提供了更为强大的加密算法和更为完善的协议机制。双向认证,也称为相互认证,是一种增强的认证机制,在其中客户端和服务器都需要验证对方的身份,而不仅仅是一方。

weixin_28933797的博客 1313

07-HTTPS双向认证及Java案例

HTTPS双向认证的Java案例代码

River的博客 3233

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

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

连接pgsql数据库 sslmode sslrootcert sslkey sslcert 参数的作用

sslmode参数用于指定数据库连接时使用的 SSL 加密模式。SSL(Secure Sockets Layer)是一种加密协议,用于保护数据在客户端和服务器之间的传输过程,以增加数据传输的安全性。sslmode参数可以设置不同的值,以控制数据库连接时 SSL 的使用方式。以下是一些常见的sslmodeallow使用适当的sslmode值可以根据安全需求配置数据库连接。在不同的环境中,可能需要根据情况选择适合的 SSL 加密级别,以保护数据库传输中的数据安全。

罪域之骨终成王 2393

VS Code + EIDE + Clangd 构建 Keil/MDK 嵌入式开发新范式

嵌入式C/C++开发长期受限于传统IDE的语法理解弱、导航卡顿、跨工程复用难等问题。Clangd作为基于AST的现代语言服务器,结合EIDE对Keil uVision和ARM MDK工程文件(.uvprojx)的深度解析能力,可将编译配置、芯片型号、内存模型、扩展关键字等语义精准翻译为标准compile_commands.json,从而实现智能跳转、宏展开识别、结构体实时展开等高阶编辑体验。该方案不替换Keil/MDK编译与烧录流程,仅升级代码理解层,天然兼容STC8051、STM32 Cortex-M、G

weixin_34321753的博客 354

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 676

Centos 7 环境下 PostgreSQL 14 启用SSL加密

配置 PostgreSQL 14 的 SSL 加密通常涉及到生成 SSL 证书和私钥,然后配置 PostgreSQL 以使用这些证书。

m0_37048012的博客 1440

QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate)

QT中的MVD(模型-视图-委托)模式是一种类似于MVC的设计模式,将数据、界面和交互逻辑分离。模型负责数据管理,视图负责显示界面,而委托则嵌入在视图中处理数据的显示和编辑。QT提供了多种视图组件(如QListView、QTreeView、QTableView)和模型类(如QStandardItemModel、QAbstractItemModel),支持数据的多样化呈现。委托(Delegate)通过定制显示和编辑行为增强了视图的灵活性。该模式适用于各类数据结构展示(列表、表格、树形),能够高效处理数据与界面

菜一头包的博客 1989

Postgresql SSL 链接设置

1进入PostgresSQL安装目录, 进入子目录data 2)su postgres 3)openssl req -new -text -out server.req 4)openssl rsa -in privkey.pem -out server.key 5)rm privkey.pem 6)openssl req -x509 -in server...

weixin_34015566的博客 320

终端效率神器:Tmux 安装与使用全指南

终端效率神器:Tmux 安装与使用全指南

身在被窝_心在编程 1360

手把手教你用微信小程序实现智能硬件音视频通话(含Linux/RTOS适配)

本文详细介绍了如何利用微信小程序硬件框架(WMPF)和音视频SDK,在智能硬件(包括Linux与RTOS设备)上实现音视频通话功能。文章从架构设计、设备端SDK集成、小程序VOIP插件开发到跨平台调试与性能优化,提供了全链路实战指南,帮助开发者打通微信小程序与嵌入式设备间的实时音视频通信。

ooo22的博客 330

postgresql是SSL连接java_PostgreSQL 用 SSL 进行安全的 TCP/IP 连接

PostgreSQL 有一个内建的通过SSL进行加密的客户端/服务器端的通讯,这样可以增加安全性。这个特性要求在客户端和服务器端都安装 OpenSSL 并且在编译 PostgreSQL 的时候打开(参阅章14)。当编译了 SSL 进去以后,可以通过将 postgresql.conf中的 ssl 设置为 on 打开 PostgreSQL 服务器的 SSL 支持。当开始 SSL 模式后,服务器将在数据...

weixin_34416354的博客 889

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 661

java ssl 双向认证_java实现 SSL双向认证

实现技术:JSSE(Java Security Socket Extension)是Sun为了解决在Internet上的实现安全信息传输的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,可以在Client和Server之间通过TCP/IP协议安全地传输数据。为了实现消息认证。Server需要:1)KeySt...

weixin_31437361的博客 1616

fragstats:景观指数趋势分析

优快云@_养乐多_本文将介绍景观指数时间序列的趋势分析,包括趋势类型、斜率、截距等。以及景观指数突变分析所用的软件和 python 代码。结果如下图所示,

养乐多的博客 2861

震惊!用刚发布的GPT-5写研究现状,文献综述写作一整个大逆袭(附步骤+10条AI提示词)

每类分别给出:国内重点(3 条)、国外重点(3 条)、代表性方法(2–3 条)、代表成果(各 1–2 条)、主要问题(2 条)。每个场景给出:技术方案(2–3 种)、研究目标、实际成效/案例、当前挑战(3 点)。指令:基于国内外现状,系统列出当前学界的研究空白、关键未解问题与争议焦点(每项配简要证据/示例),并针对每个空白提出 1–2 条可行的研究方向或方法路径。三、差异与研究空白分析(≥300 字)。对每个小节提供:小标题、中心论点(1 句)、拟写要点(3–5 条)、建议引用类型(理论/方法/案例)。

qq_64378896的博客 115

java双向认证_SSL双向认证java实现

本文通过模拟场景,介绍SSL双向认证的java实现默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章中对SSL的原理,不做详细的介绍。如果有这个需要,那么通过GOOGLE,可以搜索到很多这样的文章。模拟场景:Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。实现技术:JSSE(Java Sec...

weixin_31975689的博客 829

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java实现SSL双向认证的方法

本文实例讲述了Java实现SSL双向认证的方法。分享给大家供大家参考,具体如下: 我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法。这个就是所谓的SSL单向认证。 但是实际中,我们有可能还会验证客户端是否符合要求,也就是给我们每个用户颁发一个证书,比且每个数字证书都是唯一的,不公开的。这样就能通过这个数字证书保证当前访问我服务器的...

moonpure的专栏 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java ssl 双向认证_Java实现SSL双向认证的方法

本文实例讲述了Java实现SSL双向认证的方法。分享给大家供大家参考,具体如下:我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法。这个就是所谓的SSL单向认证。但是实际中,我们有可能还会验证客户端是否符合要求,也就是给我们每个用户颁发一个证书,比且每个数字证书都是唯一的,不公开的。这样就能通过这个数字证书保证当前访问我服务器的这个用户...

weixin_33295463的博客 390

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java ssl 双向认证_SSL双向认证java实现

本文通过模拟场景,介绍SSL双向认证的java实现默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章中对SSL的原理,不做详细的介绍。如果有这个需要,那么通过GOOGLE,可以搜索到很多这样的文章。模拟场景:Server端和Client端通信,需要进行授权和身份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。实现技术:JSSE(Java Sec...

weixin_39604276的博客 296

SSL双向认证java实现(转)

原文:http://www.51testing.com/?uid-257506-action-viewspace-itemid-155640 本文通过模拟场景,介绍SSL双向认证的java 实现 默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章 中对SSL的原理,不做详细的介绍。 如果有这个需要,那么通过GOOGLE,可以搜索到很多这样的文章。 模...

JackieLiu 665

java ssl 双向认证_Java实现 SSL双向认证

我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法。这个就是所谓的SSL单向认证。但是实际中,我们有可能还会验证客户端是否符合要求,也就是给我们每个用户颁发一个证书,比且每个数字证书都是唯一的,不公开的。这样就能通过这个数字证书保证当前访问我服务器的这个用户是经过服务器认可的,其他人不可访问。双向认证 从第一个层面上 确保了服务器 与客...

weixin_30124601的博客 355
上一篇: 用Java 开发 WebService Axis简单实例
下一篇: 为高级 JSSE 开发人员定制 SSL(一)
jspwind
博客等级 码龄20年 19粉丝 23原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值