原理:
要想保证网络通信的安全,我们第一反应就是给传输的数据加密,这也是现行安全传输通用的模式。但在传统加密方式(单密钥,对称加密)下,密钥不可避免的要被传送于网络节点之间,(除非是写死到各个节点中,不过那样就没有任何灵活性和普适性),在一定强度的网络攻击下,这种加密方式是很脆弱的。
SSL
的出现解决了这个难题,理解SSL
的关键是理解非对称加密的含义。
在对称加密的情况下,源数据A,通过使用密钥B,加密成为密文C。任何人,只要获得了密钥B,就能够对截获的密文C解密,还原出源数据A。(依靠"算法安全"远不如依靠"密钥安全");在非对称加密中,出现了“密钥对”的概念,即有一个公共密钥(公钥)和一个私有密钥(私钥),经公钥加密的密文只能由私钥解密,反过来,经私钥加密的密文只能由公钥解密。这是个重要的特性(数学原理可参考RSA算法),下面的模拟https通信流程说明了这一特性的重要。
1,客户端向服务端发出请求,服务端将公钥(以及服务端证书)响应给客户端;
2,客户端接收到服务器端端公钥与证书,验证证书是否在信任域内,不信任则结束通信,信任则使用服务端传过来的公钥生成一个“预备主密码”,返回给服务端。
3,服务端接收客户端传过来的“预备主密码”密文,使用私钥解密。非对称加密的安全性也就在于此了,第三方无法获取到“预备主密码”的明文,因为除了服务端,其他任何人是没有私钥的。
4,双方使用“预备主密码”生成用于会话的“主密码”。确认后,结束本次SSL
握手,停止使用非对称加密。
5,双方使用“主密码”对称加密传输数据,直到本次会话结束。
总结整个流程:先采用非对称加密模式,保证“主密码”只被通信双方获知,而后使用传统的对称加密方式通信,这样,保证了密钥安全(即“主密码”)就等于保证了数据安全。之所以建立安全连接后,转而使用对称加密,是因为非对称加密的运算量很大,用于“常态”的数据通信十分低效。
以上描述的仅是SSL
协议中加密通信的原理,没有涉及到证书验证,以及客户端,服务端模式。
实现:
JDK里面自带了一个密钥生成工具keytool,可以通过它生成SSL
通信需要的密钥对,或者生成自签名的证书。所有密钥对或者签名证书都是存放在“keystore”密钥仓库中,由它来管理。
下面结合具体例子说明:(java
WEB容器:tomcat 5.0)
1,生成服务端密钥仓库,
keytool -genkey -alias svrkey -keyalg RSA -keystore d:\svr.jks -validity 365
"alias"是生成的密钥别名,密钥的导入导出都需要由别名来定位。
"keystore"生成的密钥仓库
"validity"生成密钥仓库的有效期(天)
随后会要求输入密钥仓库入口密码,比如: lostsky_11
输完密码后,接着会要求一系列的输入,无非是单位,所在地区之类的信息,
但是第一项很重要!为输入服务端域名或IP,如: 192.168.1.3或www.591pic.com
必须与服务器域名或IP相同,否则SSL
连接无法建立(这也是SSL
通信验证的一部分)
2,在tomcat_home/conf/server.xml中配置:
找到ssl
通信配置那一段,加入:
keystoreFile="d:\svr.jks" keystorePass="lostsky_11"
服务器启动时会从中寻找用于建立ssl
连接的密钥
3,导出服务端证书
keytool -export -alias svrkey -file d:\svr.cer -keystore d:\svr.jks
"alias"为想导出的密钥的别名,"file"为导出的证书,"keystore"为存储着导出密钥的仓库
4,生成客户端密钥仓库
keytool -genkey -alias clientkey -keyalg RSA -keystore d:\client.jks
会要求输入仓库密码:如:midsky
5,将服务端证书导入到客户端密钥仓库
keytool -import -file d:\svr.cer -keystore d:\client.jks
会要求输入客户端密钥仓库的密码:如上是:midsky
这样服务端的密钥仓库就在tomcat部署完毕了,
6,在客户端,每次访问服务端之前,加入
"System.setProperty("javax.net.ssl
.trustStore","d:\\client.jks");
System.setProperty("javax.net.ssl
.trustStorePassword","midsky"); "
就把服务端证书添加到了客户端的信任域中,能够完成ssl
通信。
注:ssl
通信主要验证三个方面:
a, 证书是否可信(第6步)
b, 证书是否过期(第1步:validity)
c, 证书地址是否和当前访问地址符合(第1步)
客户端添加信任域还有编程的动态方法,但是那样会降低通信的安全性,对于证书相对固定的服务,不建议使用。
以上是客户端对于服务端的验证,这也是SSL
默认的实现方式。在这种方式下,每次通信时,发起请求方(如PC中的BROWSER)都会验证响应方(如某个WEB服务端)的证书是否在己方信任域中,对方的证书是否过期,对方的域名或IP,是否与信任域中证书记载的一致;不符合其中任何一项,通信都会被拒绝。但反过来,响应方是不对请求方做任何验证的。所以有些需要双向验证的服务(比如某些服务只能对特定的拥有证书的用户开放),就需要添加客户端证书,由服务端来验证了,原理和实现与默认模式类似。
分享到:
相关推荐
SSL的工作原理涉及到多个关键概念和技术。 首先,SSL的核心在于加密,它使用了公钥加密算法,如RSA,这是一种非对称加密技术。在公钥密码系统中,每个用户有一对密钥:公钥和私钥。公钥是可以公开的,用于加密数据...
这主要通过公钥和私钥加密技术实现,公钥用于加密,私钥用于解密,确保只有收发两端能读取信息。 在HTTPS(HTTP over SSL/TLS)中,SSL/TLS被用于HTTP协议,为网页浏览等应用提供安全的通信环境。HTTPS可以防止中间...
实现基于SSL的身份认证和访问控制的原理,实际上是建立在网络通信双方之间的安全信任机制之上。通过技术手段确保身份的真实性和信息传输的机密性、完整性和不可否认性,再通过不同的授权和认证方法实现细粒度的访问...
但了解底层的SSL原理和实现对于理解和调试问题至关重要。 【SslClient-master】压缩包文件: 这个文件名暗示了可能包含的是`SslClient`项目的源代码仓库。通常,一个Java项目可能包含以下部分: 1. `pom.xml`:...
本篇文章将深入探讨Android平台上的SSL证书验证原理,包括SSL证书交换流程、SSL握手与验证过程以及数字证书、公钥和密钥的管理。 #### 二、SSL证书交换流程 当Android应用尝试访问一个HTTPS站点时,会发起一个SSL...
通过对这些代码的分析和学习,可以更好地理解 Netty 中的 SSL/TLS 双向认证工作原理。 总结,Netty 提供了强大而灵活的工具来实现 SSL/TLS 安全通信,包括双向认证。通过正确配置 `SslContext`、处理通道处理器和...
### SSL中间人攻击原理与防范 #### 一、SSL协议分析 ##### 1.1 协议概述 SSL(Secure Socket Layer),即安全套接层协议,是由Netscape公司开发的安全通信协议,用于保障互联网上的数据传输安全。SSL协议通过提供...
SSL加密通信的核心原理在于公钥和私钥的使用,这是一种非对称加密技术。公钥是公开的,任何人都可以获取;私钥则是保密的,仅由数据接收方持有。当客户端(如浏览器)与服务器进行通信时,服务器会提供其公钥,...
#### 四、SSL协议的工作原理 在SSL协议中,客户端和服务器之间的安全通信主要包括以下几个步骤: 1. **初始化SSL库**:在使用OpenSSL之前,需要初始化SSL库。 ```c int SSL_library_init(void); ``` 2. **选择...
总的来说,实现Netty服务端支持SSL协议以实现WebSocket的WSS协议,需要理解SSL/TLS的工作原理,熟悉Java的SSL编程,以及掌握Netty框架的基本用法。同时,心跳机制的实现也是保持WebSocket连接稳定的关键。
首先,我们需要了解SSL/TLS的基本工作原理。SSL/TLS协议主要由两部分组成:握手协议和记录协议。握手协议用于建立连接,包括身份验证、协商加密算法和交换会话密钥;记录协议则负责对数据进行加解密和完整性校验。 ...
Apache SSL(Secure Sockets Layer)模块是Apache Web服务器的一个扩展,用于提供HTTPS服务,实现Web通信的加密和安全传输。SSL技术对于保护敏感数据,如网上银行交易、登录凭据和个人信息,至关重要。下面将详细...
总的来说,理解并掌握MSP430F系列Bootloader的原理和实现方法,不仅能够帮助我们设计出可靠的嵌入式系统,还能实现远程固件更新,极大地提高了产品维护的灵活性和效率。在实际项目中,开发者还需要考虑功耗、安全性...
Tomcat作为一款流行的Java应用服务器,支持SSL配置以实现HTTPS协议,提供加密通信和服务器身份验证。本教程将深入讲解如何在Tomcat中配置SSL,以便在开发和部署Java Web应用时,能够提供安全的数据交换环境。 首先...
总的来说,理解 SSL/TLS 的工作原理以及如何在 Java 中实现它至关重要,尤其是在涉及敏感信息传输的应用中。通过这个指南,你应该能够开始搭建自己的 SSL/TLS 连接,但记住,错误处理和安全性检查是任何 SSL 实施的...
SSL/TLS(Secure Socket Layer/Transport Layer Security)协议是网络安全领域中的重要组成部分,主要用于保障互联网通信的安全性。...了解并掌握SSL/TLS认证原理对于理解和保护网络安全至关重要。
SSL证书在线生成系统源码是实现网站安全的重要工具,它基于公钥基础设施(PKI)原理,用于在互联网上建立安全的数据传输通道。本系统允许用户通过在线方式申请并生成SSL证书,简化了传统SSL证书获取流程,提升了用户...
1.2 SSL 工作原理 SSL 协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同的 SSL 协议版本包括 SSL 2.0、SSL 3.0 和 TLS 1.0 等。TLS ...
SSL证书是实现SSL加密的关键组件,它包含了一个网站的公钥和一些验证信息,如域名、组织名称和证书颁发机构(CA)的签名。浏览器和服务器通过交换证书来建立安全连接。用户可以通过检查证书信息判断网站是否可信。 ...