一、SSL&TLS

1.SSL:Secure Sockets Layer ,加密套接字协议层

1)SSL是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密

Secure Socket Layer为Netscape网景公司1994年所研发,用以保障在Internet上数据传输之安全,利用数据加密技术,可确保数据在网络上之传输过程中不会被截取及窃听。

2)SSL协议可分为两层:记录协议、握手协议

SSL Record Protocol:建立在可靠的传输协议如TCP之上为高层协议提供数据封装、压缩、加密等基本功能

SSL Handshake Protocol:建立在SSL记录协议之上用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

3)SSL版本:1.0v  2.0v  3.0v

1.0版本未公布,2.0版本才发出就被暴出大量漏洞

主流版为3.0。广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输,但近期被爆出安全漏洞

2.TLS:Transport Layer Security,安全传输层协议

1999年,IETF在仿照SSL发布,为防止SSL一家独大,基本和SSL协议兼容

(1)版本:V1.0, V1.1, V1.2, V1.3

V1.3现在为草案支持椭圆曲线算法,现在主流是V1.2

(2)分层设计:

1)最底层:基础算法原语的实现,aes, rsa, md5

2)向上一层:各种算法的实现;

3)再向上一层:组合算法实现的半成品;

4)用各种组件拼装而成的各种成品密码学协议软件;

3.SSL和TLS实现网络安全性:http  -->  SSL/TLS --> https

传输层协议有TCP,UDP,SCTP,不同主机上的进程间通信通过socket(ip:port)

client ip:port <-- --> serverip:port

port:进程地址,进程向内核注册使用某端口(独占)

套接字一般处于监听模式:LISTEN(ip:port),占用端口,发起请求是启用服务

二、传输安全性实现:密钥算法协议

1.网络传输安全性

(1)安全的目标

保密性:confidentiality

完整性:integrity

可用性:availability

(2)攻击类型

威胁保密性的攻击:窃听、通信量分析;

威胁完整性的攻击:更改、伪装、重放、否认

威胁可用性的攻击:拒绝服务(DoS)

(3)解决方案

技术层面:加密和解密

服务层面:用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务

2.密钥算法

(1)对称加密:加密和解密使用同一个密钥;

1)特性:加密、解密使用同一个密钥;将原始数据分割成为固定大小的块,逐个进行加密;

2)缺陷:密钥过多;密钥分发困难;

3)种类:

DES:Data Encryption Standard,数据加密标准;算法的入口参数有三个:Key、Data、Mode。

Key为7个字节共56位,是DES算法的工作密钥;

Data为8个字节64位,是要被加密或被解密的数据;

Mode为DES的工作方式,有两种:加密或解密

3DES:三轮加密的DES

AES:Advanced Encryption Standard;  (128bits, 192bits, 256bits, 384bits)

Blowfish、Twofish、IDEA、RC6、CAST5

(2)公钥加密:密钥分为公钥与私钥

1)公钥:从私钥中提取产生;可公开给所有人;pubkey

2)私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key;

3)特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;

4)用途:身份认证,数字签名:主要在于让接收方确认发送方的身份;

密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;

数据(特征码)加密:其加密速度比对称加密慢三个数量级,所以不能做全数据加密

5)算法:RSA, DSA, ELGamal

DSS: Digital Signature Standard

DSA:Digital Signature Algorithm

(3)单向加密:即提出数据指纹;只能加密,不能解密

1)特性:定长输出、雪崩效应;

2)功能:完整性校验;

3)算法:md5:Message Digest 5, 128bits,消息摘要算法,版本号为五

sha1:Secure Hash Algorithm 1, 160bits ,安全的Hash算法

sha224, sha256, sha384, sha512

3.密钥交换协议:IKE(Internet Key Exchange)

(1)公钥加密

(2)DH(Deffie-Hellman)算法:密码本身无需在互联网上传输,但双方能得到一致的密码

扩展:ECDH(椭圆曲线DH)、ECDH(临时椭圆曲线DH)

实现方案简介:

1)A和B生成两个数字:p, g。p大素数和g,可以明文可以传输

2)A和B各自自定义一个数字x、y,进行阶乘取模操作,将其结果传递给对方

A私下生成x     --> p^x%g ==> B

B私下生成y    --> p^y%g ==> A

3)A和B进行解密操作

A: (p^y%g)^x=p^yx%g  ; B: (p^x%g)^y=p^xy%g

4.PKI:Public Key Infrastructure公钥基础设施

(1)PKI组成

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:CB,公共存储证书位置

(2)X.509v3:定义了证书的结构以及认证协议标准

版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者的惟一标识

主体的惟一标识、扩展、发行者的签名

三、SSL实现工作流程

1.SSL会话实现主要步骤(三步):

(1)客户端向服务器端索要并验正证书;

(2)双方协商生成“会话密钥”;

(3)双方采用“会话密钥”进行加密通信;

2.SSLHandshake Protocol:SSL握手协议

第一阶段:ClientHello:客户端

支持的协议版本,比如tls1.2;

客户端生成一个随机数,稍后用户生成“会话密钥”

支持的加密算法,比如AES、3DES、RSA;

支持的压缩算法;

第二阶段:ServerHello服务器端

确认使用的加密通信协议版本,比如tls1.2;

服务器端生成一个随机数,稍后用于生成“会话密钥”

确认使用的加密方法;

服务器证书;

第三阶段:

验正服务器证书,在确认无误后取出公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)

发送以下信息给服务器端:

一个随机数;

编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

客户端握手结束通知;

第四阶段:

收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;

向客户端发送如下信息:

编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

服务端握手结束通知;

Google图示:public key client 和private key client---SSL握手协议

注释:左侧client;右侧server。蓝色虚线分割开各个阶段

SSL协议实现步骤总结:

1.客户端生成随机数,建立会话前商定(如约定的加密算法),服务器端将自己生成的随机数返回

2.服务器端将自己的证书发给客户端,并且请求客户端证书;

3. 客户端检查服务器端的证书(签发者CA、证书有效期、证书内容、证书中名称和通信名称一致、是否吊销),若检查没问题,客户端将会将自己的证书发给服务端

4.服务器端收到客户端证书,检查客户端证书

5.服务端将前面所有信息用hash计算,用自己的公钥签名发给客户端

6.客户端机密数据用对方公钥加密后发送给对方

7.双方可以开始进行基于对称加密方式通信

8.客户端请求断开会话,服务器端断开会话

注意:

1)客户端验证是为了防止钓鱼网站等,确认访问的网站为自己所需确认站点

2)公钥是私钥的其中一部分,私钥是私密的、个人的,公钥是公开的部分;私钥的长度长于公钥

3)服务器证书的主体名称要和浏览器上的访问的名称一致,否则验证无法通过;所以在互联网上当做服务器证书名称必须与通过互联网访问服务器时候的名称完全一致,否则客户端提醒操作有风险

4)数据加密过程

-->单向加密算法算出数据包的特征码

--->用自己的私钥再次加密上述的特征码

--->使用双方协定算法对称加密整个数据包(数据+二次加密的特征码)

--->最后再封装一层对方公钥加密的特征码

其中,最后一步也可以单独进行一次特性进行发送确认

经过四次加密能保证数据的完整性,数据的完整性,以及所有者的身份认证

http://blog.51cto.com/xuding/1732275

SSL&TLS传输层加密协议实现图解--(重要)的更多相关文章

  1. EXCHANGE 2013 TLS传输层安全

    默认情况下,SMTP流量是不被加密的,这就导致在公网上进行邮件沟通就像是在广播一样,任何人拦截到该邮件都可以轻而易举的读取其内容.但是现实场景中有许多敏感信息是通过邮件来进行发送的,所以其中一种保护邮 ...

  2. 转: https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL

    转自: http://www.cnblogs.com/mailingfeng/archive/2012/07/18/2597392.html 因为项目中要用到TLS + SASL 来做安全认证层. 所 ...

  3. 数字证书, 数字签名, SSL(TLS) , SASL .

    因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结. 1. 首先推荐几个文章: 数字证书: http://www.cnblogs.com/hyddd/ar ...

  4. https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL_转

    转自:https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL 因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结. 1. 首 ...

  5. (转)数字证书, 数字签名, SSL(TLS) , SASL

    转:http://blog.csdn.net/xueshanfeihu0/article/details/9154219 因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料 ...

  6. SSL/TLS 协议详解

    SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议.TLS ...

  7. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  8. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  9. 公钥、私钥、SSL/TLS、会话密钥、DES【转载】

    原文链接:https://www.cnblogs.com/thbCode/p/5829719.html 一,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有自己知道的叫私钥3,用公钥加密的数据 ...

随机推荐

  1. Html5离线缓存简介

    一. 什么是manifest 首先manifest是一个后缀名为minifest的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本 ...

  2. [Vue @Component] Pass Props Between Components with Vue Slot Scope & renderless component

    Components with slots can expose their data by passing it into the slot and exposing the data using  ...

  3. ZOJ 3675 Trim the Nails(bfs)

    Trim the Nails Time Limit: 2 Seconds      Memory Limit: 65536 KB Robert is clipping his fingernails. ...

  4. Scala入门到精通——第十五节 Case Class与模式匹配(二)

    本节主要内容 模式匹配的类型 for控制结构中的模式匹配 option类型模式匹配 1. 模式的类型 1 常量模式 object ConstantPattern{ def main(args: Arr ...

  5. Linux网络编程:UDP实现可靠的文件传输

    我们知道,用TCP实现文件传输很简单.相对于TCP,因为UDP是面向无连接.不可靠的传输协议,所以我们需要考虑丢包和后发先至(包的顺序)的问题,所以我们想要实现UDP传输文件,则需要解决这两个问题.方 ...

  6. 【转】在Oracle中查看各个表、表空间占用空间的大小

    查看当前用户每个表占用空间的大小:    select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_nam ...

  7. linux命令:find命令

    http://blog.csdn.net/pipisorry/article/details/39831419 linux find命令语法 find [起始文件夹] 寻找条件 操作 find PAT ...

  8. iOS开发】之CocoaAsyncSocket使用

    本文介绍了CocoaAsyncSocket库中GCDAsyncSocket类的使用.粘包处理以及时间延迟测试. 一.CocoaAsyncSocket介绍 CocoaAsyncSocket中主要包含两个 ...

  9. Android之利用EventBus进行数据传递

    在项目中,不可避免的要在两个页面之间进行数据的传递,就算不传递,也需要进行刷新之类的,我们根据Google提供的库类方法,也是可以做的,主要有广播broadcastreceiver,startacti ...

  10. 重装mysql

    重装mysql方法. 转自http://blog.sina.com.cn/s/blog_73000beb01012eh4.html 1.删除 mysql 1.1 sudo apt-get autore ...