关于证书里的几个概念

协议与实现

  • SSL/TLS
  • OpenSSLSSL/TLS的一个实现

证书标准

  • X.509 是一种证书的标准,里面定义了证书里应该包含哪些内容。参考RFC5280, SSL是按照这个标准实现的。

证书的编码格式

X.509证书目前有以下2中证书格式,一种是文本类型,一种是二进制类型

  1. PEM privacy enhanced mail, 是一种文本格式。打开文件看是以 -----BEGIN开头,以-----END结尾,内容用BASE64编码。这类是apache, *NIX系统偏爱的格式。可以使用下面命令查看证书内容 openssl x509 -in certificate.pem -text -noout
  2. DER distinguished encoding rules是一种二进制格式。可用下面命令查看证书内容 openssl x509 -in certificate.der **-inform der** -text -noout。java和win偏好这种格式。

相关文件扩展名

  1. CRT 证书(certificate)的一种,常见*NIX系统。可能是PEM或者DER格式。大多是PEM文本编码。
  2. CER 也是certificate缩写。常见win系统。大多是DER二进制编码。
  3. KEY 非X.509证书。常用来存放一个公钥或者私钥。编码可以是PEM或者DER。查看PEM格式key openssl rsa -in mykey.key -text -noout 查看DER格式key: openssl rsa -in mykey.key -text -noout -inform der
  4. CSR certificate signing request。证书签名请求。向权威机构请求颁发一个签名证书的申请文件。内部包含了一个公钥和其他信息。随着公钥还有个私钥要自己保存好。查看方法 openssl req -noout -text -in my.csr如果是DER则在命令后面加入 -inform der
  5. JKS
  6. PFX/P12

几个场景

  1. PEM转DER openssl x509 -in cert.crt -outform der -out cert.der

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

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

  1. 向权威证书颁发机构申请证书 生成一个csr:openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr 然后把csr交给权威证书颁发机构,权威证书颁发机构对此进行签名。保留好csr,当权威证书颁发机构颁发的证书过期的时你还可以用同样的csr来申请新的证书,key保持不变

  2. 生成自签名的证书 openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem 在生成证书的过程中会要你填一堆的东西,其实真正要填的只有Common Name,通常填写你服务器的域名,如”yourcompany.com”,或者你服务器的IP地址,其它都可以留空

参考文章

build:   __BUILD_VERSION__