SSL及其加密通信过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SSL及其加密通信过程
SSL及其加密通信过程
什么是SSL
SSL英⽂全称Secure Socket Layer,安全套接层,是⼀种为⽹络通信提供安全以及数据完整性的安全协议,它在传输层对⽹络进⾏加密。
它主要是分为两层:
SSL记录协议:为⾼层协议提供安全封装、压缩、加密等基本功能
SSL握⼿协议:⽤于在数据传输开始前进⾏通信双⽅的⾝份验证、加密算法的协商、交换密钥
OpenSSL是SSL的开源实现,它是作为密码学的安全开发包,提供相当强⼤全⾯的功能,囊括了主要的密码算法、常⽤的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应⽤程序供测试或其它⽬的使⽤。
它⼀共提供了8中对称加密算法和4中⾮对称加密算法。
HTTPS和SSL
HTTP(Hyper TEXT Transfer Protocol超⽂本传输协议)是⽬前互联⽹上应⽤最为⼴泛的⼀种⽹络协议,⽤于在Web浏览器和⽹站服务器之间传递信息,但是HTTP协议以明⽂的⽅式发送内容,不提供任何数据加密,攻击者能够很轻易通过抓包的⽅式截取传输内容并读懂其中的信息,所以HTTP不适合传输⼀些⽐较私密的信息,为了解决HTTP这⼀缺陷,HTTPS(Hyper TEXT Transfer Protocol over Secure Socket Layer)协议出现。
HTTPS是在HTTP的基础上加⼊SSL协议。
传输以密⽂传输,保证数据传输的安全以及确认⽹站的真实性(数字证书)。
HTTPS=HTTP+SSL
SSL加密⽅式
对称加密与⾮对称加密
在开始之前⾸先得对理解对称加密与⾮对称加密这两种加密⽅式。
其中加密过程是: 信息+密钥+算法=密⽂
对称加密
对称加密实质加密和解密都使⽤同⼀个密钥,对称加密只有⼀个密钥,作为私钥。
这就好⽐现实⽣活中的钥匙和锁,我将想要传达的信息通过对称加密算法⽤私钥进⾏加密,形成密⽂,然后将这密⽂传送给同样拥有这把锁的“钥匙”的⼈,对⽅就⽤同样的算法和私钥将密⽂解密出来。
常⽤的对称加密算法有DES和AES等
但是在现实中,这种传输⽅式并不是特别⽅便,密钥怎么给对⽅是⼀个很关键的问题,⽽且密钥交给了其他⼈⾃⼰也不是很放⼼。
于是⾮对称加密出现
⾮对称加密
⾮对称加密是指加密和解密⽤的是不同密钥,并且是成对存在的。
⼀把称为公钥,能够放⼼的交给别⼈,⼀把是私钥,只能⾃⼰保存。
其中⽤公钥加密的信息只能⽤私钥解密,⽤私钥加密的信息只能⽤公钥解密。
需要注意的是这⾥的私钥和密钥都是对应的,就是说我的私钥可以解密⽤我的公钥加密的信息,但是他⼈的私钥不能解密⽤我的公钥加密的信息。
常⽤的⾮对称加密算法有:RSA,DH,DSA三种
具体的加密过程
我通过⼀段具体的通信过程来模拟这⼀加密过程。
假设主⼈公是客户端A和服务端B
A:B,你好,我想向你发⼀段消息,请你把你的公钥给我
B:好的,我的公钥是:xxxxxxx。
A:好的,我收到了你的公钥,我给你发送的消息经过你的公钥加密后是:yyyyyyy。
B:收到,我现在⽤我的密钥来解密看看。
这就是⾮对称加密的具体过程,这种⽅式看上去很安全,但是仔细想想信息真的可靠吗?
想⼀想客户端A的公钥是假的怎么办?如果有⼀个⿊客C也给客户端A发送了⼀个⾃⼰的公钥,⽽客户端A不知道公钥的正确性,⽤了C的公钥加密发送,这样⼀来,信息被C截取的化,信息不久泄露了吗。
所以我们得想个办法证明我⽤的公钥确实是服务端B的公钥。
于是数字证书出现!
我先抛⼀段官⽅的数字证书的概念
数字证书就是互联⽹通讯中标志通讯各⽅⾝份信息的⼀串数字,提供了⼀种在Internet上验证通信实体⾝份的⽅式,数字证书不是数字⾝份证,⽽是⾝份认证机构盖在数字⾝份证上的⼀个章或印(或者说加在数字⾝份证上的⼀个签名)。
简单来说数字证书就是⼀段信息,他内部的信息包括:
签发证书的机构
加密算法
Hash算法
公钥
证书到期时间等
贴⼀段实际的数字证书
我通过查看CSDN的数字证书来帮助理解这⼀概念,chrome的⽹页栏⼀般有“安全”的字样,说明该⽹站的有数字证书的,数据传输的安全性是可以保证的。
再来看看数字证书的内容
它⾥⾯包含了⼀系列安全相关信息,在下⾯我会讲这些信息的⽤途。
另外提⼀点,数字证书是由权威机构——CA机构发⾏,我们是绝对信任这个机构的。
为了防⽌证书颁发的过程中被⼈修改,⼜出现了⼀个数字签名的概念,所谓数字签名就是把证书内容做了⼀个hash操作⽣成固定长度的数据发送给服务端B,服务端就能通过⾃⼰hash⼀遍对⽐发过来的hash来判断内容是否被修改。
然⽽这还是可能被⼈截取修改内容重新⽣成hash 再发给服务端B,这怎么办呢?出于这个考虑,CA机构在颁发时⼜会⽤⼀个私钥将这个hash加密,这样就防⽌了证书被修改了。
我将该过程图⽰
这⾥再说⼀下数字签名,通俗来说就是将要传输的信息通过hash加密后将这个hash⽤私钥加密,最后得到的东西称之为数字签名。
⽤来验证传输的信息是否被更改,注意的是这个私钥是CA官⽅私钥。
所以最终传送的内容有: 正⽂+数字签名+数字证书
我们梳理⼀下
1. 第⼀步:客户端A开启⼀个新的浏览器访问客户端时,会先让A安装⼀个数字证书,这个证书主要包含的是CA机构的公钥。
2. 第⼆步:服务端B发来CA机构给⾃⼰的证书,通过CA公钥解密被CA私钥加密的hash1,然后再⽤B的证书⾥⾯的hash算法将信息⽣成
⼀个hash2,通过⽐较两个hash,若相等,确认这个数字证书是服务端B的。
由于⾮对称加密算法复杂度和计算量⼤,对称加密效率⾼,SSL就将这两种加密算法混合着⽤,这样安全和效率就都能保证了。
其中具体的过程如下:
1. 第⼀步客户端A给出⽀持的SSL版本+⼀个随机数+⾃⼰⽀持的加密⽅式
2. 第⼆步服务端B接收到这些信息后确认加密⽅式+⾃⼰的安全证书+⼀个随机数发给A
3. 第三步客户端A确认数字证书有效性(验证⽅法上⾯已经说明),然后⽣成⼀个随机数,并将这个随机数⽤B的数字证书公钥加密后发
送给A。
4. 第四步服务端B使⽤⾃⼰的私钥解密这个随机数
5. 第五步 A和B通过第⼆步确定的加密⽅法将前三个随机数⽣成⼀个对话密钥⽤来接下来的通信(个⼈感觉不需要三个随机数,只⽤最
后⼀个就够了,这样做可能是为了更安全)
于是A和B救恩那个⽤对称加密的⽅式快速有效安全的通信了。
这就是SSL协议的握⼿过程,图⽰如下。
总结。