博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSL通信协议运行机制
阅读量:6551 次
发布时间:2019-06-24

本文共 1191 字,大约阅读时间需要 3 分钟。

  hot3.png

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

一、SSL协议

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

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

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

GET /index.html HTTP/1.1Host 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

你可能感兴趣的文章
我的友情链接
查看>>
oracle数据库中由于没有做任何约束,如何删掉表中重复的记录
查看>>
挨踢项目求生法则(8)——计划篇
查看>>
C#关键字列表
查看>>
Javascript ES6中的箭头函数
查看>>
复制虚拟机出现网卡冲突的解决方案
查看>>
mysql 增查删改,备份恢复,授权等基础常用命令
查看>>
Python 多线程,文件io
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
网站SEO流量下降可分析以下原因
查看>>
mysql datestamp坑
查看>>
Office 365中管理员角色介绍-初级篇
查看>>
域用户密码策略注意事项
查看>>
imagick
查看>>
手动清除explorer.exe病毒
查看>>
Linux 5 开机出现grub.conf不能启动解决
查看>>
《三年零六个月山歌其五.枫叶》
查看>>
office2003和2007共存时,如何默认使用2003?
查看>>
PHP发布webService和调用webService
查看>>