如何获取ssl证书

2021-12-08 21:14:29 浏览数 (1)

在前面的文章中,我们分析了SSL/TLS的一些基本概念和为什么他们安全,尤其提到了公钥和私钥的概念,还有一个很重要的文件,就是CA证书,关于CA证书的官方解释,可以参考百科的解释,这里我们可以简单的认为,CA证书是一个网站的 二维码,这个二维码包括了服务器的一些信息,比如服务器所在的组织、支持的加密算法,还有更重要的公钥信息。

X.509

我们在使用mbedtls时,会发现有X.509的名称,在其他地方也会遇到这个概念,这里我们只做通俗的解释:证书是有专门的认证机构颁发的,所以证书的格式有n多种是,而X.509是一种事实上的证书标准,很多应用程序都支持x.509标准规范。

了解更多x509证书知识

示例证书

我们看到的证书,一般是个文件,名字为 xxxx.crt或xxx.pem,这里我们以阿里云IOT平台SDK中给示例程序使用的 证书举例,直接查看证书内容,如下:

很显然,除了发现字符对的很整齐外,我们是一脸懵逼,完全就是天书,一堆乱码,那么如何解析这个证书内容呢? 前面讲到证书都是有标准格式的(X.509),这个证书是对外发布的,包含公钥的,所以就不存在保密而言,所以我们可以通过 生成证书的 openss 工具反向查看证书,命令如下:

如何把crt转化成pem格式

openssl x509 -in ali_crt.pem -inform pem -noout -text

1

解析后的内容如下:

ubuntu@VM-0-17-ubuntu:/opt/ssl$ openssl x509 -in ali_crt.pem -inform pem -noout -text

Certificate:

代码语言:txt复制
Data:
代码语言:txt复制
    Version: 3 (0x2)
代码语言:txt复制
    Serial Number:
代码语言:txt复制
        04:00:00:00:00:01:15:4b:5a:c3:94
代码语言:txt复制
    Signature Algorithm: sha1WithRSAEncryption
代码语言:txt复制
    Issuer: C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
代码语言:txt复制
    Validity
代码语言:txt复制
        Not Before: Sep  1 12:00:00 1998 GMT
代码语言:txt复制
        Not After : Jan 28 12:00:00 2028 GMT
代码语言:txt复制
    Subject: C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
代码语言:txt复制
    Subject Public Key Info:
代码语言:txt复制
        Public Key Algorithm: rsaEncryption
代码语言:txt复制
            RSA Public-Key: (2048 bit)
代码语言:txt复制
            Modulus:
代码语言:txt复制
                00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b:
代码语言:txt复制
                83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0:
代码语言:txt复制
                63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89:
代码语言:txt复制
                8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c:
代码语言:txt复制
                70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50:
代码语言:txt复制
                15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0:
代码语言:txt复制
                6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2:
代码语言:txt复制
                89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7:
代码语言:txt复制
                54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c:
代码语言:txt复制
                92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2:
代码语言:txt复制
                75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9:
代码语言:txt复制
                c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b:
代码语言:txt复制
                bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91:
代码语言:txt复制
                ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51:
代码语言:txt复制
                63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa:
代码语言:txt复制
                48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a:
代码语言:txt复制
                07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93:
代码语言:txt复制
                90:cf
代码语言:txt复制
            Exponent: 65537 (0x10001)
代码语言:txt复制
    X509v3 extensions:
代码语言:txt复制
        X509v3 Key Usage: critical
代码语言:txt复制
            Certificate Sign, CRL Sign
代码语言:txt复制
        X509v3 Basic Constraints: critical
代码语言:txt复制
            CA:TRUE
代码语言:txt复制
        X509v3 Subject Key Identifier: 
代码语言:txt复制
            60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B
代码语言:txt复制
Signature Algorithm: sha1WithRSAEncryption
代码语言:txt复制
     d6:73:e7:7c:4f:76:d0:8d:bf:ec:ba:a2:be:34:c5:28:32:b5:
代码语言:txt复制
     7c:fc:6c:9c:2c:2b:bd:09:9e:53:bf:6b:5e:aa:11:48:b6:e5:
代码语言:txt复制
     08:a3:b3:ca:3d:61:4d:d3:46:09:b3:3e:c3:a0:e3:63:55:1b:
代码语言:txt复制
     f2:ba:ef:ad:39:e1:43:b9:38:a3:e6:2f:8a:26:3b:ef:a0:50:
代码语言:txt复制
     56:f9:c6:0a:fd:38:cd:c4:0b:70:51:94:97:98:04:df:c3:5f:
代码语言:txt复制
     94:d5:15:c9:14:41:9c:c4:5d:75:64:15:0d:ff:55:30:ec:86:
代码语言:txt复制
     8f:ff:0d:ef:2c:b9:63:46:f6:aa:fc:df:bc:69:fd:2e:12:48:
代码语言:txt复制
     64:9a:e0:95:f0:a6:ef:29:8f:01:b1:15:b5:0c:1d:a5:fe:69:
代码语言:txt复制
     2c:69:24:78:1e:b3:a7:1c:71:62:ee:ca:c8:97:ac:17:5d:8a:
代码语言:txt复制
     c2:f8:47:86:6e:2a:c4:56:31:95:d0:67:89:85:2b:f9:6c:a6:
代码语言:txt复制
     5d:46:9d:0c:aa:82:e4:99:51:dd:70:b7:db:56:3d:61:e4:6a:
代码语言:txt复制
     e1:5c:d6:f6:fe:3d:de:41:cc:07:ae:63:52:bf:53:53:f4:2b:
代码语言:txt复制
     e9:c7:fd:b6:f7:82:5f:85:d2:41:18:db:81:b3:04:1c:c5:1f:
代码语言:txt复制
     a4:80:6f:15:20:c9:de:0c:88:0a:1d:d6:66:55:e2:fc:48:c9:
代码语言:txt复制
     29:26:69:e0

如何查看证书的内容

证书规范

我们就以上述解析后的证书为例,介绍一下证书包含的内容:

  • 版本号(Version Number): 规范的版本号,目前版本为3, 值为0x02 序列号(Serial Number):
  • 由发证机关分配的卫衣序列号,最大不超过20个字节,本例中为:04:00:00:00:00:01:15:4b:5a:c3:9
  • 签名算法(Signature Algorithm): 数字证书锁采用的算法,本例中使用的为:sha1WithRSAEncrypti
  • 颁发者(Issuer): 发证单位的标识信息,可以理解为发证单位的地址、名称等其他信息,这里有一些简称: CN : country Name ST : state or provice name L : locality name O: organization name CN: common name, 这里CN是最重要的一个标识,代表了发证机关的 名称,后面会介绍 有效期(Validity
  • 证书的有效期限,包括起止时间 主题(Subject): 证书拥有者的标识信息(Distinguished Name),与Issuer相似。
  • 公钥信息(SubJect Public Key Info): 所保护的公钥相关的信息: 公钥算法 (Public Key Algorithm)公钥采用的算法; 主体公钥(Subject Unique Identifier):公钥的内容。 颁发者唯一号(Issuer Unique Identifier): 代表颁发者的唯一信息,仅2、3版本支持,可选; 主体唯一号(Subject Unique Identifier): 代表拥有证书实体的唯一信息,仅2,3版本支持,可选 扩展(Extensions,可选): 可选的一些扩展。中可能包括: Subject Key Identifier:实体的秘钥标识符,区分实体的多对秘钥; Basic Constraints:一指明是否属于CA; Authority Key Identifier:证书颁发者的公钥标识符; CRL Distribution Points: 撤销文件的颁发地址;

Key Usage:证书的用途或功能信息。

此外,证书的颁发者还需要对证书内容利用自己的私钥添加签名, 以防止别人对证书的内容进行篡改。

openssl rsa keys/

Validity: 证书有效期,在调试的时候,验证证书中,会验证机器时间是否在证书有效期内,这个容易忽略,毕竟在一些嵌入式机器中,系统时钟不太重要,所以可能不是真实的时钟,这个时候,就会造成证书验证失败。

如何验证证书过期

参考文章:

ssl安全证书知识

convert to PEM

Check SSL Certificate Chain Order with Openssl

Check SSL certificate

two way ssl authentication

create ssl certificate

0 人点赞