非对称加密证书及编码格式简介

一. 证书

    目前总的来说有三种常用的证书格式:X.509证书、PKCS#12证书和PKCS#7证书。X.509证书是最经常使用的证书,它仅包含了公钥信息而没有私钥信息,是可以公开进行发布的,所以X.509证书对象一般都不需要加密。

1. X.509证书

    X.509是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准。X.509证书的格式通常如下:

……相关的可读解释信息(省略)……
---BEGIN CERTIFICATE---
……PEM编码的X.509证书内容(省略)……
---END CERTIFICATE---

    除了---BEGIN CERTIFICATE------END CERTIFICATE---头尾格式外,还可能有这样不同的标识符:---BEGIN X.509 CERTIFICATE------END X.509 CERTIFICATE---或者---BEGIN TRUSTED CERTIFICATE------END TRUSTED CERTIFICATE---

    在OpenSSL实际签发的证书文件中最前面的很多可读的证书明文解释,只是为了增加证书文件的可读性,并不代表真正的数据。在其他软件中,比如Windows软件,可能并不支持这些额外的明文信息,所以,先要将---BEGIN CERTIFICATE---之前的所有可读信息去掉。可以手动删除,也可以使用PEM到PEM的证书格式转换去掉这些明文可读信息。在Windows平台,X.509证书文件的后缀名经常是der、cer或者crt,都是可以被自动识别的。对于OpenSSL来说,后缀名是没有实际意义的。

2. PKCS#12证书

    PKCS#12证书不同于X.509证书,它可以包含一个或多个证书,并且还可以包含证书对应的私钥。PKCS#12的私钥是经过加密的,密钥由用户提供的口令产生。所以,无论在使用PKCS#12证书的时候一般会要用用户输入密钥口令。PKCS#12证书文件在Windwos平台和Mozzila中支持的后缀名是p12或者pfx,如果要在IE或者Mozzila中正确使用自己的证书,那么一般来说都要求转换成包含公钥和私钥的PKCS#12证书导入到相关软件中。

3. PKCS#7证书

    PKCS#7可以封装一个或多个X.509证书或者PKCS#6证书(PKCS#6是一种证书格式,但是并不经常使用)、相关证书链上的CA证书,并且可以包含CRL信息。PKCS#7不包含私钥信息。PKCS#7可以将验证证书需要的整个证书上的证书都包含进来,从而方便证书的发布和正确使用。这样就可以直接把PKCS#7证书发给验证方验证,免去了把以上的验证内容一个一个发给接书方的烦琐了。PKCS#7文件在Windows平台的合法后缀名是p7b

4. PKCS#8证书

    PKCS#8标准是一个非常简单的标准,它主要用于封装私钥和其他相关的属性信息。一般来说,PKCS#8格式的私钥都是被加密的,支持PKCS#5PKCS#12标准定义的算法,当然,私钥也可以不加密。PKCS#8标准一方面可以增强私钥的安全性,另一方面也为用户提供了一种简单的确立信任关系的方式,这主要是基于私钥特别名称和最高层可信者的权威公钥等属性信息。OpenSSL提供的经过PEM编码的PKCS#8标准的文件,分为加密和非加密的两种方式。加密的PKCS#8密钥标识如下:

——BEGIN ENCRYPTED PRIVATE KEY——
——END ENCRYPTED PRIVATE KEY——

    非加密的PKCS#8密钥标识如下:

——BEGIN PRIVATE KEY——
——END PRIVATE KEY——

5. Netscape证书

    Netscape提供了一种名为Netscap证书序列Netscape Cerificate Sequence的格式来封装一系列证书,实际上里面采用了一个PKCS#7格式来封装证书。以便能够一次性地下载或者传输多个数字证书。所以,某些时候,Netscape证书序列可以替代PKCS#7的作用,用来打包一系列证书。Netscape证书序列虽然不一定能够得到微软的支持,但是在其他一些开源软件和Linux软件中却得到了广泛的支持。

6. 其他证书

    证书吊销列表CRL是用户验证证书的重要参考资料,它主要包含了无效的证书列表,告诉用户哪些证书已经吊销或无效的。如果没有CRL,可以选择另一种验证方式,那就是使用在线证书服务协议OCSPOCSP并不总是能够使用,比如你的网络有时候可能不能接通OCSP服务器。CRL是一种相对方使用和独立的解决方案,只要获取了CA中心提供的在有效期内的CRL,基本上就能对证书的有效性进行验证。PEM格式编码的CRL一般包含在一对符号内:---BEGIN X.509 CRL------END X.509 CRL---。也可以使用DER格式保存CRL

二. 证书编码

1. DER

    首先介绍一下ASN.1标准,全称:Abstract Syntax Notation One,这是一种描述数字对象的方法和标准。ASN.1是一种结构化的数字对象描述语言,它包括两部分:数据描述语言ISO 8824和数据编码规则ISO 8825ASN.1的数据描述语言允许用户自定义基本的数据类型,并可以通过简单的数据类型组成更复杂的数据类型。比如:一个复杂的数据对象,如X.509证书,就是在其他一些数据类型上定义的,而其他数据类型又是在更基本的数据类型上建立的,直到回溯到定义的最基本的数据类型。ASN.1提供了多种数据编码方法。包括了BERDERPERXER等。这些编码方法规定了将数字对象转换成应用程序能够处理、保存和网络传输的二进制编码形式的一组规则。目前经常被采用的是BER(Basic Encode Rules)编码,但是BER编码具有编码不唯一的性质,也就是说,一个相同的对象通过BER编码可能会产生几种不同的编码数据。所以,在OpenSSL和其他密码学相关软件中经常使用BER的一个子集DER(Distinguished Encoding Rules)。对于每一个ASN.1对象,使用DER编码得出的二制编码码数据是唯一的,JavaWindows服务器偏向于使用这种编码格式。

2. PEM

    PEM编码全称是Privacy Enhanced Mail,是一种保密邮件的编码标准。Apache*NIX服务器偏向于使用这种编码格式。通常来说,对信息的编码过程基本如下:

  1. 信息转换为ASCII码或其他编码方式,比如采用DER编码。
  2. 使用对称加密算法加密经过编码的信息。
  3. 使用BASE64对加密码后的信息进行编码。
  4. 使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息,头定义的格式形式如下:
Proc-Type:4,ENCRYPTED
DEK-Info:cipher-name,ivec

    其中,第一个头信息标注了该文件是否进行了加密,该头信息可能的值包括ENCRYPTED(信息已经加密和签名),MIC-ONLY(信息经过数据签名但没有加密),MIC-CLEAR(信息经过数字签名但是没有加密,也没有进行编码,可使用非PEM格式阅读),以及CLEAR;第二个头信息标注了加密的算法及对称加密块算法使用的初始向量。例子:

---BEGIN RSA PRIVATE KEY---
Proc-Type:4,ENCRYPTED
DEK-Info:DES-ED3-CBC,86B0167E005535D2
……(加密内容密钥部分)……
---END RSA PRIVATE KEY---

    以上的PEM编码的是RSA(RSA PRIVATE KEY)私钥,该密钥经过了加密ENCRYPTED,使用的是3DESCBC方式(DES-EDE3-CBC),使用的IV向量是86B0167E005535D2

  1. 在这些信息的前面加上如下形式头标注信息:---BEGIN PRIVACY-ENHANCED MESSAGE---,在这些信息的后面加上如下形尾标注信息:---END PRIVACY-ENHANCED MESSAGE---

    OpenSSLPEM编码基本上是基于DER编码之上的,也就是说,它在上述第一步采用的是DER编码,所以,从本质上来说,OpenSSLPEM编码就是在DER编码基础上进行BASE64编码,然后添加一些头尾信息组成的。

3. 编码转换

# PEM转为DER 
openssl x509 -in cert.crt -outform der -out cert.der
# DER转为PEM 
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

    要转换KEY文件也类似,只不过把x509换成rsa,生成CSR的话,把x509换成req

三. 常用文件扩展名及其编码格式

    经过前面的介绍证书可以使用不同的编码格式进行编码,这是比较误导人的地方,虽然我们已经知道有PEMDER这两种编码格式,但文件扩展名并不一定就叫PEM"或者DER,常见的扩展名除了PEMDER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式。

CRT

    CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别。

CER

    还是certificate,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码。

KEY

    通常用来存放一个公钥或者私钥,不一定是X.509证书,编码可能是PEM,也可能是DER。查看KEY的办法:

openssl rsa -in mykey.key -text -noout

    如果是DER格式的话,应该这样了:

openssl rsa -in mykey.key -text -noout -inform der

CSR

    全称:Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请之前也会生成一个私钥,私钥要自己保管好。做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧。查看的办法:

openssl req -noout -text -in my.csr (如果是DER格式的话照旧加上-inform der,这里不写了)

PFX/P12

    predecessor of PKCS#12,对*nix服务器来说,一般CRTKEY是分开存放在不同文件中的,但WindowsIIS则将它们存在一个PFX文件中,因此这个文件包含了证书及私钥,PFX通常会有一个"提取密码",你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX使用DER编码,如何把PFX转换为PEM编码,操作如下:

openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes

    这个时候会提示你输入提取密码,生成pfx的命令类似这样:

openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx -certfile CACert.crt

    其中CACert.crtCA是权威证书颁发机构的根证书,通过-certfile参数一起带进去。这么看来,PFX其实是个证书密钥库。

JKS

    即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫keytool的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS

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

推荐阅读更多精彩内容