05 SSL-TLS四次握手

一: 图解四次握手

二: 数字证书

数字证书是一个电子文档, 其中包含了持有者的信息/公钥/证明证书有效的数字签名. 数字证书室友证书认证机构(CA)来负责签发管理 数字证书的类型有多种,HTTPS使用的是SSL证书

CA组织的结构

  • CA组织顶层是根CA

  • 根CA下可以授权给多个二级CA

  • 二级CA又可以授权给多个三级CA

    • 那么是不是可以无限信任下去呢?

      • 显然不行(Basic Constraint校验漏洞)

      • X.509证书中的Basic Constraint包含了这是不是一个CA机构,以及有效证书路径的最大深度(即,这个CA还能否继续签发CA机构证书及其签发子CA证书的路径深度)

SSL证书市场,主要被Symantec(旗下有VeriSign和GeoTrust)、Comodo SSL、Go Daddy 和 GlobalSign 瓜分了

签发流程

数字证书的签发机构CA,在接收到申请者的资料后进行核对并确定信息的真实有效,然后就会制作一份符合X.509标准的文件。证书中的证书内容包含的持有者信息和公钥等都是由申请者提供的,而数字签名则是CA机构对证书内容进行hash加密后得到的,而这个数字签名就是我们验证证书是否是有可信CA签发的数据。

验证流程

  1. 接收到一份数字证书Cer1后,对证书内容做Hash得到数字摘要H1

  2. 从签发该证书的机构CA1的证书中找到公钥,对证书上的签名进行解密,得到证书Cer1签名的Hash摘要H2

  3. 对比H1 H2 如果相等表示证书没有被篡改(还未知有效性)

  4. CA机构的数字证书是公开的,所有人都可以拿到.这个证书中的数字签名是上一级生成的,所以可以一直验证下去,直到根证书.根CA证书是自验证的(即数字签名是用自己的私钥生成了).合法的根CA证书会被浏览器和操作系统加入到信任CA列表中,这样完成了最终验证

注意: 一定要保护好自己的环境(浏览器,操作系统)中的根CA证书信任列表,信任了根证书就代表任何根证书下的字CA签发的证书,所以不要随便添加根CA证书信任

  • iOS中的验证流程

    • 先获取到需要验证的信任对象

    • 使用系统默认的验证方式验证(自建证书不用,不在信任列表中)

    • 第二步验证通过后就可以直接通过了,建立连接

    • 验证不通过,取消验证流程,拒绝连接请求

参考

http://oncenote.com/2014/10/21/Security-1-HTTPS/ Jaminzzhang博客 http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html 阮一峰 http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html 阮一峰

Last updated