HTTPS 即 HTTP-within-SSL/TLS,其中 SSL/TLS 又分别表示:

  • SSL:Secure Sockets Layer
  • TLS:Transport Layer Security

SSL/TLS 建立链接及握手的过程为:

SSL/TLS 建立链接及握手的示意图

阶段一

  • Client Hello

    • 客户端向服务器发送

      • 随机数 Random1
      • 客户端支持的加密套件 Support Ciphers
      • SSL 版本
  • Server Hello
    • 服务器向客户端发送
    • 从客户端发送加密套件列表中选择一个,加密套件决定了后续加密及生成摘要的算法
    • 生成随机数Random2。两端的随机数会在后续生成对称密钥时使用。

阶段二

  • Certificate

    • 服务器将自己的证书下发给客户端,让客户端验证服务器的身份。( 12306 曾经使用国内自己签发的证书,结果 Chrome 不认就是这个道理)
    • 客户端验证后从证书取出公钥
  • Server Key Exchange
    • DH 算法需要此步骤,发送服务器使用的 DH参数,RSA 不需要
  • Certificate Request
    • 可选。服务器要求客户端上报证书。对安全性要求极高时使用。
  • Server Hello Done
    • 通知客户端 Server Hello 结束

阶段三

  • Certificate Verify

    • 客户端收到证书后从CA验证其合法性。
    • 验证合法后从证书取出公钥,生成随机数 Random3
    • 使用公钥非对称加密Random3 生成 PreMaster Key
  • Client Key Exchange

    • 客户端将 PreMaster Key 发送服务器,服务器用自己的私钥解出 Random3。
    • 此时两端都拥有 Random 1~3
    • 两端使用相同的算法生成密钥,握手结束后的数据传输都使用此密钥进行对称加密。
  • 为何需要三个随机数?

    • 因为SSL/TSL 握手过程数据明文传输,多个随机数种子生成的密钥不容易暴力破解。

阶段四

  • Change Cipher Spec (Client)

    • 这是一条事件消息
    • 客户端通知服务端后续消息都会使用前面协商出来的密钥加密。
  • Encrypted Handshake Message (Client)
    • 这是条 Client Finish 消息

      • 客户端将前面的握手消息生成摘要,使用前面协商的密钥加密。
    • 这是客户端发出的第一条加密消息
    • 服务端使用密钥解密,解密成功说明密钥一致。
  • Change Cipher Spec (Server)
    • 事件消息
    • 服务端通知客户端后续消息都使用加密。
  • Encrypted Handshake Message (Server)
    • Server Finish 消息
    • 服务端将握手过程生成摘要
    • 使用密钥加密发送给客户端
    • 这是服务端发送的第一条加密消息
    • 客户端收到后解密,成功说明密钥一致。

相关资源

SSL/TLS 链接的建立/握手的更多相关文章

  1. C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

    这里因为的原因是https请求要检查证书,有些证书不正确的,网页不会正常展示内容,而会返回链接不安全,是否继续.不安全的链接是否继续. 详情参考: C#动态调用webService出现 基础连接已经关 ...

  2. 基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

    #region private static bool ValidateServerCertificate 解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系.& ...

  3. XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。" "根据验证过程,远程证书无效。"

    XmlDocument.Load(url)  url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系."   "根据验证过程, ...

  4. 解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

    今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系".  ...

  5. 访问https接口报错 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系

    详细错误信息如下 请求错误信息:发生一个或多个错误.System.Net.Http.HttpRequestException: An error occurred while sending the ...

  6. C# 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

    今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". ...

  7. https创建请求UrL报错: 未能为 SSL/TLS 安全通道建立信任关系

    1.项目中异常报错如下: 2.百度结果:原来是 网站没有使用SSL证书或者是SSl证书失效了的缘故. 3.具体解决方案如下: )导入命名空间 using System.Net.Security; us ...

  8. [转][C#]基础连接已经关闭 未能为 SSL/TLS 安全通道建立信任关系

    来自:https://www.cnblogs.com/waw/p/8286608.html 代码部分: static TestApplication(){ ServicePointManager.Se ...

  9. 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

    (转自:http://blog.sina.com.cn/s/blog_5eca668b01018949.html)定义一个类,来对远程X.509证书的验证,进行处理,返回为true.我们要自己定义一个 ...

随机推荐

  1. 《Java练习题》进阶练习题(四)

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序78 ...

  2. 语句知识总结(js)

    函数声明语句和函数定义表达式有什么不同 首先看一下函数声明语句和函数定义表达式的例子,表达式会返回一个值,而语句就是js中的一整句,下面例子中第6行是函数声明语句,第10行是函数定义表达式. f(); ...

  3. django 用户与权限管理

    django中使用content_type表进行存储app与model的关系.在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_typ ...

  4. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见

    微服务与敏捷开发(Scrum/Kanban)的核心思想之我见   关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...

  5. sql server无法连接本地服务器

    当连接sql server本地服务器 报一下错误: 标题: 连接到服务器 ------------------------------ 无法连接到 localhost. ---..... 打开wind ...

  6. centos7网口添加IP,修改默认路由永久地址生效

    1永久增加ip地址和路由 网卡永久添加ip地址 注释:ens192为管理地址网卡,请根据实际情况进行修改,网关以192.168.160.1为例 复制一份网卡配置文件命名为ifcfg-ens192:1 ...

  7. NLP之语言模型

    参考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA http://yangminz.coding.me/blog/post/MinkolovRN ...

  8. Prometheus学习系列(二)之Prometheus FIRST STEPS

    前言 本文来自Prometheus官网手册 和 Prometheus简介 说明 Prometheus是一个监控平台,通过在监控目标上的HTTP端点来收集受监控目标的指标.本指南将向您展示如何使用Pro ...

  9. (八十一)c#Winform自定义控件-时间轴-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  10. java 线程同步方法执行与唤醒实例

    账号提钱.存钱实例方法 public class Account { private int balance; private int maxBalance; public Account(int b ...