数字证书与安全

数字证书与安全

在前文《SSL/TLS协议》 中提到过, HTTPS 相比 HTTP 会多两步 SSL 的握手过程, 服务端会下发包含公钥的数字证书(Public Key Certificate). 本文中, 我们来再具体讨论一下证书.

1. 什么是证书 (Certificate) ?

百度百科中对数字证书的词条解释如下:

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字, 提供了一种在Internet上验证通信实体身份的方式, 数字证书不是数字身份证, 而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名). 它是由权威机构 CA 机构, 又称为证书授权 (Certificate Authority) 中心发行的, 人们可以在网上用它来识别对方的身份.

简单点来说, 有这么几点:

  1. 数字证书可以看成一种签名, 例如 https://www.github.com 使用的 DigiCert 证书, 就代表了 github 的签名.
  2. 我们通过 Chrome 访问 github 时, Chrome 浏览器发现这个证书是由权威机构 DigiCert 背书的, 并且在有效期内, 就认为证书/签名可信, 导航栏会展示 "安全" 标记.
  3. 在浏览器和 Web 后台建立 HTTPS 连接时, 会利用证书里的公钥信息, 分别计算得到一份相同的 session key, 来做数据加密, 从而保证了通信安全.

数字证书一般包含以下信息:

  • 证书版本号 (Version)
  • 证书序列号 (Serial Number)
  • 签名算法标识符 (Signature Algorithm)
  • 签发机构名 (Issuer)
  • 有效期 (Validity)
  • 证书用户名 (Subject)
  • 证书持有者公开密钥信息 (Subject Public Key Info)
  • 扩展项 (extension)
  • 签发者唯一标识符 (Issuer Unique Identifier)
  • 证书持有者唯一标识符 (Subject Unique Identifier)
  • 签名算法 (Signature Algorithm)
  • 签名值 (Issuer Signature)

按照认证的级别, 数字证书还可以分为这三种:

  • DV, Domain Validation, 面向个人用户, 通过 whois 的邮箱验证, 例如 lets encrypt 提供的免费证书.
  • OV, Organization Validation, 面向企业用户, 验证除了邮箱之外, 还需要公司授权, 例如 百度 使用的 GlobalSign 证书.
  • EV, Extended Validation, 除了 OV 的要求外, 还要求企业提供金融机构的开户许可, 要求很高, 例如 Github 使用的证书.

有个SSL证书在线检测工具, 使用很方便.

2. 数字证书是从哪里来的?

上文讲到, 一般由权威机构(Certificate Authority, CA)签发, 授权给个人/企业用户使用.

在 Mac OS 下使用 Chrome, 打开 "设置" - "管理证书", 会打开 "钥匙串访问", 可以看到本机上所有的数字证书, 如下图:

3. 怎么判断数字证书是有效的?

正常来说, 操作系统或者浏览器会校验这些条件:

  • 颁发证书的 CA 是否在受信任的范围
  • 证书的有效期
  • 证书的使用者
  • CA 的公钥和证书的签名是否能匹配

例如, 我们通过 Chrome 访问 12306.cn 时, 通过 "开发者工具" - "Security" - "View Security" 可以看到证书的信息:

这个证书由 DigiCert SHA2 Secure Server CA 颁发给 *.12306.cn 使用, 有效期是 2017/11/29 - 2017/12/4.

切换到 "证书路径" 标签页:

DigiCert SHA2 Secure Server CA 持有的证书是 DigiCert Global Root CA 颁发的, 而 DigiCert Global Root CA 是受信任的根 CA, 自己给自己颁证书.

Chrome 再计算发现证书的签名和公钥信息能对的上, 上述的校验条件都满足, 所以, 给出了安全提示:

4. 怎么知道哪些是正规的 Root CA?

Wiki 中提到:

在密码学和计算机安全领域, 根证书 (root certificate) 是属于根证书颁发机构 (CA) 的公钥证书, 是在公开密钥基础建设中, 信任链的起点. 根证书没有上层机构再为其本身作数字签名, 所以都是自签证书. 许多应用软件 (例如操作系统、网页浏览器) 会预先安装可被信任的根证书, 这代表用户授权了应用软件代为审核哪些根证书机构属于可靠, 例如是公认可靠的政府机关 (如香港邮政) 、专职机构 (如 Google、Lets Encrypt、CAcert.org、Comodo、DigiCert、GlobalSign、Verisign) 等.

以微软的 Windows 7 操作系统为例, "运行" - "mmc" - "文件" - "添加或者删除管理单元" - "添加证书", 可以看到 Win7 默认内置的受信任 Root CA, 包括 DigiCert, GoeTrust, Go Daddy 等.

Root CA 自身的安全防护非常重要, 一旦外泄, 可能导致整个信任链被摧毁. 2011年, 荷兰 CA DigiNotar 的服务器被黑客入侵, 签发了数百张伪造证书, 事情曝光后各大厂商陆续将 DigiNotar 从受信任列表移除, 直接导致 DigiNotar 完蛋.

在信任链设计中, 绝大部分的根证书都不会直接为客户签名, 而是先签名一个 (或多个) 中继证书, 再由中继证书为客户签名, 这可以加强控管能力及控制一旦签名私钥被泄时的损失.

上面 12306 的例子中, DigiCert SHA2 Secure Server CA 所持有的就是一个中继证书.

5. 如果我要建个 HTTPS 网站, 必须要找 Root CA 购买证书么?

如果只是测试, 可以使用 OpenSSL 自建 CA 颁发证书, 因为不涉及对外, 直接导入到操作系统的可信任列表即可, 具体过程可以参考: 《细说 CA 和证书》

如果是对外服务, 也有免费的选择: 为了推广HTTPS协议, 电子前哨基金会EFF成立了 Lets Encrypt, 提供免费证书, 具体使用过程可以参考官方工具.

6. 证书还有哪些使用场景?

除了 HTTPS 建站之外, 还有这些:

  • 基于 HTTPS 的 RESTful API, 也要用到证书, 提供 HTTPS 服务.
  • ToB Web 应用, 在一些敏感操作场景下, 需要做 SSL 双向认证, 这时候要求客户端也拥有证书 (一般都是之前从网站上申请后下载安装的), 并和服务器交换证书.

延伸阅读

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

数字签名是什么?

今天,我读到一篇好文章。 它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到...

3205
来自专栏Vamei实验室

协议森林17 我和你的悄悄话 (SSL/TLS协议)

TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的通信协议。它的前身是SSL协议(安全套接层协议,Secure ...

2037
来自专栏Vamei实验室

协议森林17 我和你的悄悄话 (SSL/TLS协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载。

1102
来自专栏安智客

密码技术之数字签名

我们知道,散列函数解决了消息的完整性防止篡改,消息认证码解决的是消息发送者是否被伪装的问题,但是消息的防抵赖性如何保证呢?因为发送接收双方都共享一个密钥,因为对...

1542
来自专栏菜鸟计划

HTTPS科普(转) 为什么需要https

为什么需要https HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。 举个最常...

3785
来自专栏Java学习网

也许,这样理解HTTPS更容易

 摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有...

3645
来自专栏北京马哥教育

大型网站的HTTPS实践(一)---HTTPS协议和原理

1前言 百度已经于近日上线了全站HTTPS的安全搜索,默认会将HTTP请求跳转成HTTPS。本文重点介绍HTTPS协议,并简单介绍部署全站HTTPS的意义。 ...

3326
来自专栏架构师之路

从嘿,今晚...谈消息安全传输中的技术点

和女/男票聊了一些私密的话,成天担心消息会不会被泄漏,始终不放心,看完此文,消息传输安全性的来龙去脉,终于略知一二了。 一、初级阶段:信息裸传 ? 特点:在网络...

4116
来自专栏枕边书

再谈加密-RSA非对称加密的理解和使用

前言 随着互联网越来越渗透入我们生活的方方面面,各种私密信息在网络中传播,为了保证信息的真实可靠,在我们对其安全性的要求也越来越高,对此,加密是一个永远不过时的...

4359
来自专栏java达人

关于数字证书的另一篇好文章

 最近看会Session hijack的东西,劫持现在已经实现,yahoo等一些没有用Https协议的邮箱被成功地劫持了(迟下发文章),由于对Https不熟悉,...

2078

扫码关注云+社区

领取腾讯云代金券