TechTalk

CA的证书分发的过程

字数统计: 741阅读时长: 3 min
2021/07/01

简介

浏览器访问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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = ./ca
certs = $dir
new_certs_dir = $dir/ca.db.certs
database = $dir/ca.db.index
serial = $dir/ca.db.serial
RANDFILE = $dir/ca.db.rand
certificate = $dir/ca.crt
private_key = $dir/ca.key
default_days = 365
default_crl_days = 30
default_md = md5
preserve = no
policy = generic_policy
[ generic_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = optional
emailAddress = optional

准备CA database文件夹:

1
2
3
4
5
mkdir ca
cd ca
mkdir ca.db.certs
touch ca.db.index
echo "1234" > ca.db.serial

接下来需要生成ca.crt以及ca.key等公私钥文件:

1
2
3
4
5
# 生成1024比特的RSA私钥
openssl genrsa -des3 -out ca/ca.key 1024

# 通过ca.key签名一个CA自己的证书出来
openssl req -new -x509 -day 1000 -key ca/ca.key -out ca/ca.crt

然后在签名CSR文件,过程和最上面的命令行类似,不过需要指定-config (未验证)

1
2
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编码。

CATALOG
  1. 1. 简介
  2. 2. Applicant
  3. 3. CA
  4. 4. 证书文件以及X509