https是如何保证安全的?

HTTPS = HTTP + SSL/TLS
TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议。HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash(MD5、SHA1、SHA256等)、对称加密(AES、DES)和非对称加密(RSA、DH),其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

对称加密和非对称加密

  • 对称加密: 数据加解密使用同一个密钥,加解密速度快,效率高
  • 非对称加密: 数据加解密使用公钥和私钥,公钥用于传输,私钥自己保存,安全性较高,但加解密速度偏慢。

HTTPS加密过程:
在这里插入图片描述
如何保证通信过程中公钥不被篡改?
利用数字证书。在通信过程中,服务端会向客户端发送自己的ssl证书,其中包括证书的发布机构CA、证书的有效期、公钥、证书所有者、签名等信息。
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:

  1. 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
  2. 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
  3. 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
  4. 如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密
  5. 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
  6. 对比结果一致,则证明服务器发来的证书合法,没有被冒充
  7. 此时浏览器就可以读取证书中的公钥,用于后续加密了

如何利用非对称加密密钥协商呢?
SSL/TLS 握手。SSL/TLS 其实就是通过非对称加密,生成对称加密的 sessionkey 的过程。
SSL握手过程详解

  • 第一步 客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)(所使用的加密算法及密钥长度)和 SSL Version 等信息。
    在这里插入图片描述
  • 第二步 服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2
    在这里插入图片描述
  • 第三步 服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。
    在这里插入图片描述
  • 第四步 Server Key Exchange,如果是DH算法,这里发送服务器使用的DH参数。RSA算法不需要这一步。
    在这里插入图片描述
  • 第五步 Certificate Request,Certificate Request 是服务端要求客户端上报证书,这一步是可选的,对于安全性要求高的场景会用到。
  • 第六步 Server Hello Done 通知客户端 Server Hello 过程结束。
  • 第七步 Certificate Verify,客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。
  • 第八步 Client Key Exchange,上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,紧接着两边根据D-H算法及第四步传递的相关参数生成一个会话密钥,后续就使用这个密钥进行通信了。
    在这里插入图片描述
  • 第九步 Change Cipher Spec(Client),这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。
  • 第十步 这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。
  • 第十一步 Change Cipher Spec(Server),这一步是服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。
  • 第十二步 Encrypted Handshake Message(Server) 这一步对应的是 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。
  • 第十三步 Application Data,双方已安全地协商出了同一份秘钥,所有的应用层数据都会用这个秘钥加密后再通过 TCP 进行可靠传输。

https双向认证
在这里插入图片描述
常用密码算法原理

  • RSA
    RSA算法安全性基于大整数分解问题。
  1. 独立选取两个大整数p和q(为了获得最大程度的安全性,两个素数长度应该差不多,都应为长度在100以上的十进制数)
  2. 计算n=p*q,以及n的欧拉函数φ(n) = φ§φ(q) = (p-1)(q-1)。
    欧拉函数是小于或等于n的正整数中与n互质的数的数目。
  3. 选择一个小于φ(n) 并与φ(n) 互质的整数e,求得e存在模φ(n) 下的乘法逆元d=e^-1 mod φ(n) (利用扩展的欧几里得算法)
    在RSA算法中,以n和e作为公钥,d和e作为私钥,此时p和q不再需要,可以销毁,但一定不可泄露。
  • Diffie-Hellman密钥交换
    DH算法安全性基于求解有限域上离散对数的困难性。
    首先双方需要约定一个大素数p和它的一个本原根g
  1. 双方(A和B)分别挑选一个保密的随机整数Xa和Xb,并分别计算Ya=g^Xa mod pYb = g^Xb mod p,然后A将Ya发送给B,B将Yb发送给A
  2. A和B分别计算K=Yb^Xa mod pK=Ya^Xb mod P,得到双方共享密钥K。
    由于Xa和Xb是保密的,因此攻击者最多能够得到p、g、Ya、Yb.如果攻击者希望得到K,就必须要计算出Xa和Xb中的一个,就需要求解离散对数,这在计算上是不可性的。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值