证书介绍
TLS和HTTPS协议为我们实现了节点之间的加密通信,这是通过证书Certification 实现的。
本文针对证书中出现的常见概念,进行解释。
TSL/HTTPS
TLS(SSL)
TCP: Transport Layer Security
SSL: Secure Sockets Layer
TLS协议直接在TCP协议的基础上运行,提供支持证书加密验证等功能。SSL则是TLS的前身,SSL在3.0版本后直接更名为TLS。目前SSL协议已经不被广泛支持,普遍使用TLS协议。
HTTPS
全称: Hyper-text transport protocal secure
HTTP协议负责处理数据报文,数据则由TLS协议进行加解密处理,加密后的数据则由TCP协议负责传输。这就是计算机网络分层的优点,下层的细节对上层屏蔽,因此HTTPS加密传输时,对于应用程序而言相比于HTTP协议,应用程序感受不到区别。
证书 Certification
证书标准 X.509: 密码学中公钥证书的格式标准, TLS使用的就是这种证书标准, 详情可以参考RFC5280和wikipedia.
定义:由CA中心或其子机构签发的,存储相关信息,如有效期,有效域名,签发机构等重要信息的,可以通过RSA和Hash算法确认合法性的一种数据结构。具体可看CA 验证原理
工作机制
TLS 和 HTTPS 本质相同,下文就以HTTPS为例,解释其工作原理。
证书常见编码格式及其后缀名
证书有PEM, DER两种格式和由JDK生成的JKS格式,由于证书文件后缀名可任意修改,无法单纯的从后缀名得出证书编码格式。
如何识别编码格式
直接查看证书,来判断是否为PEM格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15st=>;start: Start
op0=>;operation: 查看你的证书(cat xxx)
cond0=>;condition: 是否能直接查看证书
cond1=>;condition: 是否由.jks .keystore .truststore 结尾
e1=>;end: PEM格式
e2=>;end: DER(P12)格式
e3=>;end: JKS格式
st->;op0->;cond0(yes)
cond0(yes)->;e1
cond0(no)->;cond1
cond1(yes)->;e3
cond1(no)->;e2
详情与命令
PEM:通常由openssl生成,常见于nix系统,*后缀名任意**。通常命名为.cer, .key, .csr等来区分内容。
特点:直接查看证书,并符合以下格式,内容为BASE64编码则为PEM格式证书。
1
2
3-----BEGIN CERTIFICATE-----
***********************
-----END CERTIFICATE-----命令:
- 查看KEY信息: openssl rsa -noout -text -in myserver.key
- 查看CSR信息: openssl req -noout -text -in myserver.csr
- 查看证书信息: openssl x509 -noout -text -in ca.crt
- 由根证书验证证书: openssl verify -CAfile ca.crt myserver.crt
- 去除证书密码: openssl rsa -in myserver.key -out server.key.insecure
DER: 该编码常出现于Winodws和Macos系统中, 但通常不以DER作为后缀名。
- 特点:无法直接查看读取,
- 命令:
- 查看证书:openssl x509 -in certificate.der -inform der -text -noout
- 查看Key: openssl rsa -in mykey.key -text -noout -inform der
- 查看Csr: openssl req -noout -text -in my.csr -inform der
- PKCS#12(.pfx .p12) : 常见于Mac OS系统,P12证书同时存放了证书和对应的私钥。P12证书实际是DER编码格式。
JKS: JAVA keytool工具生成的证书文件格式,通常命名为***.truststore.jks|.keystore.jks*
- 特点: 后缀名普遍带有.truststore.jks|*.keystore.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,将CSR交给证书生成机构
> openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr
自签名生成证书
> openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem