背景介绍   

近期在看《password学与网络安全》相关的书籍,这篇文章主要具体介绍一下著名的网络安全协议SSL。

在開始SSl介绍之前,先给大家介绍几个password学的概念和相关的知识。

    1、password学的相关概念

password学(cryptography):目的是通过将信息编码使其不可读,从而达到安全性。

明文(plain text):发送人、接受人和不论什么訪问消息的人都能理解的消息。

密文(cipher text):明文消息经过某种编码后,得到密文消息。

加密(encryption):将明文消息变成密文消息。

解密(decryption):将密文消息变成明文消息。

算法:取一个输入文本,产生一个输出文本。

加密算法:发送方进行加密的算法。

解密算法:接收方进行解密的算法。

密钥(key):仅仅有发送方和接收方理解的消息

对称密钥加密(Symmetric Key Cryptography):加密与解密使用同样密钥。

非对称密钥加密(Asymmetric Key Cryptography):加密与解密使用不同密钥。

    2、相关的加密算法介绍

DES算法即数据加密标准,也称为数据加密算法。加密步骤例如以下:

在SSL中会用到分组DES、三重DES算法等加密算法对数据进行加密。当然能够选用其它非DES加密算法,视情况而定,后面会具体介绍。

3、密钥交换算法

使用对称加密算法时,密钥交换是个大难题,所以Diffie和Hellman提出了著名的Diffie-Hellman密钥交换算法。

Diffie-Hellman密钥交换算法原理:

(1)Alice与Bob确定两个大素数n和g,这两个数不用保密

(2)Alice选择还有一个大随机数x,并计算A例如以下:A=gx mod n

(3)Alice将A发给Bob

(4)Bob  选择还有一个大随机数y,并计算B例如以下:B=gy mod n

(5)Bob将B发给Alice

(6)计算秘密密钥K1例如以下:K1=Bx mod n

(7)计算秘密密钥K2例如以下:K2=Ay mod n

  K1=K2,因此Alice和Bob能够用其进行加解密

RSA加密算法是基于这种数学事实:两个大素数相乘easy,而对得到的乘积求因子则非常难。加密步骤例如以下:

(1)选择两个大素数P、Q
(2)计算N=P*Q
(3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子
(4)选择私钥(解密密钥)D,满足例如以下条件:
(D*E) mod (P-1)(Q-1)=1
(5)加密时,明文PT计算密文CT例如以下:
CT=PTE mod N
(6)解密时,从密文CT计算明文PT例如以下:
PT=CTDmodN 这也是SSL中会用一种密钥交换算法。

3、散列算法:

主要用于验证数据的完整性,即保证时消息在发送之后和接收之前没有被篡改对于SSL中使用到的散列算法有MD5、SHA-1。

4、数字证书:

数字证书事实上就是一个小的计算机文件,其作用类似于我们的身份证、护照,用于证明身份,在SSL中,使用数字证书来证明自己的身份,而不是伪造的。

5、简单的总结:

在SSL中会使用密钥交换算法交换密钥;使用密钥对数据进行加密;使用散列算法对数据的完整性进行验证,使用数字证书证明自己的身份。好了,以下開始介绍SSL协议。

SSL介绍:

安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Webserver之间安全交换信息的协议,提供两个主要的安全服务:鉴别与保密。

SSL是Netscape于1994年开发的,后来成为了世界上最著名的web安全机制,全部基本的浏览器都支持SSL协议

眼下有三个版本号:2、3、3.1,最经常使用的是第3版,是1995年公布的。

SSL协议的三个特性

① 保密:在握手协议中定义了会话密钥后,全部的消息都被加密。

② 鉴别:可选的client认证,和强制的server端认证。

③ 完整性:传送的消息包含消息完整性检查(使用MAC)。

SSL的位置

SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并添加�自己的SSL头。

SSL的工作原理

握手协议(Handshake protocol)

记录协议(Record protocol)

警报协议(Alert protocol)

1、握手协议

握手协议是客户机和server用SSL连接通信时使用的第一个子协议,握手协议包含客户机与server之间的一系列消息。SSL中最复杂的协议就是握手协议。该协议同意server和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在SSL记录中发送的数据。握手协议是在应用程序的传输数据之前使用的。

每一个握手协议包括下面3个字段

(1)Type:表示10种消息类型之中的一个

(2)Length:表示消息长度字节数

(3)Content:与消息相关的參数

握手协议的4个阶段

1.1建立安全能力

SSL握手的第一阶段启动逻辑连接,建立这个连接的安全能力。首先客户机向server发出client hello消息并等待server响应,随后server向客户机返回server hello消息,对client hello消息中的信息进行确认。

    Client hello消息包含Version,Random,Session id,Cipher suite,Compression method等信息。

ClientHello 客户发送CilentHello信息,包括例如以下内容:

(1)client能够支持的SSL最高版本

(2)一个用于生成主秘密的32字节的随机数。(等会介绍主秘密是什么)

(3)一个确定会话的会话ID。

(4)一个client能够支持的password套件列表。

password套件格式:每一个套件都以“SSL”开头,紧跟着的是密钥交换算法。用“With”这个词把密钥交换算法、加密算法、散列算法分开,比如:SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(带有RSA数字签名的临时Diffie-HellMan)定义为密钥交换算法;把DES_CBC定义为加密算法;把SHA定义为散列算法。

(5)一个client能够支持的压缩算法列表。

ServerHello server用ServerHello信息应答客户,包含下列内容

(1)一个SSL版本。取client支持的最高版本和服务端支持的最高版本中的较低者。

(2)一个用于生成主秘密的32字节的随机数。(client一个、服务端一个)

(3)会话ID

(4)从client的password套件列表中选择的一个password套件

(5)从client的压缩方法的列表中选择的压缩方法

这个阶段之后,client服务端知道了下列内容:

(1)SSL版本号

(2)密钥交换、信息验证和加密算法

(3)压缩方法

(4)有关密钥生成的两个随机数。

1.2 server鉴别与密钥交换

server启动SSL握手第2阶段,是本阶段全部消息的唯一发送方,客户机是全部消息的唯一接收方。该阶段分为4步:

(a)证书:server将数字证书和到根CA整个链发给client,使client能用server证书中的server公钥认证server。

(b)server密钥交换(可选):这里视密钥交换算法而定

(c)证书请求:服务端可能会要求客户自身进行验证。

(d)server握手完毕:第二阶段的结束,第三阶段開始的信号

这里重点介绍一下服务端的验证和密钥交换。这个阶段的前面的(a)证书 和(b)server密钥交换是基于密钥交换方法的。而在SSL中密钥交换算法有6种:无效(没有密钥交换)、RSA、匿名Diffie-Hellman、临时Diffie-Hellman、固定Diffie-Hellman、Fortezza。

在阶段1过程client与服务端协商的过程中已经确定使哪种密钥交换算法。

假设协商过程中确定使用RSA交换密钥,那么步骤例如以下图:

这种方法中,server在它的第一个信息中,发送了RSA加密/解密公钥证书。只是,由于预备主秘密是由client在下一个阶段生成并发送的,所以第二个信息是空的。注意,公钥证书会进行从server到client的验证。当server收到预备主秘密时,它使用私钥进行解密。服务端拥有私钥是一个证据,能够证明server是一个它在第一个信息发送的公钥证书中要求的实体。

其它的几种密钥交换算法这里就不介绍了。能够參考Behrouz A.Forouzan著的《password学与网络安全》。

 1.3 客户机鉴别与密钥交换:

客户机启动SSL握手第3阶段,是本阶段全部消息的唯一发送方,server是全部消息的唯一接收方。该阶段分为3步:
(a)证书(可选):为了对server证明自身,客户要发送一个证书信息,这是可选的,在IIS中能够配置强制client证书认证。
(b)客户机密钥交换(Pre-master-secret):这里client将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。
(c)证书验证(可选),对预备秘密和随机数进行签名,证明拥有(a)证书的公钥。
以下也重点介绍一下RSA方式的client验证和密钥交换。

这样的情况,除非server在阶段II明白请求,否则没有证书信息。client密钥交换方法包含阶段II收到的由RSA公钥加密的预备主密钥。
阶段III之后,客户要有server进行验证,客户和server都知道预备主密钥。

1.4 完毕

客户机启动SSL握手第4阶段,使server结束。该阶段分为4步,前2个消息来自客户机,后2个消息来自server。

1.5密钥生成的过程

这样握手协议完毕,以下看下什么是预备主密钥,主密钥是怎么生成的。为了保证信息的完整性和机密性,SSL须要有六个加密秘密:四个密钥和两个IV。为了信息的可信性,client须要一个密钥(HMAC),为了加密要有一个密钥,为了分组加密要一个IV,服务也是如此。SSL须要的密钥是单向的,不同于那些在其它方向的密钥。假设在一个方向上有攻击,这样的攻击在其它方向是没影响的。生成步骤例如以下:

 

2、记录协议 

记录协议在客户机和server握手成功后使用,即客户机和server鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录协议向SSL连接提供两个服务:
(1)保密性:使用握手协议定义的秘密密钥实现
(2)完整性:握手协议定义了MAC,用于保证消息完整性
记录协议的过程:

 3、警报协议

客户机和server发现错误时,向对方发送一个警报消息。假设是致命错误,则算法马上关闭SSL连接,两方还会先删除相关的会话号,秘密和密钥。每一个警报消息共2个字节,第1个字节表示错误类型,假设是警报,则值为1,假设是致命错误,则值为2;第2个字克制定实际错误类型。
总结
SSL中,使用握手协议协商加密和MAC算法以及保密密钥 ,使用握手协议对交换的数据进行加密和签名,使用警报协议定义传输数据过程中,出现故障怎样去解决。
整个过程比較复杂,假设大家有不理解和我叙述不周的地方,欢迎大家指正出来!

作者:朱祁林

出处:http://zhuqil.cnblogs.com


本文版权归作者和博客园共同拥有,欢迎转载,但未经作者允许必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

SSL协议具体解释的更多相关文章

  1. SSL协议运行机制

    SSL/TLS协议运行机制 一.作用 不使用SSL/TLS的HTTP通信,就是不加密的通信.所有信息明文传播,带来了三大风险. (1) 窃听风险(eavesdropping):第三方可以获知通信内容. ...

  2. 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口 )

    我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...

  3. ssl协议

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 1.首先解释一下上面的几个名词: https:在http(超文本传输协 ...

  4. 阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口

    1 问题描述 我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JD ...

  5. NATS连线协议具体解释

    NATS连线协议具体解释 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs NATS的连线协议是一个简单的.基于文本的公布 ...

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

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

  7. ActiveMQ持久化到MySQL以及使用SSL协议通讯

    最近公司事情稍微少了点,研究下怎么优化几个系统的交互,因为我们目前使用的是长链接的同步接口,就考虑用下MQ来处理下.由于公司对安全有要求且和CA业务有关,则使用了SSL协议.此文使用的是Activem ...

  8. TLS/SSL 协议 - ClientHello

    ClientHello 在一次新的握手流程中,ClientHello消息总是第一条消息.这条消息将客户端的功能和首选项传送给服务器.客户端会在新建连接后,希望重新协商或者响应服务器发起的重新协商请求( ...

  9. HTTPS(身披SSL协议的HTTP)

    参考链接: HTTP 与 HTTPS 的区别 HTTPS科普扫盲帖 HTTPS小结 HTTP 和 HTTPS 区别 HTTP是明文传输未加密,安全性差,HTTPS(HTTP + SSL)数据传输是加密 ...

随机推荐

  1. VS2015的对象浏览器的使用

    用vs开发这么久了,还是第一次用上对象浏览器的功能,第一次用有一点懵逼,记录一下. 这个图标是项目 这是代表类,下面可以展开看到基类 在右边可以看到这个类的方法和成员 这个代表结构体 同样的右边显示成 ...

  2. Kotlin尝试

    Kotlin 是一种静态类型的编程语言,可在 Java 虚拟机上运行,也可以编译为 JavaScript 源代码.其主要发展来自位于俄罗斯圣彼得堡的 JetBrains 程序员团队.虽然语法与 Jav ...

  3. 一步一步学习IdentityServer3 (8)

    IdentityServer3结合Hangfire及Cookies中间件实现授权 Idr3数据库Token过期管理 GlobalConfiguration.Configuration.UseSqlSe ...

  4. 《精通Python设计模式》学习结构型之享元模式

    这个我日常当中也没有用到过, 真的是游戏行业用得多些? 学习一下, 有个印象. import random from enum import Enum TreeType = Enum('TreeTye ...

  5. CCF CSP 201512-2 消除类游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...

  6. MySQL 20个经典面试题

    1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在 ...

  7. 【原创】MHA二次检测功能测试

    MHA提供了很多扩展的功能,其中有一个参数是secondary_check_script,这个参数可以使我们自定义扩展多路由,多链路的二次检测功能.减少网络故障切换,降低脑裂的发生. 在虚拟机上做了如 ...

  8. 解决mysql中limit和in不能同时使用的问题

    先给出数据表 CREATE TABLE `test_tb_grade` ( `ID` ) NOT NULL AUTO_INCREMENT, `) DEFAULT NULL, `COURSE` ) DE ...

  9. [flask]flask_login模块,session及其他

    读flask源码的时候,有一点一直到现在都没有一个清晰的概念,比如四个全局变量g,current_app,session,request是怎么做到的 按照查到的资料里面的说法,为了不至于每次都主动调用 ...

  10. [leetcode greedy]455. Assign Cookies

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...