HTTPS 小记

HTTP已过时, 全球HTTPS时代已来

Posted on September 20, 2016

概述

  • SSL: Secure Sockets Layer
  • TLS: Transport Layer Security是SSL的升级版, 可以理解为SSL 3.1
  • HTTPS: HTTP over SSL 或 HTTP over TLS

HTTPS 主要为了消除以下风险:

  • 窃听
  • 篡改
  • 冒充

实现

  • 防止服务器公钥被篡改

    将公钥放在数字证书中。只要证书是可信的,公钥就是可信的

  • 公钥加密计算量太大,如何减少耗用的时间

    每一次对话(session),客户端和服务器端都生成一个”对话密钥”(session key),用它来加密信息。由于”对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密”对话密钥”本身,这样就减少了加密运算的消耗时间

    也就是每次session, 需要一次握手

  • 握手过程

    直接看这个吧: http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

    每次握手后生成一个对话秘钥, 本次会话基于这个秘钥, 使用对称加密

    1) client发出请求: 协议版本, 随机数1, 支持加密算法, 支持的压缩算法

    2) server 返回: 确认版本, 随机数2, 证书

    3) client通过CA的公钥, 对证书进行数字签名验证, 得到server 的公钥(私钥加密公钥解密), 然后返回server: 随机数3, 编码改变等信息

    4) server 最后回应

    5) client, server 通过会话密钥进行对称加密通信

  • HTTPS 为什么慢

    HTTP耗时 = TCP三次握手
    HTTPs耗时 = TCP三次握手 + SSL四次握手

    SSL握手耗时可能是TCP握手的三倍


关于证书

  • 证书申请过程(私钥加密公钥解密):

    1) server 向CA申请

    2) CA用CA的私钥对server公钥进行数字签名

    3) server 公钥, 上面的数字签名, 申请者相关信息, 构成server 证书

  • 证书使用过程

    1) client和server通信时, server 将证书发给client

    2) client通过CA的公钥, 对证书进行数字签名验证, 得到server 的公钥.

    3) 使用此公钥进行通信

    第二步中, 权威CA的公钥常常会内置在浏览器中

  • 证书和CA认证机制: 责任链

    服务器S0有一个证书,说我是谁谁谁,这个证书由上级签发机构S1核准,如果你本地有这个S1的证书,那验证一下就可以了。如果没有,就问S1的签发机构S2。直到根的签发机构。如果本地认证找到了其中任何一级的证书,就认为S0是靠谱的。否则就是不靠谱。S0 -> S1 -> S2 -> … -> Root CA

  • 客户端证书

    客户端也是可以有证书的,让服务器知道,正在通信的客户端是可信任的

    比如网银U盾

解析证书: openssl x509 -in ./your_crt.crt -text

证书格式:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2593678923125831578 (0x23fe993d1a55379a)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, O=tencentyun, CN=cls-7e560bjw
        Validity
            Not Before: Apr 16 02:43:40 2018 GMT
            Not After : Apr 16 02:43:40 2038 GMT
        Subject: C=CN, O=tencentyun, CN=cls-7e560bjw
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ......
                    ......
                    ......
                    ......
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         ......
         ......
         ......
         ......

证书结构:

Certificate ::= SEQUENCE {
  tbsCertificate TBSCertificate, -- 证书主体
  signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识
  signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.
}
  • Data: 对应 tbsCertificate
  • signatureAlgorithm: 摘要和签名算法
  • 其他数据: SignatureValue, CA对使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值

其中证书主体:

TBSCertificate ::= SEQUENCE {
  version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号
  serialNumber CertificateSerialNumber, -- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书
  signature AlgorithmIdentifier, --证书签名算法标识
  issuer Name, --证书发行者名称
  validity Validity, --证书有效期
  subject Name, --证书主体名称
  subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥
  issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- 证书发行者ID(可选),只在证书版本2、3中才有
  subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- 证书主体ID(可选),只在证书版本2、3中才有
  extensions [3] EXPLICIT Extensions OPTIONAL -- 证书扩展段(可选),只在证书版本3中才有
}
  • Version: 证书版本号, 目前有三个版本: v1, v2, v3
  • Serial Number: 整数类型, 证书唯一的编号, 对于不同的CA, 编号无法预测.
  • Signature Algorithm: 摘要和签名算法, (用with连接), 证书的验证方, 比如浏览器, 会根据这2个算法提示验证证书签名, 这个通常需要和signatureAlgorithm一样
  • Issuer: CA 机构的信息
    • C: 国家
    • O: 组织
    • CN: 子组织名
  • Validity: 证书有效期
  • subject: 服务器实体信息
    • C: 国家
    • O: 组织
    • CN: 服务器实体域名 (早期会使用CN和url中的域名进行对比校验, 不过后续一张证书可能对应多个域名, 因而不用CN校验)
  • Subject Public Key Info: 服务器实体的公钥信息
    • Public-Key: (2048 bit): 公开密钥使用的算法
    • Modulus: 公钥值
  • extensions: CA:TRUE代表的是签发的是CA机构(自己是CA机构),CA:FALSE代表的是签发的是证书(改成false就不能去签发其他CA)

参考

2016-11-24 更新: