TLS初探(2)证书简介

      证书可以理解为签发方信息、拥有者信息、公钥以及签名(由签发方私钥签名)的集合(当然还有额外信息)。校验证书是否可信,实际就是检验该证书是否是由合法的签发方签发,验证的方法就是首先通过签发方信息找到对应的签发方证书,利用签发方证书中的公钥去校验签名是否正确。

       从上述验证方法可以看出,实际上证书是否可信是由其签发方的证书来进行校验的,而签发方的证书的可信是由上一层签发方的证书来校验的,如此就形成一条证书链,而最顶层的就是常说的根证书。此外有也许会问如果浏览器中找不到签发方证书怎么办?而且签发方确认是可信的,此时在TLS协商的时候,可以下发证书链。       

       随便搜一下TLS证书,会出现一大堆关键字:X.509, p12, pfx, pkcs, pem, csr, cer, crt, jks, crl等,这么繁杂一下就让人想从入门到放弃了,不过还是耐心梳理一下。


(一)X.509

X.509就是一个广泛应用的数字证书标准,简单来说就是定义了数字证书里面包含哪些字段,如何存储,可以参照一下RFC5280;协议中定义的参数都是采用DER编码(X.690),DER编码可以理解为一种TLV(Tag Length Value)格式编码。

       以一个实际的证书内容为例,如下所示:

Certificate:

    Data:

       Version: 3 (0x2)  //表示为X509 v3版本证书

       Serial Number: 1 (0x1)  //序列号,签发时需保证同一签发方所签发的每个证书都一个唯一的Serial Number

       Signature Algorithm: sha256WithRSAEncryption  //签名算法,先进行SHA256摘要后,使用签发方私钥进行RSA加密

       Issuer: C=CN, ST=JS, L=NJ, O=Dreamer, OU=Dreamer, CN=Dreamer  //签发方DN(Distingushed Name),见后续说明

    Validity //证书有效期

            Not Before: Jul 29 14:02:13 2018 GMT

            Not After : Jul 26 14:02:13 2028 GMT

    Subject: C=CN, ST=JS, O=Dreamer, OU=JM, CN=*.dreamer.com  //证书拥有方DN(Distingushed Name)

Subject Public Key Info:  //证书公钥信息

            Public Key Algorithm: rsaEncryption

                Public-Key: (1024 bit)

                Modulus:

                    00:c5:b8:68:a2:9c:bd:11:0c:83:34:a2:97:a5:8e:

                    72:75:2a:bc:f4:75:fc:d0:a3:47:7d:e4:6b:4f:ed:

                    dd:79:7c:0f:ce:6e:e7:d2:7d:10:cd:e8:07:56:34:

                    58:e3:2b:2e:c9:e3:7f:ae:27:2d:f7:a3:17:6f:dd:

                    65:d7:f8:4f:d0:be:9c:3b:9b:ea:ed:86:d2:19:67:

                    81:60:53:64:c9:d1:be:17:7d:5d:7f:cc:58:1d:b6:

                    e1:51:0d:ba:32:ac:4d:73:a4:fc:8f:6a:79:f9:44:

                    25:03:b6:1c:3e:0f:e9:b8:36:b1:07:07:59:54:40:

                    d7:2c:52:ab:68:fe:ed:e2:6f

                Exponent: 65537 (0x10001)

X509v3 extensions://v3版本扩展信息

            X509v3 Basic Constraints:  

                CA:FALSE  //表示证书拥有方是否是CA机构,可签发证书,如为True,则还可以添加一个pathLengthConstraint来显示签发链的长度

            Netscape Comment: 

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:  //证书拥有方密钥ID,对于CA: TRUE时需要加入此扩展

                67:30:EE:FB:39:A4:92:56:9C:1A:E8:94:10:A4:3B:EA:EC:2E:04:9E

            X509v3 Authority Key Identifier:  //证书签发方所对应密钥ID,用于签发方的公钥查找(特别是存在多个密钥时)

                DirName:/C=CN/ST=JS/L=NJ/O=Dreamer/OU=Dreamer/CN=Dreamer

                serial:A0:09:E3:A9:D2:C1:86:7C

             X509v3 Subject Alternative Name:  //证书拥有方的别名,此处用户多域名证书的签发

                DNS:*.example.com, DNS:*.jm.com

Signature Algorithm: sha256WithRSAEncryption  //证书签名信息

         91:db:9b:0c:9b:6e:68:24:d3:2f:3a:67:b5:c0:6c:f0:c8:4c:

         f8:87:86:93:eb:fc:dc:ef:dc:7b:2e:2c:0e:7b:52:23:4d:de:

         d9:69:a8:ee:ae:aa:14:04:ca:1a:03:87:fe:11:60:fe:16:8f:

         87:9d:9e:d0:3a:be:33:03:f6:25:8a:10:37:f8:90:9d:67:5c:

         36:a6:1e:3c:59:d9:8f:eb:22:0e:f7:3c:7d:47:10:9b:0b:03:

         f0:8c:70:b0:3c:40:c6:5d:cc:6b:ba:40:ce:89:04:c7:3c:be:

         af:bd:1d:94:6b:83:39:29:74:de:12:fc:63:0d:0f:39:31:3b:

         48:fd

除了上述的注释说明外,需要补充的几点如下:

1. Subject和Issuer均为DN格式,常见格式:C=国家, ST=省市, L=区县市, O=组织机构, OU=组织单位, CN=通用名称。

2. DN是证书链查找的关键,验证是会根据Issuer的DN去匹配签发方的证书,具体的匹配方法是比较DN的数量以及各DN参数值,相对来说还是比较严格的

3. DN中的CN通用名称一般表现为域名,如需支持子域名,例如abc.server.com, bcd.server.com,可使用泛域名形式*.server.com

4. Subject Alternative Name扩展字段可用于多域名证书,后续将会具体介绍多域名证书的签发。


(二)证书编码格式(DER&PEM)

       X.509中说明证书各个字段编码均适用DER格式进行编码,最终实际上整个证书就是一个纯二进制格式文件,那PEM编码又是什么格式呢?

       按照网上普遍说法,X.509有DER和PEM两种编码格式,其实这种说法个人认为有点歧义,实际上这两种编码格式并不在一个层面上。前面说过DER一种纯二进制TLV格式的编码协议,那PEM是否也是一种类似TLV的键值型的编码格式呢?其实PEM并没有去处理X.509的内部参数,而是在X.509进行DER编码之后,对二进制数据进行了BASE64编码,然后加上文件头尾即可,如下所示:

-----BEGIN CERTIFICATE-----

BASE64编码内容

-----END CERTIFICATE-----

       具体区分DER还是PEM也很简单,打开有乱码的是DER格式文件,打开类似上面格式的就是PEM格式证书文件。


(三)证书相关扩展名

        扩展名是比较容易误导人的地方,除了.der或.pem后缀外,还有以下常见后缀:

        -- crt:常见于*nix系统,大多是PEM编码,也可能是DER编码

        -- cer:常见于Windows系统,大多是DER编码,也可能是PEM编码

        -- key:用户存放密钥信息,和证书一样,可能是DER编码,也可能是PEM编码;可参照PKCS#1(RFC8017)查看其具体字段和定义;但密钥明文存储方式有所危险,一般可以使用PKCS#8格式(RFC5958)进行密钥的加密,即设置一个提取密钥

        -- csr:证书签发请求,其实与证书内容相似,但不包含签发方信息,签发方根据CSR并添加自身的签发信息,从而生成证书文件,详情可参照(PKCS#10 RFC2314)

        -- pfx/p12:实际上就是将证书和私钥一并打包成一个文件,并且设置“提取密码”

        -- jks/keystore/truststore: 一般常见于JAVA相关应用,实际上也是和p12类似,将证书和私钥一并打包并设置“提取密码”,至于keystore和truststore只是概念上的区别,keystore一般用户表示用户或服务器证书,而truststore一般表示CA证书。


    想要深入研究的童鞋可以看一下PKCS协议族,上述的key、csr、pfx/p12等都是该协议族中定义的相应扩展。后续将会结合本次内容讲解以下证书生成。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 一. 证书 目前总的来说有三种常用的证书格式:X.509证书、PKCS#12证书和PKCS#7证书。X.509证书...
    飘荡着呢阅读 3,006评论 0 1
  • 数字证书就是网络通讯中标志通讯各方身份信息的一系列数据,其作用类似于现实生活中的身份证。它是由一个权威机构发行的,...
    拉肚阅读 21,096评论 1 17
  • 检查点参数化输出值正则表达式脚本拆分成多个action 检查点: 将指定属性的当前属性与该属性的期望值进行比较的验...
    b099e4f1c471阅读 118评论 0 0
  • 夏儿啊 绕过柳树条 绕过老山腰 绕过莲花池 一会儿停在树梢笑 一会儿追着蚂蚁跑 到了你家门口 先拍拍灰尘 扯扯衣裳...
    妃卿阅读 155评论 2 2
  • 来一场说走就走的旅行。 万科管家发来入学登记通知,于是就有了这场说走就走的旅行,喜佗兴奋得食不甘味夜不能寐。。。。...
    疯甜阅读 360评论 0 2