最近公司有项目组提到这样的需求,需要一个基于TCPIP协议的双向ssl加密中转平台,类似于信安世纪的bisafe的简化版,一端(A)搭建在企业那边,另一端(B)搭建在公司内部,要求企业那边代码和公司这边的代码都不改动。可以修改配置。A端和B端现在就是socket通讯的。目前只有B端向A端发请求,B端接收响应,暂时不存在A端主动发起请求。
整理了一下思路,需要在B端部署一个SocketServer,接收公司项目发出的请求,我取名叫BankSocketServer,BankSocketServer收到请求后将内容发送给A端的SSLSocketServer,所以需要在A端部署一个SSLSocketServer,SSLSocketServer接收到请求后解密,然后将内容发给企业。这样就实现了B端不改代码,只要修改SocketServer服务器的地址和端口,而且A端和B端的通讯是加密的,并且A端也不用做任何修改。
然后我做了三件事情。
第一件事情是了解什么是单向认证,什么是双向认证。下面的内容是从网上整理的,我觉得比较好理解。
单向认证:(私钥加密/公钥解密,公钥加密/私钥解密)
客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。
双向认证:
(1)客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端
(2)服务器接到消息后用首先用客户端证书把消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端
(3)客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密,然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,
(4)到服务器端首先用客户端传来的证书对消息进行解密,确保消息是这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。
第二件事情是怎么用java实现SSL双向认证。
互联网有很多资料,因为时间比较着急,就直接百度了,附一个链接:http://avery-leo.iteye.com/blog/276096
第三件事情就是写代码了,花了一天多时间,其实核心代码并不复杂,也不多,时间比较紧,但我还是想尽量把程序写好,写得通用,方便扩展。附件里有代码。有单元测试。可以直接运行,在此为了备忘。
相关推荐
实现SSL安全通讯涉及到配置服务器端和客户端支持SSL。服务器端需要配置SSL证书和密钥,客户端则需要信任服务器的证书。在OpenSSL命令行工具中,我们可以使用`s_server`和`s_client`模拟服务器和客户端进行SSL通信:...
在本文中,我们将探讨如何设计和实现一个模拟QQ通讯软件,主要关注其核心技术——使用C#语言进行编程。C#是一种由C++、Visual Basic和Java影响而产生的编程语言,它与VB.Net共享很多特性,如相同的库和底层代码编译...
采用springboot的基于Netty的SSL加密PKI认证通信,里面模拟了Netty的客户端和服务端的证书认证规则,同时分为单向认证和双向认证,信任证书链并对RA颁发的证书来进行验签,实现了双向和单向加密通信,保障了数据的...
【标题】: "吉林大学软件学院2020C++课程设计——模拟即时通讯系统实现" 这个项目旨在通过C++编程语言,让学生掌握即时通讯系统的原理与实现技术。即时通讯系统,如QQ、微信等,是日常生活中不可或缺的通信工具,...
QQ,作为中国最流行的即时通讯软件之一,其背后的通信机制虽然复杂,但我们可以用P2P方式来模拟其即时消息通讯的基本流程,以理解P2P在即时通讯中的应用。 P2P即时通讯的核心是建立对等节点之间的直接连接。在QQ中...
标题中的“不需要.NET框架的简单通讯软件”表明这是一款能够实现通信功能的软件,而其独特之处在于它不依赖微软的.NET Framework环境。这在某些情况下非常有用,因为.NET框架并非所有计算机都预装,安装它可能会占用...
在IT领域,P2P(Peer-to-Peer)通信是...以上就是基于Delphi实现P2P方式模拟QQ即时消息通讯的主要步骤和技术要点。实际开发中,还需要考虑错误处理、性能优化、用户体验等因素,以打造稳定、高效、安全的即时通讯系统。
【模拟QQ源码(Java版)】是一个基于Java编程语言实现的项目,旨在模拟QQ的基本功能,让开发者能够学习和理解即时通讯软件的设计原理和实现方法。这个项目可以帮助初学者和有经验的开发者深入理解网络通信、多线程、...
8. **安全性**:模拟客户端也需要注意安全问题,比如防止中间人攻击、保护用户隐私等,可能需要实现SSL/TLS加密,以及合理的错误处理机制。 9. **持续更新**:QQ客户端的协议和服务可能会定期更新,模拟客户端需要...
为了保证用户信息安全,登录过程通常涉及身份验证机制,如哈希加盐算法对密码进行加密存储,以及SSL/TLS协议保障数据在传输过程中的安全性。此外,防止SQL注入和XSS攻击也是网络安全的重要方面,这需要在编写后端...
在信息技术领域,模拟QQ视频聊天程序是一个常见的项目,旨在复制QQ(中国最流行的即时通讯软件之一)的核心视频聊天功能。通过使用.NET框架和C#编程语言,开发者可以创建一个类似QQ的应用,提供用户间进行实时视频...
VB.NET中的Windows Forms或WPF可以用来创建用户界面,模拟QQ的聊天窗口、联系人列表、状态指示器等功能。对于复杂的用户界面元素,如好友列表,可以利用DataGridView或TreeView控件展示。 即时通讯的核心功能之一是...
测试时,可以使用模拟客户端工具或者直接开发简单的测试用例,验证服务器功能是否正常。 总之,52im即时通讯系统的源码提供了全面的聊天功能实现,对理解即时通讯系统的架构和原理有着极大的学习价值。开发者可以...
7. **安全通信**:SSL/TLS协议可确保数据在传输过程中的安全性,防止窃听和篡改。 8. **负载均衡**:在高流量场景下,服务端可能需要使用负载均衡技术,将请求分发到多个服务器,以提高系统整体性能和可用性。 9. ...
- 加密通信:为了保护用户隐私,通信内容可能需要加密,如使用SSL/TLS协议。 - 用户验证:登录时需要验证用户名和密码,可能涉及哈希算法和盐值。 7. **性能优化** - 缓存策略:为提高效率,可能采用缓存好友...
在本项目中,"Java简单模拟QQ"是一个尝试用Java编程语言实现的简易版即时通讯软件,它包含了QQ的基本功能,如用户注册、登录、聊天、远程协助以及文件传输。以下将详细介绍这些功能的实现原理及其相关的Java技术知识...
7. **GUI设计**:Java Swing或JavaFX库可以用于创建用户界面,模拟QQ的聊天窗口、好友列表、在线状态显示等功能。界面设计需要考虑到用户体验,做到直观易用。 8. **协议实现**:QQ有自己的私有协议,项目可能需要...
9. **安全与加密**:考虑到隐私和数据安全,模拟QQ应采用加密技术对通信内容进行保护,如SSL/TLS协议用于数据传输的加密,以及可能的密码哈希和盐值策略来保护用户账号。 10. **错误处理与异常捕获**:网络编程中,...