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. WCF服务部署到IIS

    WCF服务部署 一.将WCF服务部署到IIS上 1.首先检测电脑上是否安装了IIS,一般来说Win7以上系统自带IIS 2.下面进行IIS服务的开启设置:  控制面板=>打开或关闭Windos功 ...

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

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

  3. GHOST CMS - 创建自定义主页 Creating a custom home page

    创建自定义主页 Creating a custom home page 为你的网站创建一个自定义的主页是一个让你从人群中脱颖而出的好方法,并把你自己独特的印记存放在你的网上.本教程向您展示了如何在Gh ...

  4. MIT-6.824 操作系统 汇总

    MIT-6.828-JOS-环境搭建 ELF文件格式 lab1:C, Assembly, Tools, and Bootstrapping lab2:Memory management lab3:Us ...

  5. 设计模式之单例模式C#实现

    前言 单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式. 下面是一些个人看法: (1) 单例类需要保证自己的唯一性,同时也需要避免被继承,即需要使用sealed修饰: ( ...

  6. Windows服务安装批处理命令

    Install.bat: @echo off "%~dp0InstallUtil\InstallUtil.exe" "%~dp0DataSyncService.exe&q ...

  7. NSwag.AspNetCore常用功能介绍

    对于asp.net core 下的Swagger,之前一直用Swashbuckle的,因为官方推荐,再加上有老张的博客助力<从壹开始前后端分离[ .NET Core2.0/3.0 +Vue2.0 ...

  8. pandas 初识(五)

    1. 如何实现把一个属性(列)拆分成多列,产生pivot,形成向量信息,计算相关性? 例: class_ timestamp count 0 10 2019-01-20 13:23:00 1 1 10 ...

  9. nodejs环境使用Typeorm连接查询Oracle

    首先是typeorm的官方地址, 国内有人翻了中文版,不保证时效性 ·通过npm安装下列包: typeorm //typeorm连接数据库 @types/node //类型系统 typescript ...

  10. golang 安装脚本

    #!/bin/bash env sudo yum -y install wget curl echo "download golang ..." # 获取最新的golangurl ...