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

  • 相关阅读:
    金仓数据库 KingbaseES异构数据库移植指南 (2. 概述)
    【QT进阶】Qt http编程之http相关类的简单介绍
    如何使用百度“云一朵”来分析PDF文件
    Cisco ASA、FTD和HyperFlex HX的漏洞分析复现
    超详细 | 鲸鱼优化算法原理及其实现(Matlab/Python)
    揭秘2023年最热门的跨境电商源码趋势,你不能错过的关键信息
    nodejs+vue游戏测评交流系统elementui
    2022-11-16 几种三角函数的图形
    解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题
    MySQL筑基篇之增删改查
  • 原文地址:https://blog.csdn.net/m0_74204829/article/details/133469810