SSL通信协议运行机制

    最近跟第三方厂商调试接口,在调用接口时,需要使用SSL协议进行通信。

一、SSL协议

    SSL基于公钥技术,可以保证两个应用之间通信的保密性和可靠性,使得两者之间的通信不被攻击者窃听。它介于HTTP协议和TCP协议之间,属于应用层协议。

    先看一个例子:利用SSL协议来访问某网站,如在浏览器的地址栏输入:https://www.myssl.com

    那么在HTTP层,浏览器会将用户的请求翻译成HTTP请求:

GET /index.html HTTP/1.1
Host www.myssl.com

    而在SSL层,会借助下层协议的信道,安全的协商出一份加密密钥,并用此密钥来加密HTTP请求。TCP层会建立与服务端443端口的连接,传递SSL处理后的数据。服务端在接收到数据后,处理与此过程相反。

    由上述过程可以看出,SSL协议的基本过程如下:

  1. 客户端向服务器索要并验证证书

  2. 双方协商出共享密钥

  3. 双方利用共享密钥进行加密通信

二、密钥协商

    众所周知,非对称加解密速度较慢,主要用于密钥交换,客户端和服务端通过公钥算法协商出一份密钥,然后通过该密钥使用对称加密来通信。当然,为了保证数据的完整性,在加密前,对数据先做HMAC处理。

客户端C

服务端S


ClientHello(我想和你进行安全通信)

我支持的通信协议版本

产生客户端随机数R1

我支持的算法:

  对称加密算法:DES

  密钥交换算法:RSA/DH

  摘要算法:MD5/SHA




ServerHello

确认使用的加密通信协议版本

产生服务端随机数R2

我们用DES-RSA-SHA这对组合

这是我的证书(含有S的信息和公钥),你拿去验证一下吧


查看证书是否可信(一般通过CA验证),如果验证未通过,发出警告并断开连接。

若验证通过,则由客户端会产生一个随机数R3,并从证书中取得公钥进行加密,封装成ClientKeyExchange发送给S,用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"

客户端握手结束通知,告诉S以后我将用加密的办法给你发消息了同时发送前面发送的所有内容的hash值(HMAC),用来供服务器校验

注意:如果服务端需要客户端证书,这里还会发送客户端自己的证书




用自己的私钥将ClinetKeyExchange中的秘密信息解密出来,用事先商定的加密方法,各自生成本次会话所用的同一把"会话密钥"

服务端握手结束通知,告诉C以后我将要加密的办法给你发消息了,发送前面发送的所有内容的hash值(HMAC),用来供客户端校验


加密请求数据




解密请求信息,加密应答数据…


解密应答信息



    握手阶段结束后,客户端和服务端将进行加密通信,只不过后面的过程都使用的是基本的HTTP协议,只是将数据使用会话密钥加密而已。




转载于:https://my.oschina.net/vbird/blog/224109

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值