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. pymysql的操作

    目录 python 操作mysql 安装pymysql 模块 sql注入问题 产生的原因 解决的方法 连接 查 增 修 删 索引 使用索引的作用 索引的本质 索引的底层原理 索引的种类 索引的创建 主 ...

  2. 《Java基础知识》Java接口和抽象类的区别

    抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...

  3. 【Java必修课】图说Stream中的skip()和limit()方法及组合使用

    1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...

  4. java嵌套接口

    java嵌套接口 package object; class A { //嵌套在类中的接口,可以被private,protected,default和public四种权限修饰 interface B ...

  5. vue路由基础总结

    1.创建项目 为了练习路由 这里没有选择路由 就选了Bable 自己一步一步的配置 加深印象. 然后下载路由 npm install vue-router --save 2.基础配置 src文件下新建 ...

  6. 使用Power BI Desktop 制作并发布到Power BI 服务,使用Power BI Mobile查询报表

    上节内容中,我们介绍了Power BI的基本概念,本节我们分享以下一个简单报表从使用Power BI Desktop制作,到发布到Power BI 服务,到从Power BI Mobile上查阅报表的 ...

  7. java8新特性,你有用起来了吗?(精编)

      2019年9月19日java13已正式发布,感叹java社区强大,经久不衰.由于国内偏保守,新东西总要放一放,让其他人踩踩坑,等稳定了才会去用.并且企业目的还是赚钱,更不会因为一个新特性去重构代码 ...

  8. centos7 nginx 配置

    1.下载nginx 官方下载1.6.2 2.编译安装 [root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx ...

  9. 1.Redux学习1,Redux

    Redux流程图如上: Action就是一条命令 Store顾名思义就是存储数据的, Reducers是一个回调函数用于处理数据,它处理完数据会返回给Store存储起来 基本流程就是:组件中用Stor ...

  10. VS2019 开发Django(三)------连接MySQL

    导航:VS2019开发Django系列 下班回到家,洗漱完毕,夜已深.关于Django这个系列的博文,我心中的想法就是承接之前的微信小程序的内容,做一个服务端的管理中心,上新菜单,调整价格啊!之类的, ...