CA(openssl)

目录

创建私有CA

1、创建CA所需要的文件

2、生成CA私钥

3、生成CA自签名证书

申请证书并颁发证书

1、为需要使用证书的主机生成私钥

2、为需要使用证书的主机生成证书申请文件

3、在CA签署证书并将证书颁发给请求者

改变检查策略

4、查看证书中的信息

5、index.txt和serial文件的介绍

6、同一个csr(证书签名请求)如何生成多个证书

吊销证书

在客户端获取要吊销的证书的serial

在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书

指定第一个吊销证书的编号

更新证书吊销列表

生成证书吊销列表文件

生成证书链

生成根证书

生成中间证书

生成服务器证书

生成证书链

格式文件


创建私有CA

1、创建CA所需要的文件

#生成证书索引数据库文件

touch /etc/pki/CA/index.txt

#指定第一个颁发证书的序列号

echo 01 > /etc/pki/CA/serial

2、生成CA私钥

cd /etc/pki/CA/

(umask 066; openssl genrsa -out private/cakey.pem 2048)

3、生成CA自签名证书

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 ~]#

申请证书并颁发证书

1、为需要使用证书的主机生成私钥

(umask 066;openssl genrsa -out data/test.key 2048)

2、为需要使用证书的主机生成证书申请文件

openssl req -new -key data/test.key -out data/test.csr

3、在CA签署证书并将证书颁发给请求者

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个新条目

数据库更新

4、查看证书中的信息

openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates

#查看指定编号的证书状态

openssl ca -status SERIAL

5、index.txt和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文件中的序列号会自动递增,以便下一次签名使用。

6、同一个csr(证书签名请求)如何生成多个证书

使用同一个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

吊销证书

在客户端获取要吊销的证书的serial

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

在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书

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等后缀名存在。

猜你喜欢

转载自blog.csdn.net/m0_74204829/article/details/133469810
今日推荐