目录
创建私有CA
1、创建CA所需要的文件
2、生成CA私钥
3、生成CA自签名证书
申请证书并颁发证书
1、为需要使用证书的主机生成私钥
2、为需要使用证书的主机生成证书申请文件
3、在CA签署证书并将证书颁发给请求者
改变检查策略
4、查看证书中的信息
5、index.txt和serial文件的介绍
6、同一个csr(证书签名请求)如何生成多个证书
吊销证书
在客户端获取要吊销的证书的serial
在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书
指定第一个吊销证书的编号
更新证书吊销列表
生成证书吊销列表文件
生成证书链
生成根证书
生成中间证书
生成服务器证书
生成证书链
格式文件
#生成证书索引数据库文件
touch /etc/pki/CA/index.txt
#指定第一个颁发证书的序列号
echo 01 > /etc/pki/CA/serial
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
选项说明:
-new: 生成新证书签署请求
-x509: 专用于CA生成自签证书
-key: 生成请求时用到的私钥文件
-days n: 证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
国家代码:https://country-code.cl/
范例:生成自签名证书
[root@CentOS7 ~]# openssl req -utf8 -newkey rsa:1024 -subj "/CN=www.xiaobai.org" -keyout app.key -nodes -x509 -out app.crt
Generating a 1024 bit RSA private key
.......................++++++
.......................++++++
writing new private key to 'app.key'
#查看证书
[root@CentOS7 ~]# openssl x509 -in app.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
f5:42:e7:5a:cd:65:17:46
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=www.xiaobai.org
Validity
Not Before: Jun 19 06:48:56 2023 GMT
Not After : Jul 19 06:48:56 2023 GMT
Subject: CN=www.xiaobai.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
·····
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
36:BD:AE:68:3D:D8:48:09:7B:8D:B7:50:51:F8:0A:4A:92:F5:91:18
X509v3 Authority Key Identifier:
keyid:36:BD:AE:68:3D:D8:48:09:7B:8D:B7:50:51:F8:0A:4A:92:F5:91:18
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
·····
[root@CentOS7 ~]#
(umask 066;openssl genrsa -out data/test.key 2048)
openssl req -new -key data/test.key -out data/test.csr
openssl ca -in data/test.csr -out /etc/pki/CA/certs/test.crt -days 100
注意:默认要求国家,省,公司名称三项必须和CA一致,否则会报错
在 OpenSSL 中,要求证书申请中的组织信息(Organization)必须与 CA(证书颁发机构)的证书中的组织信息一致。这通常包括国家(Country),省(State),以及公司名称(Organization Name)等。
在证书申请过程中,OpenSSL 会自动从系统中获取当前系统的时区信息,并且要求申请者必须提供证书的有效期,以及证书的序列号等信息。此外,OpenSSL 也要求申请者必须提供证书的通用名称(Common Name),该名称通常用于表示证书的主机名或域名。
需要注意的是,OpenSSL 并不会检查申请者是否是合法的组织或公司,只会检查申请者提供的组织信息是否与 CA 的证书中的组织信息一致。因此,在使用 OpenSSL 申请证书时,需要谨慎核实申请者提供的组织信息是否正确,以确保证书的安全性。
[root@CentOS7 ~]# openssl ca -in data/test.csr -out /etc/pki/CA/certs/test.crt -days 100
Using configuration from /etc/pki/tls/openssl.cnf //使用/etc/pki/tls/openssl.cnf中的配置
Check that the request matches the signature //检查请求是否与签名匹配
Signature ok //签名成功
The stateOrProvinceName field needed to be the same in the
CA certificate (beijing) and the request (jiangshu) //CA证书(北京)和请求(江苏)中的stateOrProvinceName字段需要相同
[root@CentOS7 ~]# vim /etc/pki/tls/openssl.cnf
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
//在指定请求查找类型CA的相似程度时,有一些不同的方法,列出的属性必须相同,可选字段和提供的字段只有这些:-)
policy = policy_match
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
//此时,你必须列出所有可接受的` object `类型。
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
Certificate is to be certified until Sep 27 06:56:04 2023 GMT (100 days)
Sign the certificate? [y/n]:y
//认证截止日期为格林尼治时间2023年9月27日06:56:04日(100天)
签署证书?[y / n]: y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
1 / 1的证书要求认证,提交?[y / n] y
写入数据库并添加1个新条目
数据库更新
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
#查看指定编号的证书状态
openssl ca -status SERIAL
OpenSSL是一个开源的加密库,它提供了一系列的加密算法和协议,包括SSL、TLS、RSA、DSA、AES、SHA等。在使用OpenSSL进行证书签名时,需要使用index.txt和serial文件。
index.txt文件是一个文本文件,用于存储证书请求和证书的信息。每个证书请求或证书都有一个唯一的序列号,该序列号由serial文件中的数字自动递增生成。index.txt文件的格式如下:
```
V 200101010000Z 01 unknown /CN=example.com
V 200101010000Z 02 unknown /CN=example.org
```
其中,每一行代表一个证书请求或证书,各字段的含义如下:
- 第一列:证书状态,V表示有效,R表示已撤销。
- 第二列:证书的有效期起始时间,格式为YYYYMMDDHHMMSSZ。
- 第三列:证书的序列号,由serial文件中的数字自动递增生成。
- 第四列:证书的撤销状态,unknown表示未撤销。
- 第五列:证书的主题信息,格式为/CN=example.com。
serial文件是一个文本文件,用于存储证书的序列号。每次签名时,序列号会自动递增。serial文件的格式如下:
```
01
02
```
其中,每一行代表一个证书的序列号。
在使用OpenSSL进行证书签名时,需要先创建index.txt和serial文件,并将证书请求添加到index.txt文件中。然后,使用openssl ca命令对证书进行签名,签名后的证书将会被添加到index.txt文件中。每次签名后,serial文件中的序列号会自动递增,以便下一次签名使用。
使用同一个csr生成证书,会有错误
failed to update database
TXT_DB error number 2
更改以下配置
[root@CentOS7 ~]# vim /etc/pki/CA/index.txt.attr
将unique_subject = yes
改为unique_subject = no
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
[root@CentOS7 ~]# openssl x509 -in test_2.crt -noout -serial -subject
serial=03
subject= /C=CN/ST=beijing/O=it/OU=it01/CN=it
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
[root@CentOS7 ~]# openssl ca -revoke test_2.crt
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 03.
Data Base Updated
[root@CentOS7 CA]# vim index.txt
V 230928024718Z 01 unknown /C=CN/ST=beijing/O=it/OU=it01/CN=it
V 230928025156Z 02 unknown /C=CN/ST=beijing/O=it/OU=it01/CN=it
R 230928035209Z 230620035512Z 03 unknown /C=CN/ST=beijing/O=it/OU=it01/CN=it
[root@CentOS7 ~]# openssl ca -status 03
Using configuration from /etc/pki/tls/openssl.cnf
03=Revoked (R)
echo 01 > /etc/pki/CA/crlnumber
注意:第一次更新证书吊销列表前,才需要执行
openssl ca -gencrl -out /etc/pki/CA/crl.pem
[root@CentOS7 ~]# openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf // 使用/etc/pki/tls/openssl.cnf中的配置
/etc/pki/CA/crlnumber: No such file or directory // /etc/pki/CA/crlnumber:没有该文件或目录
error while loading CRL number // 加载CRL编号时出错
140067035502480:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/crlnumber','r')
140067035502480:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
//140067035502480:错误:02001002:系统库:fopen:没有这样的文件或目录:bss_file.c:402:fopen('/etc/pki/CA/crlnumber','r')
140067035502480:错误:20074002:BIO例程:FILE_CTRL:system lib:bss_file.c:404:
[root@CentOS7 ~]# echo 01 > /etc/pki/CA/crlnumber
[root@CentOS7 ~]# cat /etc/pki/CA/crlnumber
02 //这里是02,是因为上面已经吊销了一个证书(该文件会自增)
[root@CentOS7 ~]# openssl ca -gencrl -out /etc/pki/CA/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf
[root@CentOS7 ~]# cat /etc/pki/CA/crl/crl.pem
-----BEGIN X509 CRL-----
MIIB7TCB1gIBATANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJDTjEQMA4GA1UE
CAwHYmVpamluZzEQMA4GA1UEBwwHYmVpamluZzELMAkGA1UECgwCaXQxDTALBgNV
BAsMBGl0MDExEjAQBgNVBAMMCWNhLml0LmNvbTEbMBkGCSqGSIb3DQEJARYMcm9v
·····
·····
fWlVXNdTBy5NpqwmAgR0eNwJ+2lsnAT0PQBwPsxp9aloc60xBSAGmAzdZVhfNCe0
BdNog5gAo/x5VbNGmz8dNYI=
-----END X509 CRL-----
要生成证书链,需要有多个证书文件,其中包括根证书、中间证书和服务器证书。以下是使用openssl生成证书链的步骤:
使用openssl生成根证书,可以参考以下命令:
```
openssl req -x509 -newkey rsa:2048 -keyout root.key -out root.crt -days 3650
```
如果需要生成中间证书,可以使用以下命令:
```
openssl req -newkey rsa:2048 -keyout intermediate.key -out intermediate.csr
openssl x509 -req -in intermediate.csr -CA root.crt -CAkey root.key -CAcreateserial -out intermediate.crt -days 3650
```
使用以下命令生成服务器证书:
```
openssl req -newkey rsa:2048 -keyout server.key -out server.csr
openssl x509 -req -in server.csr -CA intermediate.crt -CAkey intermediate.key -CAcreateserial -out server.crt -days 3650
```
将根证书、中间证书和服务器证书合并成一个文件,即可生成证书链:
```
cat server.crt intermediate.crt root.crt > certificate-chain.crt
```
其中,certificate-chain.crt就是生成的证书链文件。
注意:在生成证书链时,需要按照顺序将证书文件合并,即服务器证书在前,中间证书在中间,根证书在最后。
CSR(Certificate Signing Request)格式文件
CSR文件是用于向证书颁发机构(CA)申请数字证书的文件格式。它包含了申请者的公钥和一些身份信息,如国家、组织、单位、域名等。CSR文件通常是以文本文件的形式存在,后缀名为.csr。
KEY格式文件
KEY文件是用于存储私钥的文件格式。私钥是用于加密和解密数据的关键,因此必须妥善保管。KEY文件通常是以文本文件的形式存在,后缀名为.key。
PEM(Privacy-Enhanced Mail)格式文件
PEM文件是一种常见的证书文件格式,它可以存储证书、私钥、CSR等信息。PEM文件采用Base64编码,可以通过文本编辑器打开查看。PEM文件通常以.crt、.pem、.key等后缀名存在。
PFX/P12(Personal Information Exchange)格式文件
PFX/P12文件是一种常见的证书文件格式,它可以存储证书、私钥等信息,并且可以设置密码保护。PFX/P12文件通常是二进制格式的,后缀名为.pfx或.p12。
DER(Distinguished Encoding Rules)格式文件
DER文件是一种二进制格式的证书文件,它通常用于在网络上传输证书。DER文件不能直接用文本编辑器打开查看,但可以通过一些工具进行解析。DER文件通常以.crt、.der等后缀名存在。