SSL协议

简介

  SSL (Secure Sockets Layer 安全套接层)是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信。SSL 协议既用到了公钥加密技术(握手)又用到了对称加密技术(传输数据).在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。SSL 协议的版本 1 和 2 只提供服务器认证。版本 3 添加了客户端认证,此认证同时需要客户端和服务器的数字证书。

SSL 握手

  SSL 连接总是由客户端启动的。在SSL 会话开始时执行 SSL 握手。此握手产生会话的密码参数。关于如何处理 SSL 握手的简单概述,如下图所示。此示例假设已在 Web 浏览器 和 Web 服务器间建立了 SSL 连接。

图 SSL的客户端与服务器端的认证握手 

HTTPS握手过程

一、互报姓名,各自介绍

(1) 客户端发送“您好”消息,包含如 SSL 的版本、支持的加密方法(加密套件)和支持的数据压缩方法(哈希函数)。也包含 28 字节的随机数。

(2) 服务器以“您好”消息响应,此消息包含加密方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另一个随机数。 
  注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

二、互传证书,互相验证

(3) 服务器发送其证书----SSL数字证书。(服务器使用带有 SSL 的 X.509 V3 数字证书。) 
      如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要被客户端认证,则客户端会发出“数字证书请求”消息。在响应 “数字证书请求”消息中,服务器发出支持客户端数字证书类型的列表和可接受的CA的名称。

(4) 服务器发出“您好完成”消息并等待客户端响应。

(5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“您好”消息参数是否可以接受。 
  如果服务器要求客户端是可信的,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发送“没有数字证书”警告。此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。

  如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。通过验证此消息的签名,服务器可以显示验证客户端数字证书的所有权。 
   注意如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且握手将失败。

三、客户端生成对称密钥,服务器接收对称密钥

(6) 客户端发送“客户端密钥交换”消息。此消息包含 pre-master secret (一个用在对称加密密钥生成中的 46 字节的随机数字),和 消息认证代码 ( MAC )密钥(用服务器的公用密钥加密的)。

(7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret ,其中将派生出所有用于加密和消息认证的密钥。然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。客户端发出的下一个消息(“未完成”的消息)为用此密码方法和密钥加密的第一条消息。

(8) 服务器以自己的“更改密码规范”和“已完成”消息响应。

四、用对称密钥加密数据并传输

(9) SSL 握手结束,且可以用对称密钥加密的应用程序数据,然后发送。

加密解密(4)SSL协议及HTTPS握手过程的更多相关文章

  1. Http协议三次握手过程

    Http协议三次握手过程   TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  2. HTTPS协议,SSL协议及完整交互过程

    文章转自 https://blog.csdn.net/dfsaggsd/article/details/50910999 SSL 1.        安全套接字(Secure Socket Layer ...

  3. 加密解密(5)SSL形象比喻

    转自: http://blog.csdn.net/cloverphp/article/details/11737433 前言: 关于公钥,私钥请看前几篇文章   SSL 协议既用到了公钥加密技术(握手 ...

  4. SSH协议、HTTPS中SSL协议的完整交互过程

    1.(SSH)公私钥认证原理 服务器建立公钥:每一次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*的文件 客户端通过ssh工具进行连接,如Xshell,SecureCRT 服 ...

  5. HTTPS握手过程

    HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密.具体是如何进行加密,解密,验证的,且看下图,下面的称为一次握手. 1. 客户端发起HT ...

  6. HTTPS 握手过程理解

    转自https://www.jianshu.com/p/a3a25c6627ee https://blog.csdn.net/xingtian713/article/details/11953057 ...

  7. 基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good

    上周帮一个童鞋做一个数字认证的实验,要求是编程实现一个基于X.509证书认证的过程,唉!可怜我那点薄弱的计算机网络安全的知识啊!只得恶补一下了. 首先来看看什么是X.509.所谓X.509其实是一种非 ...

  8. Http协议三次握手过程

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  9. TCP 协议三次握手过程解析带实例

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

随机推荐

  1. Linux性能诊断工具

    vmstat:虚拟内存状况 –swpd   free  buff  cache   si  so   in   cs 參考:http://www.cnblogs.com/ggjucheng/archi ...

  2. KindEditor使用过程中,用JQ提交表单时,获取不到编辑器的内容

    首先要说明的是.在使用提交button直接提交时.编辑器的内容是能够正常获取的,而使用 jq或js ,如$("#form").submit(),提交时,则编辑器的内容是无法获取的. ...

  3. 2016/2/25 html+css学习资源

    html+css学习资源 1.Position is Everything,一个描述和展示在各种浏览器中发现的bug,并提供css解决方法的网站,顶! 2.一个国外的网页设计论坛 3.http://c ...

  4. while语句字符串的基本操作

    1,编码:对现在通用文字编码成计算机文字,便于储存,传递,交流. 最早的计算机编码是ACSII美国人创建的,包含英文字母,数字,以及特殊符号.总共是128个码位:2**7,因为计算机的底层只能识别:& ...

  5. 【bzoj2753】[SCOI2012]滑雪与时间胶囊

    #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> # ...

  6. 20170212-备份ABAP程序

    把生产机上所有后续开发的CBO程序都备份下来.以备急用! 用过2种方法:1.写BDC程序,模拟 TCODE:SE38 -->Program --> Utilities(M)-->Mo ...

  7. Java之jdk命令行工具详解

    JPS---虚拟机进程状况工具 常用的参数: -l 输出Java应用程序的main class的完整包 -q 仅显示pid,不显示其它任何相关信息 -m 输出传递给main方法的参数 -v 输出传递给 ...

  8. spring-boot快速搭建解析

    创建方式: 1.在File菜单里面选择 New > Project,然后选择Spring Initializr: 2.使用maven直接构建,添加依赖. 1 2 3 4 pom.xml:Mave ...

  9. React VSCode插件

    可以安装2个插件,一个是 Atuo Rename Tag 一个 Auto Close Tag 这样就好都了

  10. (转)Repeater中增加序号自增列

    <%# Convert.ToString(Container.ItemIndex+)%> 当Repeater空为时,提示没有数据... <FooterTemplate> < ...