SSL 自签名证书
X.509 格式标准
X.509:这是一种公钥证书的格式格式标准(
https://zh.wikipedia.org/wiki/X.509),详情参考 RFC5280
编码格式
PEM:Privacy Enhanced Mail
文本格式,Apache 和 Unix-like 服务器偏向使用这种编码格式。查看 PEM 格式的证书(可以包含私钥):
openssl x509 -in certificate.pem -text -noout
- DER: Distinguished Encoding Rules
二进制格式, Java 和 Windows 服务器偏向使用这种编码格式。查看 DER 格式的证书(单纯的证书,不可包含私钥):
openssl x509 -in certificate.der -inform der -text -noout
- DER: Distinguished Encoding Rules
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
注:
- 查看/转换密钥(公钥或者私钥)文件则使用
openssl rsa
; - 查看/转换的是 CSR 文件则使用
openssl req
。
文件后缀名
- crt,certificate 的缩写,Unix-like 证书文件的常见后缀名,通常是 PEM 编码。
- cer,也是 certificate 的缩写,Windows 证书文件的常见后缀名,通常是 DER 编码。
- key, 通常是公钥或者私钥文件的后缀名。
- csr,Certificate Signing Request,证书签名申请文件后缀名。
- pfx/p12,predecessor of PKCS#12,将证书和私钥存放在一个文件中,使用 DER 编码。 通常是 IIS 使用,Unix 系服务器通常证书和私钥是放在不同的文件中。
- JKS,Java Key Storage,通常用在 tomcat 中,Java 提供 keytool 工具支持将 pfx/p12 转换成 JKS:
keytool -importkeystore -srckeystore test.pfx -srcstoretype PKCS12 -deststoretype JKS -destkeystore test.jks
PEM <--> pfx/p12-->
Unix 系的 PEM 证书转 pfx/p12 格式证书:openssl pkcs12 -export -in certificate.crt -inkey privateKey.key [-certfile CACert.crt] -out certificate.pfx
反过来:
openssl pkcs12 -in certificate.pfx -nodes -out certificate.pem
因为 certificate.pem
是一个同时包含证书和私钥的 PEM 证书,进一步可以通过下面命令分离成单独 PEM 证书和私钥 2 个文件:
openssl rsa -in certificate.pem -out privateKey.key
openssl x509 -in server.pem -out certificate.crt
生成证书
自签名证书( x.509 v1)
自己签署的证书,没有 CA 可以证明其有效性,无法被吊销。由于大多数移动平台不支持使用自签名证书,因此不推荐使用。用下面方法可以生成 x.509 v1 版本的自签名证书。
生成 RSA 私钥(不加密的私钥):
openssl genrsa -out server.key 1024
注:通过
man genrsa
查看使用手册。如果证书要使用在 Nginx 上,为避免每次 nginx reload ssl 都要手动输入口令,这里生成的私钥不加密。创建证书签名申请(CSR, Certificate Signning Request):
openssl req -new -key server.key -out server.csr
使用前面生成的私钥对 CSR 进行签名生成自签名证书:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt