openssl中遇到的文件后缀

引言

之前学习区块链的时候,把有关的密码学内容简单的学习了一遍。最近,使用openssl配置https服务的过程中,对这些概念加深了印象,这里权且记录。

基本概念

前面的学习中,我们知道:通过安全的随机算法生成私钥;由私钥可以创建公钥。而在https连接中,还需要了解证书,证书是由受信任的数字证书颁发机构CA(Certificate Authority),在验证服务器身份后颁发,且具有服务器身份验证和数据传输加密功能。全球只有屈指可数的顶级CA,因此证书需要收费——免费的也有,但不支持域名通配符以及只有一年的有效期。鉴于此,我们可以视情况自行创建CA,并由该CA来签发证书。这就是所谓的自签名(self-signed)证书。

证书相关的名词

PKCS: Public-Key Cryptography Standards,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。
X.509: 一种证书格式,主要定义了证书中应该包含哪些内容,其详情可以参考RFC5280。SSL/TSL使用的就是这种证书标准。

文件扩展名

OS X下可以通过file命令查看文件属性。

pem: Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN-----"开头, "-----END-----"结尾,内容是BASE64编码。查看PEM格式证书的信息: openssl x509 -in certificate.pem -text -noout。Apache和*NIX服务器偏向于使用这种编码格式,key,crt,csr都可以是该格式。

der: Distinguished Encoding Rules,打开看是二进制格式,不可读。 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout
Java和Windows服务器偏向于使用这种编码格式。

csr: Certificate Signing Request,即证书签名请求。这个并不是证书,而是向权威证书颁发机构获得签名证书的申请。iOS开发的时候经常会用csr文件去创建证书。 查看的办法:openssl req -noout -text -in my.csr (如果是der格式的话照旧加上-inform der,这里不写了)

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

pfx/p12: predecessor of PKCS#12(PKCS发布的15个标准之一),对*nix服务器来说,一般crt和key是分开存放在不同文件中的,但Windows的IIS则将它们存在一个pfx文件中,并通过密码保护。

文件互转

pem到der:

openssl x509 -in cert.crt -outform der -out cert.der

der(.crt,.cer,.der)到pem:

openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

pem到PKCS#12:

openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem

PKCS#12到pem的转换:

openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem

pfx转pem,需要输入密码:

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

参考说明