- 浏览: 134626 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (130)
- java基础 (9)
- java高级 (19)
- struts2.x (2)
- spring (1)
- hibernate (1)
- jpa (1)
- ibatis (2)
- javascript (4)
- jsp (2)
- sql (9)
- oracle (12)
- extjs (0)
- uml (0)
- 关于面试 (4)
- 常用软件晋级 (5)
- 网络编程 (1)
- XML (1)
- servlet (5)
- jquery (6)
- Tomcat (3)
- Android (17)
- ssl (1)
- c 指针 (0)
- c/c++/oc (3)
- ios (7)
- 设计模式 (0)
- 终端命令 mac (2)
- sqlite3 (1)
- linux (7)
- hadoop (2)
- 特效 (3)
- 架构之路 (2)
- p2p (1)
- 常见问题 (0)
- html (1)
最新评论
-
zaocha321:
建议改一下文章中的错别字。
多线程(二) -
shamusoft:
在iPhone上是采用sqlite进行数据存储是我一种比较习惯 ...
sqlite3 相关操作 -
bear1122ccc:
这是给学习IOS的人打气呀。顶下。
初学ios -
shamusoft:
<Connector className=&qu ...
SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程) -
shamusoft:
去掉拖动ListView带有的黑色背景: and ...
关于加密
SSL协议的工作流程:
服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。
SSL协议的握手过程
为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议。SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密。这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容, 公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥。
SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
双向认证 SSL 协议的具体过程
① 浏览器发送一个连接请求给安全服务器。
② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。
上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。
服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。
SSL协议的握手过程
为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议。SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密。这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容, 公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥。
SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:
①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
双向认证 SSL 协议的具体过程
① 浏览器发送一个连接请求给安全服务器。
② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。
上面所述的是双向认证 SSL 协议的具体通讯过程,这种情况要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有 CA 证书,具体的过程相对于上面的步骤,只需将服务器端验证客户证书的过程去掉,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,就是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用 128 位加密通讯的原因。
评论
1 楼
shamusoft
2012-02-22
<Connector className="org.apache.catalina.connector.http.HttpConneCtor"
port="8443" minProcessors="5" maxProCessors="75"
enableLookups="true"
acceptCount="10" debug="0" scheme="https" seCure="true">
<Factory className="org.apache.catalina.net.SSLServerSocketFaCtory"
clientAuth="true" keystoreFile="conf/mykeystore/.keystore"
keystorePass="12345678" protoCol="TLS"/>
</ConneCtor>
port="8443" minProcessors="5" maxProCessors="75"
enableLookups="true"
acceptCount="10" debug="0" scheme="https" seCure="true">
<Factory className="org.apache.catalina.net.SSLServerSocketFaCtory"
clientAuth="true" keystoreFile="conf/mykeystore/.keystore"
keystorePass="12345678" protoCol="TLS"/>
</ConneCtor>
发表评论
-
maven 学习参考文章
2015-02-10 09:06 558maven环境快速搭建 http://www.cn ... -
用struts 包控制权限的文章
2015-01-09 09:23 583http://www.cnblogs.com/Johness/ ... -
IE 兼容模式 quirks 网页变形
2014-11-27 23:14 673http://www.cnblogs.com/0000/ar ... -
oracle 日期操作
2014-10-16 16:53 637Oracle 获取当前日期及日期格式 获取系统日期: ... -
freemark hellword
2014-09-11 20:32 9471、所需的材料: 主料: myeclipse(我用的版 ... -
学习FreeMaker
2014-04-10 16:41 617原文地址 :http://tailshe ... -
JSONOBJ 转换对象
2013-12-22 13:13 998import java.lang.reflect.Field ... -
p2p 企业信贷 UML 跨行清算
2013-12-07 23:09 617p2p 银行业务 http://blog.csdn.net ... -
glassfish 集群
2013-12-05 14:35 749感谢猫咪文章,在此做 ... -
c语言的指针
2012-02-27 09:08 809C语言中的精华是什么,答曰指针,这也是C语言中唯一的难点。 C ... -
本地域名解析操作步骤:
2012-02-22 09:40 01.打开C:\WINDOWS\system32\drive ... -
android httpclient https 单向连接tomcat
2012-02-08 17:01 1683双向篇还未实现,先记录单向验证方式。? 一 Android直接 ... -
关于加密
2011-12-27 14:01 985keytool -genkey -alias shamusof ... -
jdk1.5新特性 增强for循环
2011-06-03 06:52 842[code="java"] ... -
用反射实现通用Dao
2011-05-26 16:56 1432public class MySession { /** ... -
反射泛型注解
2011-05-26 07:47 1643一、反射 1. 一段java代码在程序运行期间会经历三个阶段 ... -
代理实现过滤器例子
2011-05-26 07:29 918package cn.itcast.proxy; imp ... -
动态代理 测试代码
2011-05-26 06:25 709import java.lang.reflect.Constr ... -
工厂模式
2011-05-10 10:39 653分析:工厂模式 工厂模式目的就是解耦。解耦目的是为了一个类的 ...
相关推荐
SSL双向认证握手过程详解 SSL双向认证握手过程是SSL/TLS协议中的一种身份验证机制,用于确保客户端和服务器之间的通信安全。本文将详细介绍SSL双向认证握手过程的每个步骤,并解释相关的数据结构和加密算法。 第一...
2. **SSL握手层协议**:主要用于协商加密算法、加密密钥等参数,以及进行身份认证。握手协议确保在实际数据传输前完成这些准备工作,从而保证应用协议数据的安全性。 #### 四、SSL协议的应用 - **Web安全**:最...
#### 二、SSL握手过程详解 ##### 1. ClientHello 客户端首先向服务器发起连接请求,发送一条`ClientHello`消息。该消息包含客户端支持的各种安全设置,比如它支持的加密算法、压缩方法、TLS版本等。此外,客户端还...
### SSL协议详解 #### 密码学基础 **密码学**是信息安全领域的核心科学,它致力于研究如何将信息编码成看似无意义的形式,确保信息在传输过程中不被未授权者解读。这一领域主要包括以下几个概念: - **明文(plain...
为了更好地理解SSL握手协议的工作原理,我们可以参考以下示例场景: **A:客户端** **B:服务器端** 1. A告诉B:“我想和你安全地通话,我支持的加密算法有DES、RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA...
SSL协议的工作流程主要包括以下几个步骤: 1. 握手阶段:客户端与服务器互相发送握手信息,包括版本信息、加密套件列表、随机数等,以便协商共同支持的加密算法和协议版本。 2. 证书交换:服务器发送其数字证书,...
SSL(Secure Sockets Layer,安全套接层)是一种用于实现互联网上信息的安全传输协议,它在客户端和服务器之间建立了一条加密的通信通道,保证了数据传输的安全性、完整性和私密性。SSL的工作原理主要涉及到以下几个...
Java HTTPS SSL 实例详解 一、HTTPS 简介 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的 HTTP 协议,通过在 HTTP 和 TCP 之间添加一个安全层(SSL/TLS),使得数据传输更加...
#### 二、SSL/TLS 协议中的双向认证流程 1. **客户端向服务器发起连接请求**:客户端首先发送一条 SSL 握手消息,其中包括客户端支持的协议版本列表、加密套件等信息。 2. **服务器回应并发送自己的证书**:服务器...
#### 二、SSL握手协议流程 SSL握手协议是实现SSL连接的关键步骤,主要包括以下几个阶段: 1. **客户端发送ClientHello消息**:客户端发送包含SSL版本号、支持的加密算法等信息。 2. **服务器发送ServerHello消息**...
内容概要:本文档详细介绍了 Apache HTTP 服务器的 HTTPS 配置过程,包括系统配置要求、安装流程、SSL 握手协议、单向和双向认证配置、自建根证书及其签署方法等。主要内容涵盖了从硬件和软件的要求,到具体的操作...
SSL/TLS协议包含记录协议和握手协议两个层次,记录协议负责数据封装、压缩和加密,而握手协议则处理身份认证、算法协商和密钥交换。 在实际应用中,SSL/TLS协议有两种认证模式:单向认证和双向认证。单向认证中,...
《基于OpenSSL的SSL客户端与服务器端编程实例详解》 ...通过深入研究这个项目,开发者不仅可以理解SSL协议的工作原理,还能掌握无阻塞和异步通信的实现技巧,这对于构建安全、高效的网络应用至关重要。
### 双向认证下的SSL握手协议详解 #### 标题解析 标题“SSL_handshake_with_two_way_authentication_with_certificates”直译为“采用证书的双向认证下的SSL握手”。这一标题明确指出本文将聚焦于SSL(Secure ...
HTTPS协议的数据传输前会被加密,只有目标服务器才能解密,从而保护了数据的安全性和完整性。 - **SSL**(Secure Sockets Layer): 由网景公司设计并被IETF标准化为RFC6101中的3.0版本,用于加密HTTP通信,保障数据...
- SSL握手过程包括:客户端发送版本和加密信息,服务器响应并发送证书,客户端验证证书并发送预主密钥,服务器解密并生成会话密钥,最后双方通知对方使用会话密钥进行加密通信。 二、Tomcat实现SSL配置 **第一步:...
### SSL基本知识详解 #### 一、SSL与HTTPS概述 **SSL**(Secure Sockets Layer,安全套接层协议)是一种用于确保互联网通信安全性的协议。它通过在客户端与服务器之间建立加密连接来保护数据不被窃听或篡改。随着...
### HTTPS传输协议原理详解 #### 一、引言 随着互联网技术的发展,网络安全问题日益凸显。为了确保数据的安全传输,HTTPS(Hyper Text Transfer Protocol Secure,超文本传输安全协议)成为了现代网络通信中不可或...
《Noise-C:纯C语言实现的Noise协议详解》 Noise-C是 Noise 协议的一个纯C语言实现,它为安全通信提供了坚实的基础。 Noise 协议是一种简洁、灵活且易于理解的加密通信协议,旨在简化安全套接层(SSL/TLS)等复杂...
【TCP协议详解与五子棋联机对弈】 TCP(Transmission Control Protocol,传输控制协议)是互联网上应用最为广泛的一种网络协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过三次握手建立连接...