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. webpack学习_使用source map

    追踪错误和警告,JS提供sourcemap功能,将编译后的代码映射回原始代码(简单来说就是即使打包后,也可以检测知道该错误来自哪个JS文件).如果一个错误来自与b.js,那么source map回明确 ...

  2. django基础之day09,多对多创建数据表的三种方式

    多对多三种创建方式 1.全自动(用在表关系不复杂的一般情况) class Book(models.Model): title=models.CharField(max_length=32) 多对多关系 ...

  3. mysql数据库实战之优酷项目

    管理员: 1.注册功能 客户端 1-1.选择每个功能之前都需要都需要需要连接上服务器,即需要一个socket对象,每个函数传一个client 1-2.密码在传递过程中不能是明文吧,需要加密,可选择ha ...

  4. 微信小程序 wepy框架 之拦截器intercepter使用

    1,在使用wepy框架创建的项目下 找到src/app.wpy 2,在app.wpy constructor方法中添加 super(); this.use('promisify');//启用ES6 p ...

  5. 《MySQL数据库》MySQL数据库安装(linux)

    1.  下载安装包: 百度网盘:链接: https://pan.baidu.com/s/1toGl8O9gMBpDWn0mHWwFyg 提取码: i51g 官网下载:https://dev.mysql ...

  6. 面试连环炮系列(十五):说说Eureka的高可用方案

    说说Eureka的高可用方案 至少3个Eureka实例才能满足高可用,配置方法如下: 准备三个节点node1,node2,node3. 在每个实例的application.xml文件里加入 eurek ...

  7. .Net Core2.2升级到3.1小记

    .NET Core 3.1 作为LTS长期支持版本,会提供3年的支持(明年就出.net5),值得升级(吗). 目前主流的第三方包大多都已经提供了支持,2.x => 3.1还是变化不是特别多,EF ...

  8. leetcode之缺失的第一个正数

    给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0]输出: 3示例 2: 输入: [3,4,-1,1]输出: 2示例 3: 输入: [7,8,9,11,12] ...

  9. ArcGIS Runtime SDK for WPF学习笔记(一)

    本节主要讲解如何安装ArcGIS Runtime SDK,以及移除注释与水印. 附上ArcGIS Runtime SDK for .NET的官方操作手册网址:https://developers.ar ...

  10. 技术分享预告丨k3s在边缘计算中的应用实践

    技术分享是在[Rancher官方微信技术交流群]里以图文直播+QA实时互动的方式,邀请国内已落地经验的公司或团队负责人分享生产落地的最佳实践.记得添加微信小助手(微信号:rancher2)入群,实时参 ...