https简介

概念

对称加密

  • 简单来说就是通信双方有同一把密钥,同时可以加密和解密

非对称加密

  • 简单来说就是有一对密钥,通信双方手上分别有一把,可以用其中一把进行加密,另一把进行解密

hash与HMAC

以上三部分建议看康哥的博客

签名

  • 签名 = 私钥作用于(计算哈希(消息))

证书

  • 证书 = 被签名了的公钥

HTTPS

为啥要用HTTPS

  • 防窃听
  • 防篡改
  • 防止遇到伪造的通信对端

HTTPS有何作用

  • 加密
  • 认证
  • 内容完整性保护

SSL/TLS Protocol

SSL协议,是一种安全传输协议,最初是由 Netscape 在1996年发布,由于一些安全的原因SSL v1.0和SSL v2.0都没有公开,直到1996年的SSL v3.0。TLS是SSL v3.0的升级版

HTTPS 即使用SSL/TLS进行通信

SSL/TLS Protocol 分为两层

  • SSL记录协议 (SSL Record Protocol)

    它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

  • SSL握手协议 (SSL HandShake Protocol)

    建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等

SSL握手阶段(handshake)

“握手阶段”涉及四次通信,我们一个个来看。需要注意的是,”握手阶段”的所有通信都是明文的。

客户端发出请求(ClientHello)

客户端向服务器发起请求,向服务器提供以下信息

  • 支持的协议版本(如 TLS 1.0)
  • 一个由客户端生成的随机数
  • 支持的加密方法(如 RSA)
  • 支持的压缩方法
  • 请求的域名(2006年,TLS协议加入了一个Server Name Indication扩展允许客户端向服务器提供它请求访问的域名)

服务器回应(ServerHello)

服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容

  • 确认使用的加密通信协议版本 (如TLS 1.0, 如果浏览器与服务器支持的版本不一致, 服务器关闭加密通信)
  • 一个由服务器生成的随机数
  • 确认使用的加密方法(如 RSA)
  • 服务器证书

除此以外,如果服务器需要确认客户端身份,就会再包含一项请求,要求客户端提供”客户端证书”

客户端回应(Client Key Exchange)

客户端收到服务器回应之后,首先会验证服务器证书是否可信合法完整(本文后半部分介绍如何验证)

如果不可信合法完整,则向访问者显示一个警告,由其选择是否还要继续通信

如果可信合法完整,则从证书中取出服务器的公钥。然后,向服务器发送下面三项信息

  • 一个随机数。该随机数用服务器公钥加密,防止被窃听
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验

上述的随机数是握手阶段的第三个随机数,又称”pre-master key”。有了它以后,客户端和服务器就同时有了三个随机数,接着双方就用事先商定的加密方法,各自生成本次会话所用的同一把『会话密钥』。
为什么需要三个随机数,有以下解释

“不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机,三个随机数通过一个密钥导出器(Master Secret)最终导出一个对称密钥。
pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。”

此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

服务器的最后回应(Server Finish)

服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”。然后,向客户端最后发送下面信息

  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
  • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验

至此,整个握手阶段全部结束。接下来,客户端与服务器使用会话密钥进行对称加密通信

数字证书体系

CA认证机构

  • 是负责签发, 管理, 认证 数字证书的机构,是公正、权威、可信赖的第三方组织机构
  • 树状结构,根CA认证中心可以授权多个二级的CA认证中心,二级CA认证中心可以授权三级CA认证中心,CA认证中心均可颁发数字证书

数字证书

  • 一种权威的电子文档,用于验证身份
  • 由CA(Certificate Authority)证书授权中心颁发

对于每个CA认证中心/数字证书所有人,他们都拥有

  • 数字证书
  • 公钥 (放入数字证书)
  • 私钥 (自己留存,不公开)

也就是说,如果我们验证了数字证书的合法性,那么就能确定CA认证中心/数字证书的所有人是合法的

如何确认数字证书的合法性

一个数字证书包括以下三个部分

  • 证书内容(F)
  • 加密和HASH算法(A)
  • F的签名(F’) [还记得签名吗 签名 = 私钥作用于(计算哈希(消息))]

要验证证书的合法性你需要:

  1. 找到其上级CA认证中心的数字证书
  2. 从中获取公钥
  3. 将需要认证的证书的F’用2.中获得的公钥解密得到hash值h1
  4. 根据需要认证的证书的F算出hash值h2
  5. 比对h1和h2,如果相等,则此证书合法
  • 如何确认上一级CA的证书合法
    • 继续向更上级的CA确认
  • 根CA的证书合法性
    • 无条件信任
    • 内置于操作系统/浏览器中
    • 随操作系统/浏览器的更新而更新

数字证书的组成

  • (Common Name) 证书所有人的名称,命名规则一般采用X.500格式
  • (Version) 证书版本号
  • (Issuer) 证书的发行机构名称
  • (Serial Number)证书的序列号,每个证书都有一个唯一的证书序列号
  • (Validity) 证书的有效期
  • (Subject’s Public Key Info) 证书所有人的公钥
  • (Certificate Signature Algorithm) 公钥加密算法
  • (Extension) 证书扩展信息 (以上为F)

  • (Certificate Signature Algorithm) 证书所使用的签名算法(A)

  • (Certificate Signature Value)证书发行者对证书的签名(F’)

一般数字证书的检查顺序

  1. 检查证书是否是由浏览器中“受信任的根证书颁发机构”颁发
  2. 检查证书中的证书吊销列表,检查证书是否被证书颁发机构吊销
  3. 检查此SSL证书是否过期
  4. 检查部署此SSL证书的网站的域名是否与证书中的域名一致
  • 1 验证了证书的可信性、合法性和完整性, 2、3 和 4验证了证书的有效性

证书的吊销、证书吊销列表(CRL)与证书状态在线查询协议(OCSP)

  • 证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件, 其包含:

    • 证书颁发机构 (CA) 已经吊销的证书的序列号及其吊销日期
    • 证书颁发机构信息
    • 吊销列表失效时间和下次更新时间
    • 采用的签名算法
  • 证书吊销列表分发点(CRL Distribution Point ,简称 CDP)
    • 包含于数字证书Extension中
    • 是用于下载CRL的地址
  • 证书状态在线查询协议(OCSP)
    证书吊销列表是隔一段时间更新一次,不够实时

    • OCSP能在线查询证书状态
    • 其返回值为:正常、吊销和未知三种
    • 像CDP一样包含于数字证书Extension中
  • 证书的吊销
    • 操作不可逆
    • 一般是因为私钥泄露或被破坏,以及证书颁发机构的不当签发

HSTS(HTTP Strict Transport Security)

HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式

作用

一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。

这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。

网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。

启用HSTS

  • 在服务器响应头中添加 Strict-Transport-Security,可以设置 max-age

客户端行为

  • 在遇见HSTS头后,后面尝试访问这个网站的请求都会自动把HTTP替换为HTTPS直到超过max-age

HSTS Preload List

HSTS Preload List 是一个站点的列表,他将会被通过硬编码写入 Chrome 浏览器中,列表中的站点将会默认使用 HTTPS 进行访问,此外,Firefox 、Safari 、IE 11 和 Edge 也同样一份 HSTS 站点列表,其中包括了 Chrome 的列表

HSTS Proload List 随浏览器更新而更新

申请要求

  • 有一张有效的证书
  • 重定向所有的 HTTP 流量到 HTTPS ( HTTPS ONLY )
  • 全部子域名的流量均通过 HTTPS
  • 在相应的域名中输出 HSTS 响应头

申请链接

2 thoughts on “https简介

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注