什么是证书?证书的使用场景。

证书标准规范X.509、颁发证书的认证机构。

公钥基础设施PKI,对PKI的攻击方法和对策。

无论是数字签名、证书,还是认证机构的层级结构,都不可能在完全不可信的状态下创造出信任关系

证书

公钥证书(Public-Key Certificate,PKC),包含内容有姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certificate Authority, CA)施加数字签名。

公钥证书也简称为证书

认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或组织。

认证机构中有国际性组织和政府所设立的组织,也有通过提供认证服务来盈利的一般企业,个人也可以成立认证机构。

认证机构必须是可信的

证书的使用方式:

sequenceDiagram participant 发送者 participant 认证机构 participant 接收者 autonumber 接收者 ->> 接收者: 生成密钥对 接收者 ->> 认证机构: 公钥 认证机构 ->> 认证机构: 使用自己的公钥对接收者的公钥进行数字签名 认证机构 ->> 发送者: 获取接收者的证书 发送者 ->> 发送者: 使用认证机构的公钥验证数字签名 发送者 ->> 接收者: 公钥加密的消息 接收者 ->> 接收者: 用私钥解密消息

证书标准规范

证书的标准规范中使用最广泛的是由ITU(International Teleecommunication Union,国际电信联盟)和ISO制定的X.509_规范。

下面是一个自签名证书的信息:

> openssl x509 -text -noout -in client.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 3 (0x3)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = CN, ST = SH, O = Personal, OU = None, CN = thirdca, emailAddress = **
        Validity
            Not Before: Apr  5 13:49:07 2023 GMT
            Not After : Apr  2 13:49:07 2033 GMT
        Subject: C = CN, ST = SH, O = Personal, OU = None, CN = client, emailAddress = **
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d9:69:11:5f:48:07:f4:1c:76:46:7d:d9:e0:23:
                    43:aa:7a:52:65:1b:87:44:7c:4e:27:2d:98:38:2c:
                    4c:cb:c8:64:86:04:a9:a0:ec:5c:5c:05:4e:53:a0:
                    f3:19:a6:6b:03:1a:d3:2e:c4:db:46:4d:09:e2:9b:
                    70:7e:95:69:0b:7c:d5:76:1f:c0:f5:91:ed:68:b1:
                    c7:77:7d:3d:16:6a:59:32:f4:a2:4f:6b:de:42:48:
                    3b:11:ed:77:7c:1f:08:f8:a1:eb:ef:8e:89:1f:b1:
                    dd:5b:e2:e9:32:6a:7f:79:ad:8c:09:c8:c4:3c:b1:
                    26:11:ce:2c:03:87:fb:e6:ed:94:a2:a1:45:14:94:
                    65:f4:cb:0c:cd:86:ed:69:dd:83:dc:bb:c0:99:36:
                    c1:75:cf:a4:94:ad:4f:f7:2f:53:bb:cc:45:81:e6:
                    7d:d9:67:89:ee:2b:98:a5:39:60:f7:0f:c4:96:d5:
                    42:8b:a9:83:cb:29:61:20:12:9c:c0:9f:85:b7:fb:
                    a5:7f:e0:f7:74:ca:d0:d7:b2:76:f2:5c:a3:36:3f:
                    e7:9a:e7:05:b4:22:04:bd:c9:61:ae:78:6c:95:78:
                    6c:44:d7:35:83:36:96:a3:b8:62:a4:b7:08:ef:6e:
                    83:1d:de:08:ea:84:7b:40:6e:7b:64:41:8e:8c:ae:
                    2c:3f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Key Identifier:
                DC:61:87:B0:3A:A7:A3:66:32:D3:89:11:21:66:D3:E6:C7:E2:9C:2B
            X509v3 Authority Key Identifier:
                21:B6:23:5F:9C:FE:B6:23:2B:1D:49:79:7D:E8:56:EE:9D:66:27:28
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        2c:81:32:8c:b3:a2:26:b8:8c:ad:33:70:62:39:a8:3a:b2:63:
        0b:ee:fe:5f:5c:66:c9:5d:bd:88:9d:11:ee:a1:6f:b1:39:ac:
        2e:9f:79:ce:9e:21:6c:e8:46:c5:6e:04:a7:9d:cd:12:1a:db:
        92:fc:a9:83:f6:99:9b:4d:a5:a4:28:57:7e:d2:f1:9d:e6:f4:
        5c:ce:13:1d:74:34:61:9f:9e:df:4c:b1:6f:3d:74:ae:ce:9a:
        3f:e8:02:ba:62:04:c9:78:0e:15:86:f8:57:df:0d:ce:b7:27:
        c5:dc:06:28:df:e7:fc:f3:8d:c3:a5:6c:03:67:f2:ac:be:77:
        0c:92:5a:d9:92:ac:1a:03:5c:e4:da:03:e7:0c:b4:e7:8a:70:
        6c:f6:8c:55:6e:91:b4:39:9d:c3:d2:a5:83:6e:b0:f7:f6:8c:
        36:ed:f5:e5:21:e6:79:7d:2a:24:24:0f:c6:3e:f6:e2:09:d3:
        50:5b:95:fb:8f:91:6c:9c:86:4c:16:d3:35:50:b2:0f:e3:ae:
        d2:16:aa:98:2e:a3:2d:e1:0d:11:cd:7c:54:47:a1:cf:ba:c0:
        06:4b:a9:36:fe:b2:ed:bb:10:69:d0:34:5f:fa:cd:ca:e6:52:
        be:cc:db:10:94:ab:ed:55:b5:95:cd:28:4e:9c:d6:78:09:15:
        1d:9c:8f:d6
术语
证书序列号Serial Number: 3 (0x3)
证书颁发者Issuer: C = CN, ST = SH, O = Personal, OU = None, CN = thirdca, emailAddress = **
公钥所有者Subject: C = CN, ST = SH, O = Personal, OU = None, CN = client, emailAddress = **
有效期起始时间Not Before: Apr 5 13:49:07 2023 GMT
有效期截至时间Not After : Apr 2 13:49:07 2033 GMT
数字签名算法Signature Algorithm: sha256WithRSAEncryption

PKI

公钥基础设施(Public-Key Infrastructurre)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称,简称PKI。

PKI只是一个总称,并非指某一个单独的规范或规格。

RSA公司指定的PKCS(Public-Key Cryptography Standards,公钥密码标准)系列规范也是PKI的一种。

X.509规范也是PKI的一种。

PKI的组成要素

用户认证机构仓库

用户分为两种:一是使用PKI注册自己公钥的人;另一种是使用已注册公钥的人。

注册公钥的用户所进行的操作:

  1. 生成密钥对
  2. 在认证机构中注册公钥
  3. 向认证机构申请证书
  4. 根据需要申请作废已注册的公钥
  5. 解密接收到的密文
  6. 对消息进行数字签名

使用已注册公钥的用户所进行的操作:

  1. 将消息加密后发送给接收者
  2. 验证数字签名

认证机构(Certification Authority,CA)是对证书进行管理的人。

所进行的操作如下:

  1. 生成密钥对(Information on RFC 7292)
  2. 在注册公钥时对用户本人身份进行认证
  3. 生成并颁发证书
  4. 作废证书

仓库(repository)是一个保存证书的数据库,PKI用户在需要的时候可以从中获取证书,也叫证书目录

认证机构的工作

生成密钥对

生成密钥对有两种方式:一种由PKI用户自行生成;一种由认证机构生成。

认证机构生成时需要将私钥发送给用户,具体的发送方法见Information on RFC 7292

注册证书

在用户自行生成密钥对的情况下,用户会请求认证机构来生成证书。申请证书时所使用的规范由Information on RFC 2986定义。

认证机构根据其认证业务准则(Certification Practice Satatement,CPS)对用户的身份进行认证,并生成证书。

生成证书需要使用认证机构的私钥来进行数字签名。生成的证书格式是由X.509定义的

作废证书与CRL

当用户的私钥丢失时,认证机构需要对证书进行作废(revoke)。

由于用户会保存证书的副本,所以认证机构作废证书时,需要制作一张证书作废清单(Certificate Revocation List),简称CRL

CRL是认证机构宣布作废的证书一览表,是一张已作废的证书序列号的清单,并由认证机构加上数字签名。

PKI用户需要定时从认证机构获取最新的CRL,然后查询自己要用于验证签名的公钥证书是否作废。

证书的层级结构

对于认证机构的公钥,可以由其他的认证机构施加数字签名,从而对该认证机构的公钥进行验证,即生成一张认证机构的公钥证书。

一个认证机构来验证另一个认证机构的公钥,这种认证关系可以一直迭代,但必须要要有终点。这个终点所在的认证机构一般称之为根CA(RootCA)。

根CA一般都是自己对其公钥进行数字签名,这种行为称为自签名(self-signature)。

攻击

公钥注册之前进行攻击

证书是认证机构对公钥及其持有者的信息加上数字签名的结果。

加上数字签名之后,难以攻击,因此攻击者可以在认证机构进行数字签名之前,将公钥替换。

预防办法:接收者在发送公钥时,使用认证机构的公钥将其进行加密。

窃取认证机构的私钥进行攻击

认证机构记录了自己签发的证书的序列号,可以判断某个证书是不是该机构自己签发的。

如果认证机构的私钥被窃取,认证机构就需要将私钥泄露通过CRL通知用户。

钻CRL空子进行攻击

利用接收者私钥泄露到认证机构发布CRL的时间差实施攻击。

疑问

为什么需要证书

通过不可信途径获取公钥时,可能会遭受中间人攻击。

从认证机构获取公钥,可以降低遭到中间人攻击的风险。因为带有公钥的证书是经过认证机构继续宁签名的。(但认证机构本身的公钥是否可信,就需要其他判断了)

  1. 如果能够取得可信的公钥,则不需要认证机构。
  2. 当持有可信的认证机构公钥,并相信认证机构所进行的身份确认的情况下,则可以信任该认证机构颁发的证书以及通过该途径获取到的公钥。