证书相关
ddatsh
密码学相关的标准、协议很多,想要程序马上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 二进制格式
openssl x509 -in certificate.der -inform der -text -noout
Java和Windows偏向于用这种
文件扩展名
比较误导人的地方,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
*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,其它都可以留空的