SSL 数字证书的标准、编码以及文件扩展名

你是否经常像我一样对于 SSL 数字证书的各种编码格式和扩展名诸如 .pem、.der、.crt、.cer、.csr、.p12、X.509 等表示很困惑,这篇文章将告诉你答案。
我们知道,在 HTTPS(HTTP over SSL)请求的 SSL 握手阶段,服务端以数字证书的方式将 RSA 公钥传给客户端,以保证公钥在传输过程中不被篡改,而公钥将用于加密后续数据传输对称加密的密钥(以后再细讲这一过程)。
SSL 数字证书的主要目的是用于传递服务端公钥,我们下面来了解一下证书的标准、编码格式以及常见的文件扩展名。
证书标准
• X.509 数字证书标准,定义证书文件的结构和内容,详情参考 RFC5280。SSL 数字证书通常采用这种标准,一般由用户公共密钥和用户标识符组成,此外还包括版本号、证书序列号、CA 标识符、签名算法标识、签发者名称、证书有效期等信息。一个 X.509 标准的 SSL 数字证书包含(但不限于)以下的字段:
这里写图片描述
下图就是我个人博客 kangzubin.cn 域名下的数字证书,可通过 Chrome 浏览器查看其详细内容。
这里写图片描述
证书的编码格式
X.509 标准的证书文件具有不同的编码格式,一般包括 PEM 和 DER 两种。
• PEM: Privacy Enhanced Mail 的缩写,以文本的方式进行存储。它的文件结构以 —–BEGIN XXX—–,并以 —–END XXX—– 结尾,中间 Body 内容为 Base64 编码过的数据。
例如,以 PEM 格式存储的证书结构大概如下:

1 —–BEGIN CERTIFICATE—–
2 Base64编码过的证书数据
3 —–END CERTIFICATE—–
4
5
通过如下 OpenSSL 命令可以查看其证书内容:

1 openssl x509 -in xxx.pem -text -noout
它也可以用来编码存储公钥(RSA PUBLIC KEY)、私钥(RSA PRIVATE KEY)、证书签名请求(CERTIFICATE REQUEST)等数据。
使用PEM格式存储的证书:
—–BEGIN CERTIFICATE—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE—–
使用PEM格式存储的私钥:
—–BEGIN RSA PRIVATE KEY—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END RSA PRIVATE KEY—–
使用PEM格式存储的证书请求文件:
—–BEGIN CERTIFICATE REQUEST—–
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
………
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
—–END CERTIFICATE REQUEST—–
一般 Apache 和 Nginx 服务器应用偏向于使用 PEM 这种编码格式。
• DER: Distinguished Encoding Rules 的缩写,以二进制方式进行存储,文件结构无法直接预览,同样可以通过如下 OpenSSL 命令查看其证书内容:

1   openssl x509 -in xxx.der -inform der -text -noout

一般 Java 和 Windows 服务器应用偏向于使用 DER 这种编码格式。
当然同一 X.509 证书的不同编码之间可以互相转换:
• PEM 转为 DER:

1   openssl x509 -in xxx.pem -outform der -out xxx.der
• DER 转为 PEM:

1   openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem

证书的几种文件扩展名
证书文件扩展名是比较误导人的地方,我之前也一直没搞明白!
如上所述,对于 X.509 标准的证书两种不同编码格式,一般采用 PEM 编码就以 .pem 作为文件扩展名,若采用 DER 编码,就应以 .der 作为扩展名。但常见的证书扩展名还包括 .crt、.cer、.p12 等,他们采用的编码格式可能不同,内容也有所差别,但大多数都能互相转换,现总结如下:
• .pem: 采用 PEM 编码格式的 X.509 证书的文件扩展名;
• .der: 采用 DER 编码格式的 X.509 证书的文件扩展名;
• .crt: 即 certificate 的缩写,常见于类 UNIX 系统,有可能是 PEM 编码,也有可能是 DER 编码,但绝大多数情况下此格式证书都是采用 PEM 编码;
• .cer: 也是 certificate 的缩写,常见于 Windows 系统,同样地,可能是 PEM 编码,也可能是 DER 编码,但绝大多数情况下此格式证书都是采用 DER 编码;
• .p12: 也写作 .pfx,全称:PKCS #12,是公钥加密标准(Public Key Cryptography Standards,PKCS)系列的一种,它定义了描述个人信息交换语法(Personal Information Exchange Syntax)的标准,可以用来将包含了公钥的 X.509 证书和证书对应的私钥以及其他相关信息打包,进行交换。简单理解:一份 .p12 文件 = X.509 证书+私钥;
• .csr: Certificate Signing Request 的缩写,即证书签名请求,它并不是证书的格式,而是用于向权威证书颁发机构(Certificate Authority, CA)获得签名证书的申请,其核心内容包含一个 RSA 公钥和其他附带信息,在生成这个 .csr 申请的时候,同时也会生成一个配对 RSA 私钥,私钥通常需要严格保存于服务端,不能外泄。
• .key: 通常用来存放一个 RSA 公钥或者私钥,它并非 X.509 证书格式,编码同样可能是 PEM,也可能是 DER,查看方式如下:

1   PEM 编码格式:openssl rsa -in xxx.key -text -noout
2   DER 编码格式:openssl rsa -in xxx.key -text -noout -inform der

以上。

参考
• X.509
• PKCS #12
• 那些证书相关的玩意儿
• 证书编码以及文件格式汇总
http://bbs.csdn.net/topics/190044123

来自 http://blog.csdn.net/u011001084/article/details/54708258

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值