密码学相关的标准、协议很多,想要程序马上work容易,想要搞清楚原理,需要花些时间才行
SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等
SSL
Scure Sockets Layer,现在应该叫 TLS,但习惯问题,还是叫"SSL"比较多
https加密基于SSL,加密对用户和开发者都是透明的
OpenSSL
SSL规范的一个实现
还提供了一大堆强大的工具软件,强大到90%我们都用不到
证书标准
X.509 ,证书标准,定义证书中应包含哪些内容
SSL就用这种证书标准
编码格式
同样的X.509证书,可能有不同编码格式
- PEM 文本格式
-----BEGIN 开头, -----END 结尾,内容BASE64编码
openssl x509 -in certificate.pem -text -noout
*NIX 偏向于用这种
- DER 二进制格式
|
|
Java和Windows偏向于用这种
文件扩展名
比较误导人的地方,PEM和DER两种编码格式,文件扩展名不一定就叫这
CRT - 常见于*NIX,大多PEM编码
CER - 常见于Windows系统,大多DER编码
KEY - 通常用存私钥,并非X.509证书
|
|
如果是DER格式
|
|
CSR - 核心内容是一个公钥(还附带一些别的信息),生成申请时,同时也生成私钥
|
|
DER 照旧加上-inform der
PFX/P12
*nix 一般CRT和KEY分开存放在不同文件中
Windows的IIS存在一个PFX文件,(包含证书及私钥)
会不会不安全?PFX通常会有一个"提取密码"
PFX用DER编码
PFX转PEM
|
|
生成pfx
|
|
CACert.crt 是CA根证书,有通过-certfile一起带进去
JKS - Java Key Storage
Java专利,跟OpenSSL关系不大
keytool,可以将PFX转为JKS,也能直接生成JKS
证书编码的转换
PEM转DER
|
|
DER转为PEM
|
|
(转KEY也类似,x509换成rsa,转CSR的话,x509换成req)
向证书颁发机构申请证书
生成csr
|
|
csr交给证书颁发机构,机构对此进行签名,保留好csr,当证书过期时,还可以用同样的csr来申请新的证书,key保持不变
或者生成自签名的证书
|
|
其实真正要填的只有Common Name,写服务器的域名,“yourcompany.com”,或者服务器IP,其它都可以留空的