一、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

最新文章

  1. StatePattern
  2. [转]ACM进阶计划
  3. xcodebuild和xcrun实现自动打包iOS应用程序
  4. Javascript:看 Javascript 规范,学 this 引用,你会懂的。
  5. android KeyEvent for dot &quot;.&quot;
  6. testNG java.net.SocketException: Software caused connection abort: socket write error
  7. 游戏平台代表--PS4【推荐】
  8. CodeForces-749A
  9. 打印上三角或下三角矩阵(9x9) - perl, R
  10. opencv: 基本知识(二);
  11. php制作圆形用户头像——自定义封装类源代码
  12. exec 与文件描述符
  13. GCD on Blackboard
  14. Maven - 实例-6-聚合与继承
  15. Angular 学习笔记 (version 6 小笔记)
  16. 图的关键路径,AOE,完整实现,C++描述
  17. 使用fastjson解析数据后导致顺序改变问题
  18. AspNetPager.dll 分页控件使用
  19. 查看CPU序列号以及系统信息
  20. egg.js-基于koa2的node.js入门

热门文章

  1. internalsviewer
  2. 源码分析-react1-根节点渲染
  3. MVC中路由的一些内容详解
  4. iOS常用的正则表达式总结
  5. libcurl库进行http通讯-一些主要的函数
  6. 3730 无线网络发射选址[NOIP 0214 day2 T1]
  7. sql数据库CHECKDB时报x个分配错误和x个一致性错误
  8. es6 import 与 export
  9. [Swift通天遁地]九、拔剑吧-(5)创建Tab图标具有多种样式的Tab动画
  10. 小小的IP,大大的耦合,你痛过吗?