简介
浏览器访问HTTPS网站通过CA的证书来验真网站是否是可信网站,其中除了证书外,CA机构扮演了重要的角色,CA分发证书给申请方,申请方将证书文件嵌入到HTTPS服务中来证明自身。其证书的申请过程大致流程如下:
其中CA机构处理的是CSR(Certification Signed Request)文件,该来自于应用方(Applicant)公钥绑定签发的文件。CA机构通过自身的私钥来签发CSR请求为证书文件,供申请方使用。
不同的步骤下的命令行处理如下:
Applicant
生成私钥(使用des3加密私钥内容)
1 | openssl genrsa -des3 -out server.key 4096 |
生成公钥(可选):
1 | openssl rsa -in server.key -out public_key.pem -pubout |
通过私钥签出CSR证书(证书中存在与私钥关联的公钥)
1 | openssl req -new -key server.key -out server.csr |
检查证书详情
1 | openssl req -text -noout -verify -in server.csr |
CA
生成签名证书
1 | openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt |
如果需要模拟CA的通过私钥的签名CSR的方式需要准备CA database
以及ca.conf
。
最小化的ca.conf文件内容:
1 | [ ca ] |
准备CA database文件夹:
1 | mkdir ca |
接下来需要生成ca.crt以及ca.key等公私钥文件:
1 | 生成1024比特的RSA私钥 |
然后在签名CSR文件,过程和最上面的命令行类似,不过需要指定-config
(未验证)
1 | openssl x509 -config ca.conf -req -days 365 -in server.csr -signkey server.key -out server.crt |
证书文件以及X509
证书主要的文件类型和协议类型:
1 | PEM, DER, PFX, JKS, KDB, CER, KEY, CSR, CRT, CRL, OCSP, SCEP |
X509是证书标准,定义证书中应该包含那些内容,通过RFC5280定义。
PEM - Private Enhanced Mail,该文件格式以——-BEGIN/END——- 开头和结尾。
Apache、Nginx偏向使用这种编码的证书文件。
DER - Distingushed Encoding Rules, 二进制文件格式,一般浏览器猜中这种格式存储证书。Java和Windows服务器偏向采用这种格式。
KEY文件,用来存储公钥或者私钥。
CSR - Certificate Signing Request,证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.
CRT - CRT应该是certificate的三个字母,其实还是证书的意思,常见于*NIX系统,有可能是PEM编码,也有可能是DER编码。