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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146520.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SQLAlchemy常用数据类型

目录 SQLAlchemy常用数据类型 代码演示 代码分析 SQLAlchemy常用数据类型 SQLAlchemy 是一个Python的SQL工具库和对象关系映射(ORM)工具,它提供了一种在Python中操作数据库的高效方式。下面是SQLAlchemy中常用的一些数据类型: Integer:整形&…

【数据结构】选择排序 堆排序(二)

目录 一,选择排序 1,基本思想 2, 基本思路 3,思路实现 二,堆排序 1,直接选择排序的特性总结: 2,思路实现 3,源代码 最后祝大家国庆快乐! 一&#xf…

数组和切⽚ - Go语言从入门到实战

数组和切⽚ - Go语言从入门到实战 数组的声明 package main import "fmt" func main() { var a [3]int //声明并初始化为默认零值 a[0] 1 fmt.Println("a:", a) // 输出: a: [1 0 0] b : [3]int{1, 2, 3} //声明同时初始化 fmt.Println("b:…

Python3数据科学包系列(二):数据分析实战

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 一:通过read_table函数读取数据创建(DataFrame)数据框 #…

C++指针的使用

文章目录 1.C指针1.1 定义指针1.2 使用指针 2.空指针和野指针2.1 空指针2.2 野指针 3.指针所占空间4.使用const修饰指针4.1 const修饰指针4.2 const修饰常量4.3 const 既修饰指针也修饰常量 5.指针操作数组6.指针做函数参数7.使用指针知识实现冒泡排序 1.C指针 指针其实就是一…

mysql主从同步

原理 概述 将主库的数据变更同步到从库,从而保证主库和从库数据一致 数据备份,失败迁移,读写分离,降低单库读写压力 原理 主数据库设置 docker run --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-…

偏微分方程的人工智能

9 偏微分方程的人工智能 在本节中,我们详细介绍了用于解决偏微分方程(Partial Differential Equations,PDEs)的人工智能领域的进展。我们在第9.1节中概述了PDE建模的一般形式,并阐述了在这个背景下使用机器学习方法的…

竞赛 大数据房价预测分析与可视

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据房价预测分析与可视 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖,适合…

JavaScript中如何确定this的值?如何指定this的值?

🎀JavaScript中的this 在绝大多数情况下,函数的调用方法决定了this的值(运行时绑定)。this不能在执行期间被赋值,并且在每次函数呗调用时this的值也可能会不同。 🍿如何确定this的值: 在非严格…

百度交易中台之内容分润结算系统架构浅析

作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展,内容产出方和流量提供方最关注的“收益结算”的工作,也就成为重中之重。本文基于内容分润结算业务为入口,介绍了实现过程中的重难点,比如千万级和百万级数据量下的技术选型和…

C++八股

1、简述一下C中的多态 在面向对象中,多态是指通过基类的指针或引用,在运行时动态调用实际绑定对象函数的行为,与之相对应的编译时绑定函数称为静态绑定。 静态多态 静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择…

UART相关参数和Modbus协议

温湿度数据和风速风向数据的读取和计算方法 文章目录 温湿度数据和风速风向数据的读取和计算方法1 串行通信数据格式1.1 协议介绍1.2 UART相关参数1.3 UART通信过程 2 USB转串口模块的使用3 串口调试助手的使用3.1 串口控制区3.2 发送控制区3.3 接收控制区 4 GY-39气象信息模块…

在2023年使用Unity2021从Built-in升级到Urp可行么

因为最近在做WEbgl平台,所以某些不可抗力原因,需要使用Unity2021开发,又由于不可明说原因,想用Urp,怎么办? 目录 创建RenderAsset 关联Asset 暴力转换(Menu->Edit) 单个文件…

Object.defineProperty()方法详解,了解vue2的数据代理

假期第一篇,对于基础的知识点,我感觉自己还是很薄弱的。 趁着假期,再去复习一遍 Object.defineProperty(),对于这个方法,更多的还是停留在面试的时候,面试官问你vue2和vue3区别的时候,不免要提一提这个方法…

SLAM从入门到精通(tf的使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在ros的机器人学习过程中,有一件事情是肯定少不了的。那就是坐标系的转换。其实这也很容易理解。假设有一个机器人,它有一个…

Linux文件查找,别名,用户组综合练习

1.文件查看: 查看/etc/passwd文件的第5行 [rootserver ~]# head -5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi…

性能压力测试的定义及步骤是什么

在今天的数字化时代,软件系统的性能和稳定性对于企业的成功至关重要。为了确保软件在高负载和压力情况下的正常运行,性能压力测试成为了不可或缺的环节。本文将介绍性能压力测试的定义、步骤。 一、性能压力测试的定义和目标 性能压力测试是通过模拟实际…

openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置

文章目录 openGauss学习笔记-86 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署配置86.1 总体原则86.2 重做日志(MOT)86.3 检查点(MOT)86.4 恢复(MOT)86.5 统计(MOT)86…

USART串口协议

通信接口 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:指通信双方能够同时进行双向通信,一般来说,全双…

阿里云ACP知识点(三)

1、弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例数量的能力,而且提供了ECS实例上自动部署应用的能力。弹性伸缩的伸缩配置支持多种特性,例如______,帮助您高效、灵活地自定义ECS实例配置,满足业务需求。 标签、密钥对、 实例RAM…