TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2

来源:互联网 发布:12306泄露数据库下载 编辑:程序博客网 时间:2024/06/14 05:33


证书格式


编码格式

证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。

总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAINEND包括。(老司机可能就发现了,有点像长了一点的迅雷下载链接)

  至于是否换行完全取决于习惯,但是我的确也碰到过有些解析程序要求一行不能超过特定字符。


  所谓二进制证书,也就是原始的asn1格式的证书,如果熟悉asn1编码方式,直接看2进制会看到明显的’30 82 ...’asn1的类型长度标识,这里不再赘述,但是二进制不适合网络传输,所以普遍采用base64将其编码。

  其次还有一种格式叫pfxPKCS12)格式的证书,与其说是证书,不如叫它证书+私钥的package比较合适,一个文件即包含证书(证书链),也包含私钥。pfx本身可被加密,所以可能需要输入密钥才能解析pfx

  另一种证书格式称之为p7b,他是多个证书组织成的格式(一般是证书链)。在windows下可以由windows自带程序解析,我们可以提取出其中各个证书。


私钥格式

私钥格式也分为二进制和base64编码,不再赘述。

但是私钥本身可以被加密。


被加密的私钥格式如下




当采用pfx格式证书时,由于pfx格式文件本身可能需要密钥来解密,而里面的私钥也可能需要密钥解密,所以解析程序往往可能让你输入2个密钥,这2个密钥是用来解密不同层级数据的,注意不要感到疑惑或者将两者混淆。


证书类型

签名算法一般采用RSA或者ECC。较老的有DH算法等,目前已不多见。

但是注意,被称为RSA证书并不是指证书是被RSA算法签名的,而是指证书本身的公钥、私钥是RSA。同理ECC证书指的是证书的公钥和私钥具有椭圆曲线属性。证书的签名值并不影响证书的属性。

例如,上级证书AECC证书,即证书公钥私钥是ECC属性的,那么由它生产的证书B的签名必然采用ECC签名,但是B本身可以使用RSA公钥私钥或者ECC公钥私钥。


证书拓展

使用wireshark解析SSL证书,我们可以清晰的看到数字证书各个字段,这里我们关心证书中的extension



1keyusage/extkeyusage

  用以描述证书的用法,改证书可以进行证书的签发?CRL的签发?客户端认证?服务器认证?一般严格的CA机构都谨慎设置这个字段,避免自己签发的证书被滥用。

2subectkeyidentifier

  自己公钥进行hash运算后的值,可以快速判断证书。

3authoritykeyidentifier

  上级证书的公钥进行hash运算后的值。一般来说,两个上下级关系的证书,下级证书的authoritykeyidentifier值就是上级证书的subectkeyidentifier值。

4subjectAltname

  证书的别名。例如一个网站有多个域名,例如www.baidu.comwww.hao123.com对应的都是一个服务器,common name只能写一个,为了不让浏览器告警,可以在subjectAltname拓展中添加这个网站的其他域名。浏览器收到这个证书,除了判断hostcommon name是否一致外,也会判断hostsubjectAltname是否有一致项,有的话就成功。

5basicConstraints

  一般CA证书里面caTure










原创粉丝点击