什么是数字证书?

数字证书是证书颁发机构(Certificate Authority)签发的用于验证身份的一个文件。

数字证书的结构

可以使用以下命令查看证书内容:

cer,pem,der文件中证书查看方式
① openssl x509 -text -in cert_name.cer -noout 查看文本格式的证书内容
② openssl x509 -text -in cert_name.cer -inform der -noout 查看二进制格式的证书内容
-noout指定不输出证书的Base64编码内容。如果不加,会在输出末尾叫上证书的Base64编码内容。

③ keytool -printcert -file cert_name.cer

查看jks文件中所有证书的信息
keytool -list -v -keystore cert_name.jks

查看p12文件中的证书信息
openssl pkcs12 -info -in cert_name.p12

如下是segmentfault证书的内容。

Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number:
           20:d5:e6:44:7b:aa:49:63:0e:34:4f:3e:9b:9b:3e:cf:bf:33:25:58
   Signature Algorithm: sha256WithRSAEncryption
       Issuer: C=cn, ST=GuangDong, L=Shenzhen, O=Huawei, 
       OU=IT, CN=Huawei Web Secure Internet Gateway CA
       Validity
           Not Before: Nov 17 02:41:13 2019 GMT
           Not After : Nov 16 02:41:13 2020 GMT
       Subject: C=CN, L=\xE6\x9D\xAD\xE5\xB7\x9E, O=\xE6\x9D\xAD\xE5\xB7\x9E\
       xE5\xA0\x86\xE6\xA0\x88\xE7\xA7\x91\xE6\x8A\x80\xE6\x9C\x89\xE9\x99\x90\
       xE5\x85\xAC\xE5\x8F\xB8, CN=segmentfault.com
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
               Public-Key: (2048 bit)
               Modulus:
                   00:bc:e7:b0:b1:35:9e:d9:cb:1d:21:59:49:73:49:
                   33:32:fa:b4:f8:33:c4:16:05:0f:aa:0a:ba:73:98:
                   d5:4b:3d:df:64:0e:47:ff:8d:6d:ab:05:8e:e7:be:
                   85:4e:dd:2c:e3:f5:76:e6:d4:11:5e:ac:c9:b0:02:
                   1d:ef:00:be:b4:0c:9d:c9:a8:c5:da:77:6b:57:b9:
                   5f:c2:b9:e1:40:d3:2c:f6:15:55:b8:44:18:0c:a9:
                   c6:d7:28:2d:ae:66:a9:b7:e9:2a:df:e2:38:67:1f:
                   5a:de:e6:7b:0a:b5:00:8f:66:c3:22:cc:53:55:c2:
                   3b:da:8d:19:ed:89:c5:96:b4:20:de:76:0d:3e:c1:
                   36:b2:e5:43:ac:26:82:59:89:28:c3:9d:ae:86:d0:
                   47:aa:aa:0c:63:10:50:33:96:60:c5:e2:9a:c5:32:
                   09:6c:10:41:8e:c0:5b:9b:d1:6c:35:69:09:91:fd:
                   16:bb:c4:1f:45:89:f3:f5:d1:9c:b7:40:5d:da:9e:
                   53:19:10:fd:e6:40:df:17:f1:1b:ca:b9:8c:1e:13:
                   f2:70:d9:31:07:4b:b1:38:05:9e:e1:9a:3a:c1:14:
                   b3:16:90:a4:8c:25:b8:1f:93:59:e3:90:6d:d6:5a:
                   99:13:dc:b5:2c:9d:19:26:9b:90:62:72:b1:c8:e5:
                   4e:77
               Exponent: 65537 (0x10001)
       X509v3 extensions:
           X509v3 Basic Constraints: 
               CA:FALSE
           X509v3 Subject Key Identifier: 
               53:0D:E1:14:B6:42:B9:CD:15:F6:DE:99:F7:FB:27:B3:B8:AC:76:91
           X509v3 Authority Key Identifier: 
               keyid:30:7A:0D:96:57:E0:09:BE:8A:C0:A8:6B:8F:1E:E1:97:6B:01:7A:6C
               DirName:/C=cn/ST=GuangDong/L=Shenzhen/O=Huawei/OU=IT/CN=Huawei Web 
               Secure Internet Gateway CA
               serial:B4:0F:3B:D5:F1:14:56:66

           X509v3 Key Usage: 
               Digital Signature, Key Encipherment
           X509v3 Extended Key Usage: 
               TLS Web Server Authentication
           X509v3 Subject Alternative Name: 
               DNS:*.segmentfault.com, DNS:segmentfault.com
           X509v3 CRL Distribution Points: 

               Full Name:
                 URI:http://crl.mwginternal.com/crl/
                 com.scur.engine.sslclientcontext.4585/
         f377a43cf3b98fcce412fcf3bbcfe830740f8c16/crl.crl

           Authority Information Access: 
               OCSP - URI:http://ocsp.mwginternal.com/ocsp/com.scur.engine.sslclientcontext.4585/
               f377a43cf3b98fcce412fcf3bbcfe830740f8c16

   Signature Algorithm: sha256WithRSAEncryption
        1d:04:79:fa:80:f1:32:2c:a9:4f:90:e6:1e:96:ac:4b:c8:62:
        5b:e3:e7:6d:73:45:61:32:90:32:fe:d1:2f:0e:d2:d7:e2:63:
        7b:6c:0b:79:c2:a7:30:68:41:27:3e:21:a8:cc:d7:4c:29:0b:
        8d:f7:00:8b:39:ff:68:5f:63:52:49:0a:40:87:f7:94:1d:5d:
        28:a2:09:c3:42:55:4d:db:25:5d:e0:91:34:21:b6:93:34:33:
        7a:2a:18:02:0a:fa:53:e6:0d:31:e7:cb:9c:23:f4:03:74:31:
        e9:92:f9:b2:05:a2:0a:d5:13:86:ac:cf:00:0e:b6:de:a9:6f:
        96:7d:47:dd:42:aa:63:58:bd:3e:9d:3a:9d:3f:a6:b6:48:77:
        86:f2:3f:78:44:af:94:c8:54:f5:c2:56:37:71:4b:c7:16:c5:
        8f:0f:43:23:39:1d:5b:db:f2:f2:1d:de:d5:4d:6f:c5:c6:0c:
        8e:52:4f:16:7c:ef:74:eb:61:cc:d4:9d:6d:a2:62:92:76:1a:
        ba:b2:98:72:bc:7a:5b:58:66:62:97:7e:39:7b:d0:dd:74:54:
        1a:04:cb:a6:a1:31:9a:4d:52:a5:41:fb:2f:bc:8c:24:74:96:
        bf:17:77:7d:34:69:c4:3b:04:2f:33:4c:4e:5c:68:10:f3:68:
        ce:14:6e:4b

X.509是一种通用的证书格式,所有证书都符合ITU-T X.509国际标准。X.509证书包含常规部分和扩展部分。
常规部分:

1. 版本号
2. 序列号
3. 签名算法标识符
4. 认证机构的数字签名
5. 认证机构
6. 有效期限
7. 主题信息
8. 公钥信息
9. 颁发者唯一标识符(可选项)

扩展部分:

1. 发行者密钥标识符
2. 密钥使用
3. CRL(Certificate Revocation List)分布点 指定了可以获取CRL信息的地点
4. 私钥的使用期
5. 证书策略
6. 策略映射
7. 主体别名
8. 颁发者别名
9. 主体目录属性

数字证书的制作过程

使用openssl制作数字证书的过程中会使用到三种文件类型,分别是以.key,.csr,.crt为后缀。

.key文件是私钥文件。

.csr(Certificate Signing Request)文件是证书签名请求文件。这个文件只用在请求证书颁发机构生成数字证书的过程。csr文件包含了公钥和标识名称。

可以通过 openssl req -noout -text -in csr_name.csr查看csr文件的内容

.crt是最终生成的数字证书

证书生成过程 (1).png

使用数字证书如何确保通信过程安全?

在理解数字证书是如何保证通信过程安全之前,我们需要先了解https通信过程是怎么样的。

  1. Client发送https请求到Server
  2. Server发送自己的数字证书给Client
  3. Client使用数字证书中的公钥加密内容发送给Server,Server使用私钥解密Client发送的内容;Server使用私钥加密内容发送给Client,Client使用公钥解密Server发送的数据。

在Client与Server传递数据之前,需要先验证数字证书是否可靠,涉及到两点:

  1. 证书是否合法的且没有被篡改的
    要证明Server发送过来的数字证书没有被篡改,首先需要使用CA的公钥对Server发送过来的证书密文进行解密。解密之后,对解密得到的信息使用摘要算法求职,再将求得的值与CA给的证书中的数字签名进行比较。
    要证明证书是否合法,需要使用证书的上级证书进行验证。浏览器内置了许多CA的根证书,如果没有需要的根证书,需要自己导入。
  2. 证书是否在有效期内
  3. 证书是否被吊销了
    要确定证书是否已经被吊销了,有CRL分发点和OCSP(Online Certificate Status Protocol)两种方式。由于CRL分发点这种方式需要先下载文件,延迟比较大,所以现在更通用的方式是使用OCSP。

在Client与Server传递数据的过程中,使用公私钥加密的方式确保数据是正确的。
未命名文件.png

其中摘要算法是为了保证内容不被篡改。它的实现原理是在数据发送之前对数据使用摘要算法得到一段固定长度的字符串,这段字符串也叫做数字签名。在服务端接收到数据之后,使用同样的摘要算法对数据进行计算得到一段字符串,如果两段字符串相同,则意味着这是内容没有被修改过。


水一水
39 声望5 粉丝

总结经验,提升自己