密码学相关的标准、协议很多,原理往往需要一些数学基础

想要程序马上work起来可能容易,想要搞清楚原理,需要花些时间才行

SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等

刚接触证书加密相关概念会感觉挺棘手,一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,且很长时间都没怎么搞懂

SSL

Scure Sockets Layer,现在应该叫 TLS,但习惯问题,还是叫”SSL”比较多

https加密基于SSL,加密对用户和开发者都是透明的

OpenSSL

简单说是SSL规范的一个实现

规范安全,目前的技术水平很难破解,但实现就可能有些漏洞,如”心脏出血”

OpenSSL还提供了一大堆强大的工具软件,强大到90%我们都用不到

证书标准

X.509 一种证书标准,主要定义证书中应包含哪些内容

SSL就用这种证书标准

编码格式

同样的X.509证书,可能有不同编码格式

PEM - Privacy Enhanced Mail,文本格式

-----BEGIN 开头, -----END 结尾内容BASE64编码

openssl x509 -in certificate.pem -text -noout

*NIX 偏向于用这种

DER - Distinguished Encoding Rules,二进制格式

openssl x509 -in certificate.der -inform der -text -noout

Java和Windows偏向于用这种

相关的文件扩展名

比较误导人的地方,PEM和DER两种编码格式,文件扩展名不一定就叫这

常见的扩展名除了PEM和DER,还有除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式

CRT - 常见于*NIX,大多是PEM编码

CER - 常见于Windows系统,大多是DER编码

KEY - 通常用存私钥,并非X.509证书

openssl rsa -in mykey.key -text -noout

如果是DER格式

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

CSR - 核心内容是一个公钥(还附带一些别的信息),生成申请时,同时也生成私钥

openssl req -noout -text -in my.csr 

DER 照旧加上-inform der

PFX/P12 - predecessor of PKCS#12

*nix 一般CRT和KEY分开存放在不同文件中,但Windows的IIS存在一个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.crt 是CA根证书,有通过-certfile一起带进去

JKS - Java Key Storage

Java专利,跟OpenSSL关系不大

keytool,可以将PFX转为JKS,也能直接生成JKS

证书编码的转换

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)

向证书颁发机构申请证书

生成csr

openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr

csr交给证书颁发机构,机构对此进行签名,保留好csr,当证书过期时,还可以用同样的csr来申请新的证书,key保持不变

或者生成自签名的证书

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

其实真正要填的只有Common Name,写服务器的域名,“yourcompany.com”,或者服务器IP,其它都可以留空的