目录
[③ RSA,DSA(了解)](#③ RSA,DSA(了解))
[③ 综合加密和签名](#③ 综合加密和签名)
[②openssl passwd生成用户密码](#②openssl passwd生成用户密码)
一、加密算法和协议
互联网不能直接发送明文数据,明文传输会暴露信息内容,导致数据被窃取、篡改或滥用,通过加密保护数据机密性、完整性和来源真实性。
1、对称加密算法

对称加密算法(Symmetric Encryption Algorithm)是一种使用相同密钥进行数据加密和解密的加密方式,其核心特点是加密和解密过程共享同一把密钥。
例如:A通过互联网跟B进行通信,A将明文(原始数据)通过密钥生成密文(加密后的数据)传输发给B,由于A,B之间使用同样的密钥,因此B可将接收到的密文进行解密还原出原始数据。
特性:
⚪ 加/解密使用同一个密钥,效率高。
⚪ 将原始数据分割成固定大小的块,逐个进行加密。
缺点:
⚪ 密钥过多。
⚪ 密钥分发。
⚪ 数据来源无法确认。
例子解释:
1.多用户场景下,对称加密要为每对客户分配独立密钥才能实现通信安全,密钥数量随用户数增加,管理成本高。
2.密钥使用之前双方需要协商,则第一次传输时无加密是明文传输存在风险,无法安全通信。
3.多个用户之间使用同样的密钥,发送的密文互相可解密,无法保证数据来源。
常见算法:
DES(56bits)、3DES、AES(128,192,256bits)、Blowfish
2、非对称加密算法
非对称加密算法(Asymmetric Encryption Algorithm),它使用一对密钥------公钥(Public Key)和私钥(Private Key)实现加密、解密、数字签名和密钥交换等功能。
用公钥加密数据,只能使用与之对应的私钥解密,反之亦然。密钥是成对出现。
⚪公钥:公开给所有人,用于加密数据或验证签名。
⚪私钥:自己留存,严格保密,用于解密数据或生成签名。
功能:
数据加密:适合加密较小数据,比如:加密对称密钥。
数字签名:主要在于让接收方确认发送方身份。
缺点:
⚪密钥长,算法复杂。
⚪加密解密效率低下。
常见算法:
RSA:是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,可实现加密和数字签名。
DSA:数字签名算法,是一种标准的 DSS(数字签名标准)。
ECC:椭圆曲线密码编码学,比RSA加密算法使用更小的密钥,提供相当的或更高等级的安全。
①非对称加密实现加密

发送者:自己的公钥、自己的私钥、接收者的公钥;
接收者:自己的公钥、自己的私钥、发送者的公钥;
用公钥加密数据,只能使用与之对应的私钥解密。
例如:A跟B通过互联网进行通信,A将数据通过B的公钥加密发送给B,B收到密文后用自己的私钥解密------>保证数据在网络上传输的安全性(只有B的私钥才可以解密),但是无法证明数据是A发送的。
②非对称加密实现数字签名

发送者:自己的公钥、自己的私钥、接收者的公钥;
接收者:自己的公钥、自己的私钥、发送者的公钥;
用公钥加密数据,只能使用与之对应的私钥解密。
例如:A跟B通过互联网进行通信,A将数据通过自己的私钥加密发送给B,B收到密文后用A的公钥解密------>保证数据的来源是A,但是无法保证数据在网络上传输的安全性(其他用户拿到A的公钥可以解密)。
③ RSA,DSA(了解)
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多。
3、单向哈希算法
哈希算法:也称为散列算法,将任意长度的输入数据(如消息、文件)映射为固定长度的哈希值,称为digest,即摘要。
特性:
⚪任意长度输入,固定长度输出。
⚪修改数据的微小变化会导致哈希值发生显著且不可预测的变化。
⚪无法从哈希值反推出原始输入数据,即哈希函数是单向的。
功能:通过对比哈希值,可高效检测数据是否被篡改(数据完整性)。
常见算法:(算法不同,得到的哈希值长度也不一样)
md5 (128bits)、sha1 (160bits)、sha224、sha256、sha384、sha512
#默认md5算法 [root@ubuntu-158 ~]#md5sum /etc/passwd bf3f08e6f2c9394b8a4f94b67a8d6337 /etc/passwd #sha1 [root@ubuntu-158 ~]#sha1sum /etc/passwd aa2a68b2196a862a79aa4786b65ded88b395f9ff /etc/passwd
常用工具:
md5sum、sha1sum、sha256sum、sha512sum、openssl、gpg、rpm -V
4、综合应用多种加密算法
①实现数据加密
实现数据加密,无法验证数据完整性和来源
bash
Key(data)+Pb(key)
A跟B通信,A发送数据给B,并将原始数据进行对称密钥加密,再用B的公钥加密对称密钥,数据在传输过程中,只有B的私钥能解密出对称密钥,有了对称密钥就可解密出原始数据------>保证数据在网络上传输的安全,但无法验证数据完整性和来源;
此时,如果C跟A共享同一密钥key,并且C是有B的公钥可加密,同样将密文发送给B,B收到来自C的密文照样也可以解密出原始数据------>无法保证数据完整性和来源。
②实现数字签名
不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性。
bash
data+Sa(hash(data))
A跟B通信,A发送数据给B,数据是明文传输,但是用哈希算法将A的原始数据的摘要算出并将其用A的私钥加密,B收到后根据明文同样可计算出摘要,如果B有A的公钥则可以成功解密出摘要------>保证数据的来源是A,B用自己算出的摘要跟解密出的摘要对比------>相同------>保证数据完整性,传输过程没有被篡改;反之亦然。
③ 综合加密和签名
即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性。
方法1:Pb{Sa[hash(data)]+data}
A跟B通信,A发送数据给B,数据是明文传输,并且A将明文数据和通过哈希算法算出的A的原始数据并用A的私钥加密的摘要再通过B的公钥整体进行加密发送给B------>保证数据在网络上传输的安全(只有B的私钥可以解密),解密后得到明文和经过A私钥加密的明文摘要,B根据明文计算出摘要,如果B有A的公钥则可以成功解密出摘要------>保证数据的来源是A,再将B自己算出的摘要跟解密出的摘要对比------>相同------>保证数据完整性;反之亦然。
方法2:对称key{Sa[hash(data)]+data}+Pb(对称key)
A跟B通信,A发送数据给B,A通过对称密钥将明文和经过A的私钥加密的明文摘要整体加密,再将对称密钥用B的公钥加密,只有B的私钥才能解密出对称密钥------>保证数据在网络上传输的安全,B通过对称密钥解密出明文和A的私钥加密的明文摘要,B如果有A的公钥则可以成功解密出摘要------>保证数据的来源是A,再将B自己算出的摘要跟解密出的摘要对比------>相同------>保证数据完整性;反之亦然。
综上1,2:两种综合加密方法的前提------>A,B之间已经互换了公钥,如果没有这个前提,两种加密算法就不成立,问题:如何让A,B之间互换公钥,或者AorB自己拿到的公钥就一定是BorA的?
二、CA和证书
1、中间人攻击

正常情况:
A:自己的公钥、自己的私钥、B的公钥
B:自己的公钥、自己的私钥、A的公钥
中间人攻击:
A:自己的公钥、自己的私钥、MITM的公钥(A误以为是B的公钥)
B:自己的公钥、自己的私钥、MITM的公钥(B误以为是A的公钥)
MITM:A的公钥、B的公钥
后果:通信双方对于中间人完全透明,中间人攻击导致通信双方的隐私数据被拦截、敏感信息被窃取或通信内容被篡改。
2、CA和证书
CA(证书颁发机构,Certificate Authority)------网络世界的"身份证办理中心",它的核心作用是给网站、软件或设备颁发"电子身份证"(即SSL/TLS证书),证书在整个互联网中是可信的,以此来确保通信双方的身份真实性。
体系:
⚪根CA
根CA证书是自签名(自己私钥),操作系统内置根CA证书;
不直接签发用户证书,为中间CA做背书,签发二级CA授权证书,由二级CA进一步签发终端用户或服务器证书。
⚪中间CA
中间CA由根CA授权并颁发证书,可签发下一级中间CA或直接签发终端用户或服务器的证书。
⚪终端用户CA
终端用户CA的证书由中间CA签名颁发,终端用户CA直接面向最终用户,接收用户申请,提供证书签发、更新、撤销等全生命周期管理服务。
证书类型:
证书授权机构的证书、服务器证书、用户证书。
获取证书途径:
⚪自签名的证书: 自已签发自己的公钥。
⚪使用证书授权机构:
①生成证书请求 csr。
②将证书请求csr 发送给CA。
③CA 颁发签名证书。

A跟B通信,为了避免中间人攻击,不再交换公钥,而是互换证书,A和B向CA机构申请签发证书,证书中有用户公钥、用户相关信息,申请证书前要提交给CA机构审核再签发,对于证书签发完后会有证书颁发机构信息、证书有效期,CA机构将其和用户公钥、用户相关信息进行哈希摘要算法计算出摘要再用CA机构私钥进行加密得到数字签名再放入证书中;
设想中间人攻击情况,CA机构证书已经在操作系统上内置,证书中存着CA机构的公钥,MITM有CA机构的公钥,可以解密得到数字签名(摘要)但是无法修改------>CA机构的私钥加密,证书的前四部分通常是明文存储,就算被MITM篡改数据,当B收到证书后通过哈希摘要算法计算出前四部份的摘要,再通过CA机构的公钥解密得到数字签名(摘要)进行对比,就能够得知数据是否被篡改------>进而得知证书是否可信。
3、安全协议SSL/TLS
SSL/TLS协议是一种用于在计算机网络上进行安全通信的传输协议,通过加密算法对传输的数据进行加密,通过数字证书验证通信双方的身份,以及通过消息认证码(MAC)确保实现数据"机密性、完整性、身份认证"。
SSL(Secure Sockets Layer 安全套接字层),TLS(Transport Layer Security 传输层安全协议)
SSL子协议:
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换。
ChangeCipherSpec 协议:一条消息表明握手协议已经完成。
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告。
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等。

工作原理:
1、客户端发起连接:客户端向服务器发起一个安全连接请求,通常通过URL中的https来完成。
2、服务器提供证书:服务器响应客户端的请求,将自己的证书发送给客户端。证书由颁发机构(CA)签发,用于验证服务器的身份。
3、证书验证:客户端使用操作系统内置CA机构证书的中的公钥解密并验证服务器证书数字签名。同时,检查证书的有效期、撤销状态以及证书中的域名是否与请求的服务器域名匹配。
4、密钥交换:如果证书验证成功,客户端使用证书中的公钥(服务器)加密一个随机密钥(预主密钥),并将其发送给服务器。服务器使用自己的私钥解密这个预主密钥。
5、建立加密会话:客户端和服务器使用预主密钥生成会话密钥,并使用这个密钥对接下来的通信进行加密。
6、加密通信:一旦安全通道建立,客户端和服务器就可以开始加密的通信了。
4、HTTPS
HTTPS 协议:就是"HTTP 协议"和"SSL/TLS 协议"的组合。HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输。

工作原理:
客户端发起HTTPS请求:用户在浏览器里输入一个https网址,然后连接到服务器的443端口。
服务端的配置:采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。
传送服务器的证书给客户端:证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等。
客户端解析验证服务器证书:这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构(不在受信任列表中),过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书中公钥对该随机值进行非对称加密。
客户端将加密信息传送服务器:这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
服务端解密信息:服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值。
服务器加密信息并发送信息:服务器将数据利用随机值进行对称加密,再发送给客户端。
客户端接收并解密信息:客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容。
三、OpenSSL
OPENSSL是一个开源的软件库,它支持传输层安全性(TLS)和安全套接字层(SSL)协议的开源实现。OPENSSL提供了生成密钥对、管理证书(创建、申请、颁发、吊销等)以及为客户端应用提供加密和解密的功能,被广泛应用于Web服务器(如NGINX)、电子邮件服务器、VPN等各种应用中,以确保通信的安全。
包括三个组件:
⚪libcrypto:用于实现加密和解密的库。
⚪libssl:用于实现ssl通信协议的安全库。
⚪openssl:多用途命令行工具。
1、Base64编码
Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
核心目的:将不可见或非ASCII字符的二进制数据转换为可见的ASCII字符串,以便在文本协议或环境中安全传输和存储。

编码过程:将原始二进制数据按每3个字节分组存入(24位)缓冲区,不足3字节时用0补足剩余位;随后从缓冲区中依次取出6位(共4组),每组6位高位补2个0形成新字节,计算其十进制值并映射至64字符编码表,最终按顺序输出对应字符,完成全部数据编码;若末组不足6位,通过填充
=
确保输出长度为4的倍数。
[root@rocky8-153 ~]#echo Man | base64 TWFuCg== TWFU---MAN 因为包含换行符\t ascii->10 00001010 取六位000010 base64=C 10补四个0 100000 base=g
2、openssl命令
|--------|-------------------------|--------|
| 子命令类型 | En | 备注 |
| 标准命令 | Standard commands | |
| 消息摘要命令 | Message Digest commands | 配合不同算法 |
| 加密命令 | Cipher commands | 配合不同算法 |
openssl command [ command_opts ] [ command_args ]
openssl list [ standard-commands | digest-commands | cipher-commands | cipher-algorithms | digest-algorithms | public-key-algorithms]
openssl no-XXX [ arbitrary options ]
openssl交互和非交互式查看版本
[root@ubuntu-158 ~]#openssl version
OpenSSL 3.4.1 11 Feb 2025 (Library: OpenSSL 3.4.1 11 Feb 2025)
[root@rocky8-153 ~]#openssl
OpenSSL> version
OpenSSL 1.1.1k FIPS 25 Mar 2021
获得帮助
[root@ubuntu-158 ~]#openssl help
help:
Standard commands
asn1parse ca ciphers cmp
cms crl crl2pkcs7 dgst
dhparam dsa dsaparam ec
ecparam enc engine errstr
fipsinstall gendsa genpkey genrsa
help info kdf list
mac nseq ocsp passwd
pkcs12 pkcs7 pkcs8 pkey
pkeyparam pkeyutl prime rand
rehash req rsa rsautl
s_client s_server s_time sess_id
smime speed spkac srp
storeutl ts verify version
x509
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 md4 md5
rmd160 sha1 sha224 sha256
sha3-224 sha3-256 sha3-384 sha3-512
sha384 sha512 sha512-224 sha512-256
shake128 shake256 sm3
Cipher commands (see the `enc' command for more details)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256-ecb aria-128-cbc aria-128-cfb
aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb
aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1
aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb
aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8
aria-256-ctr aria-256-ecb aria-256-ofb base64
bf bf-cbc bf-cfb bf-ecb
bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc
camellia-192-ecb camellia-256-cbc camellia-256-ecb cast
cast-cbc cast5-cbc cast5-cfb cast5-ecb
cast5-ofb des des-cbc des-cfb
des-ecb des-ede des-ede-cbc des-ede-cfb
des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb
des-ede3-ofb des-ofb des3 desx
rc2 rc2-40-cbc rc2-64-cbc rc2-cbc
rc2-cfb rc2-ecb rc2-ofb rc4
rc4-40 seed seed-cbc seed-cfb
seed-ecb seed-ofb sm4-cbc sm4-cfb
sm4-ctr sm4-ecb sm4-ofb zlib
zstd
获取指定命令帮助
#二级命令+选项
[root@ubuntu-158 ~]#openssl md5 --help
...
#二级命令+三级命令
[root@ubuntu-158 ~]#openssl help md5
...
分类列出所有命令和算法
#列出所有标准命令
[root@ubuntu ~]# openssl list --commands
#列出所有摘要命令
[root@ubuntu ~]# openssl list -digest-commands
#列出所有摘要算法
[root@ubuntu ~]# openssl list -digest-algorithms
#列出所有加密命令
[root@ubuntu ~]# openssl list -cipher-commands
#列出所有加密算法
[root@ubuntu ~]# openssl list -cipher-algorithms
①openssl单向哈希加密
openssl digest-commands [options] [file...]
openssl dgst -commands [options] [file...]
#查看帮助
man dgst
#摘要命令和算法
[root@ubuntu-158 ~]#openssl list -digest-commands
blake2b512 blake2s256 md5 rmd160
sha1 sha224 sha256 sha3-224
sha3-256 sha3-384 sha3-512 sha384
sha512 sha512-224 sha512-256 shake128
shake256 sm3
[root@ubuntu-158 ~]#openssl list -digest-algorithms
[root@ubuntu-158 ~]#openssl md5 /etc/issue
MD5(/etc/issue)= 80e9b443d9e48e486906b662863590b1
[root@ubuntu-158 ~]#openssl dgst -md5 /etc/issue
MD5(/etc/issue)= 80e9b443d9e48e486906b662863590b1
[root@ubuntu-158 ~]#md5sum /etc/issue
80e9b443d9e48e486906b662863590b1 /etc/issue
[root@ubuntu-158 ~]#openssl sha512 /etc/issue
SHA2-512(/etc/issue)= 09241a0f9b17f8be4ad21852e36e2d5b2927c735bcdc41eebee257046b19eb79ba5f88e244b8cde1dab7673c6dd91b09d64ab967fbdc807f1dbdab5c6ba2fd73
[root@ubuntu-158 ~]#openssl dgst -sha512 /etc/issue
SHA2-512(/etc/issue)= 09241a0f9b17f8be4ad21852e36e2d5b2927c735bcdc41eebee257046b19eb79ba5f88e244b8cde1dab7673c6dd91b09d64ab967fbdc807f1dbdab5c6ba2fd73
[root@ubuntu-158 ~]#sha512sum /etc/issue
09241a0f9b17f8be4ad21852e36e2d5b2927c735bcdc41eebee257046b19eb79ba5f88e244b8cde1dab7673c6dd91b09d64ab967fbdc807f1dbdab5c6ba2fd73 /etc/issue
#dgst 默认sha256
[root@ubuntu-158 ~]#openssl dgst /etc/passwd
SHA256(/etc/passwd)= d73c6afa4754f06166c007db2fd76470c97f255346c38bb20337ab0cfcefd008
[root@ubuntu-158 ~]#openssl sha256 /etc/passwd
SHA2-256(/etc/passwd)= d73c6afa4754f06166c007db2fd76470c97f255346c38bb20337ab0cfcefd008
②openssl passwd生成用户密码
penssl passwd [options...] STRING
#常用选项
-help #获取帮助信息
-in infile #从文件读取要加密的内容
-noverify #从标准输入接收密码时,不用输两次
-quiet #不输出告警信息
-table #以表格形式输出
-salt val #手动指定盐值,默认每次自动随机生成
-stdin #从标准输入接收要加密的内容
-6 #使用SHA512 算法加密
-5 #使用SHA256 算法加密
-apr1 #使用 apache 特有的MD5 算法加密
-1 #使用MD5 加密算法
-aixmd5 #使用AIX MD5 加密算法
-rand val #将文件加到随机数生成器
-writerand outfile #将此过程中产生的随机数写到指定文件
-crypt #标准unix密码加密算法,旧版中默认项
#帮助
man openssl passwd
openssl passwd --help
openssl help passwd
#默认采用md5算法
[root@ubuntu-158 ~]#openssl passwd 12345
$1$xHJhTCW0$RlgB4grydBU2xhZizZdWE1
#交互式[root@rocky8-153 ~]#openssl passwd
Password:
Verifying - Password:
.nC8X.5lZb9Tk
[root@ubuntu-158 ~]#openssl passwd -1 12345
$1$do785afy$5B4ib76kaWBAGXJRPoyku1
#sha256
[root@ubuntu-158 ~]#openssl passwd -5 12345
$5$HZ0KiGEiLCpHxr1d$OzLe6OQUWDMJkR7gWtPm3RqY5.BxPUoOQWKXAK3mdIB
#标准输入读取
[root@ubuntu-158 ~]#echo 12345 | openssl passwd -stdin
$1$LhZqF9.t$RpdwI0tnFdyvTOlfMf2tl.
指定盐值
[root@ubuntu-158 ~]#openssl passwd -1 -salt abcde 12345
$1$abcde$pTFEaLhoD5SEeC0X0QkoJ0
[root@ubuntu-158 ~]#openssl passwd -1 -salt abcde 12345
$1$abcde$pTFEaLhoD5SEeC0X0QkoJ0
[root@ubuntu-158 ~]#openssl passwd -1 -salt abc890 12345
$1$abc890$hI/ap27qgjLXmMdeQGLWl/
[root@ubuntu-158 ~]#openssl passwd -1 -salt abc890 12345
$1$abc890$hI/ap27qgjLXmMdeQGLWl/
[root@ubuntu-158 ~]#getent shadow root hu
root:$y$j9T$Mjs0te1PjdwzGVEl..Fp/1$UI5Ec89xuvyJI9gf7q0a0TLUA1MHVKBC7sK4gLY0R50:20353:0:99999:7:::
hu:$6$a/IhWZ2BNfQjEQlS$R4qGmJ7AIEe0oZ34dBFZas/9McOmQbz9mKiZd6U.obB21jPYFEkXmu2fpHMT.lMt6lesF3MWC88rYICbIFgNQ/:20351:0:99999:7:::
[root@ubuntu-158 ~]#getent shadow root hu | cut -d: -f2
$y$j9T$Mjs0te1PjdwzGVEl..Fp/1$UI5Ec89xuvyJI9gf7q0a0TLUA1MHVKBC7sK4gLY0R50
$6$a/IhWZ2BNfQjEQlS$R4qGmJ7AIEe0oZ34dBFZas/9McOmQbz9mKiZd6U.obB21jPYFEkXmu2fpHMT.lMt6lesF3MWC88rYICbIFgNQ/
#$ y 加密算法
#$ j9T 盐值
#$ Mjs0te1PjdwzGVEl..Fp/1$UI5Ec89xuvyJI9gf7q0a0TLUA1MHVKBC7sK4gLY0R50 加密后密文
相同加密算法,相同内容相同盐值的情况下,加密后的内容也相同
[root@ubuntu-158 ~]#openssl passwd -6 -salt a/IhWZ2BNfQjEQlS 12345
$6$a/IhWZ2BNfQjEQlS$R4qGmJ7AIEe0oZ34dBFZas/9McOmQbz9mKiZd6U.obB21jPYFEkXmu2fpHMT.lMt6lesF3MWC88rYICbIFgNQ/
[root@ubuntu-158 ~]#openssl passwd -6 -salt a/IhWZ2BNfQjEQlS 12345
$6$a/IhWZ2BNfQjEQlS$R4qGmJ7AIEe0oZ34dBFZas/9McOmQbz9mKiZd6U.obB21jPYFEkXmu2fpHMT.lMt6lesF3MWC88rYICbIFgNQ/
不指定盐值,每次都会随机生成
html
[root@ubuntu-158 ~]#openssl passwd -6 12345
$6$S6yGpmwezSPsfhxY$PSnp8A3V5xPmXpnueAIgqor6jP25zkxQh3zpsjt66.QAn3aQvKC1VoN5yVT3Z.2ODMxGUFYxG75KTA9LCBdvE/
[root@ubuntu-158 ~]#openssl passwd -6 12345
$6$9EGpkEwRxAJQciCL$gAp7lkTLOlMPNqvTc1Lndd/PaC1STZD3IFyahs9MNSoBpdHOPBgQv0H5r1ZOk8JA7.jT0LsaJUhfy2GkE649T1
③openssl生成随机数
随机数生成器:伪随机数字,利用键盘和鼠标,块设备中断生成随机数
/dev/random #仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom #从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
html
openssl rand [options...] NUM
NUM #字符个数
-help #获取帮助信息
-out outfile #输出到指定文件
-rand val #将文件加到随机数生成器
-writerand outfile #将此过程中产生的随机数写到指定文件
-base64 #base64编码后显示
-hex #16进制显示
-engine val Use engine, possibly a hardware device
#帮助
openssl rand --help
openssl help rand
html
##直接使用会乱码,默认是以二进制输出,不一定都是可打印字符
[root@ubuntu-158 ~]#openssl rand 8
(B±K[root@ubuntu-158 ~]#openssl rand 8
XνH[root@ubuntu-158 ~]#openssl rand 8
ΞX[root@ubuntu-158 ~]#openssl rand 8
;"啧+қroot@ubuntu-158 ~]#openssl rand 8
L>>I`s[root@ubuntu-158 ~]#openssl rand 8
ꈛroot@ubuntu-158 ~]#
#转Base64,不够=补齐
[root@ubuntu-158 ~]#openssl rand -base64 8
RWiyNduLuDc=
[root@ubuntu-158 ~]#openssl rand -base64 8
WrWmdJwJp1w=
html
#随机生成10位长度密码
[root@ubuntu-158 ~]#openssl rand -base64 10 | head -c10
gv6zcFKWIc
[root@ubuntu-158 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c10
XCm0cPWz5I
#面试题:创建10个新用户,并指定8个字符长度的随机密码
[root@ubuntu-158 ~]#cat a.sh
#!/bin/bash
for i in {1..10};do
useradd user$i;
pwd=`openssl rand -base64 10 | head -c8`
echo user$1:$pwd >> shadow.txt
echo -e "${pwd}\n${pwd}" | passwd user$i
done
[root@ubuntu-158 ~]#cat a.sh
#!/bin/bash
for i in {1..10};do
useradd user$i;
pwd=`openssl rand -base64 10 | head -c8`
echo user$1:$pwd >> shadow.txt
echo $pwd | passwd --stdin user$i
done
④openssl实现密钥对
生成私钥,再从私钥中提取公钥
html
#生成私钥,私钥包含公钥信息
openssl genrsa [options...] [NUM]
#常用选项
NUM #指定密钥长度,单位bit,默认2048
-help #获取帮助信息
-out outfile #输出到指定文件
-rand val #以文件作随机数种子
-writerand outfile #将此过程中产生的随机数写到指定文件
-passout val #输出文件的保护口令
-* #加密算法
html
#从私钥提取公钥
openssl rsa [options...]
#常用选项
-help #获取帮助信息
-inform format #显示指定输入文件格式DEM|PEM,默认PEM
-outform format #指定输出文件模式DER|PEM,默认PEM
-in val #指定输入的文件,通常是私钥
-out outfile #指定要输出的文件,不指定就是标准输出
-pubin #从输入文件中读取公钥值,默认是读取私钥值
-pubout #指定导出公钥,默认输出私钥
-passout val #输出文件的保护口令
-passin val #输入文件的保护口令
-RSAPublicKey_in #输入文件格式为RSAPublicKey
-RSAPublicKey_out #输出文件格式为RSAPublicKey
-noout #不输出任何内容
-text #输出所有信息
-modulus #输出公钥信息
-check #检查公钥是否匹配
-* #指定私钥的保护加密算法
#加密算法
aes128|aes192|aes256|aria128|aria192|aria256|camellia128|camellia192|camellia256|des|des3|idea
html
#生成私钥
[root@ubuntu-158 hu]#openssl genrsa -out test.key
[root@ubuntu-158 hu]#cat test.key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDV5Rr+3o+75QVX
jADsF0Ck3H+vrqe0nPVkRN9UsKUQbAsVPoZUCNNmrXBUCkV+ylJmtp5mEnAKJZqI
i42OkzWwP0tUEDmddC2DobqJD6PrTjxsfy0nhjiftwk8vGsWUjSc0hdte1wdCUGd
...
-----END PRIVATE KEY-----
#从指定私钥提取出公钥
#不指定输出文件,默认输出到终端
[root@ubuntu-158 hu]#openssl rsa -in test.key -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1eUa/t6Pu+UFV4wA7BdA
pNx/r66ntJz1ZETfVLClEGwLFT6GVAjTZq1wVApFfspSZraeZhJwCiWaiIuNjpM1
sD9LVBA5nXQtg6G6iQ+j6048bH8tJ4Y4n7cJPLxrFlI0nNIXbXtcHQlBnbDvNNDO
1YSWs071nRxcsym5Ke/Ih5IDwtoMcotkuZ+1EhXLd+dyCxfVvrygBNoj/tuPluyU
ZSIoIZm5PbG6IcRbeHusS3KDQreRCaPzR26wAWC7b04d2h+G8y9qTTJV4JT5Gc2Y
v/TY9ntzvH2BK9l9tzjVqp/kMAgjP+fLvvcl9SG3sTz+PDbvY0HI+sOOlmLlNfm2
eQIDAQAB
-----END PUBLIC KEY-----
[root@ubuntu-158 hu]#openssl rsa -in test.key -pubout -out test2.pubkey
writing RSA key
[root@ubuntu-158 hu]#cat test2.pubkey
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1eUa/t6Pu+UFV4wA7BdA
pNx/r66ntJz1ZETfVLClEGwLFT6GVAjTZq1wVApFfspSZraeZhJwCiWaiIuNjpM1
sD9LVBA5nXQtg6G6iQ+j6048bH8tJ4Y4n7cJPLxrFlI0nNIXbXtcHQlBnbDvNNDO
1YSWs071nRxcsym5Ke/Ih5IDwtoMcotkuZ+1EhXLd+dyCxfVvrygBNoj/tuPluyU
ZSIoIZm5PbG6IcRbeHusS3KDQreRCaPzR26wAWC7b04d2h+G8y9qTTJV4JT5Gc2Y
v/TY9ntzvH2BK9l9tzjVqp/kMAgjP+fLvvcl9SG3sTz+PDbvY0HI+sOOlmLlNfm2
eQIDAQAB
-----END PUBLIC KEY-----
#这种写法也可
[root@ubuntu-158 hu]#openssl rsa -in test.key -pubout > test3.pubkey
生成私钥加密
html
#指定加密算法,指定口令
[root@ubuntu-158 108]#openssl genrsa -out test.key -des3 -passout pass:"12345"
#解密加密的私钥
[root@ubuntu-158 108]#cat test.key
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQVhURpVEvHdQ5i90o
zv534wICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQIfwrfV1J7cGMEggTI
...
-----END ENCRYPTED PRIVATE KEY-----
#解密加密的私钥
[root@ubuntu-158 108]#openssl rsa -in test.key -pubout -out test2.pubkey
#提取公钥要求输入密码
[root@ubuntu-158 108]#openssl rsa -in test.key -pubout -out test2.pubkey
Enter pass phrase for test.key:
writing RSA key
[root@ubuntu-158 108]#ll
total 16
-rw-r--r-- 1 root root 451 Oct 8 18:10 test2.pubkey
-rw------- 1 root root 1862 Oct 8 18:09 test.key
[root@ubuntu-158 108]#cat test2.pubkey
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsikQgfMDFrXiWvyLhgWj
Tk2uBcdQDQhCgHuQ0huZSEvd30qIpAumCfzS/trepHZ+UDorh5MPI8E6QqZQ4zmn
nHt0cTLvgDarFcC8lIArCmqg9YLKQFvI9XRNz+UTK5NFvrfHuF9YHn4mvLKovU6W
lxuAcBu1nVqUcfXEpI5lHsxk8TvOZqjBLXLZT9iYo5VgdOO00usaJDt3pCs8+1bY
MWcvW6lsu87lnDBo+eY9w9YLviulukUUBBazEd7ezBHwSUzzdHSvbsXQZaesZKfl
e04mlT5KW/3qrVjzK6hhZZecp5Xyl3rCvY6m4bexY2x++2ODmHnN4pzsuYfItvVr
+wIDAQAB
-----END PUBLIC KEY-----
密钥文件要保证权限,在Centos8及以后,已经是600权限,为保证其他版本Centos权限问题
html
(umask 666;openssl genrsa -out test.key)
四、建立私有CA实现证书申请颁发
证书申请及签署步骤:
生成证书申请请求
RA核验
CA签署
获取证书
#安装包
[root@rocky8-153 ~]#yum install openssl-libs
#查看配置文件
[root@rocky8-153 ~]#cat /etc/pki/tls/openssl.cnf
#安装包
[root@ubuntu-158 108]#apt install libssl-dev
#查看配置文件
[root@ubuntu-158 108]#cat /etc/ssl/openssl.cnf
配置文件部分内容说明
[ CA_default ]
[ CA_default ]
dir = ./demoCA # CA 根目录,所有与证书相关的文件目录
certs = $dir/certs # 存放签发的证书
crl_dir = $dir/crl # 存放 CRL(证书吊销列表)
database = $dir/index.txt # 证书数据库(记录签发的证书)
new_certs_dir = $dir/newcerts # 新签发证书的存储目录(按序列号命名)
certificate = $dir/cacert.pem # CA 机构自己的证书(公钥)
serial = $dir/serial # 证书编号文件,下一个证书编号,16进制
crlnumber = $dir/crlnumber # CRL 序列号文件(用于生成 CRL),存放当前CRL编号的文件
crl = $dir/crl.pem # CA证书吊销列表文件
private_key = $dir/private/cakey.pem # CA 证书的私钥(必须严格保护)
[ policy_match ]
countryName = match # 必须与 CA 的国家代码一致
stateOrProvinceName = match # 必须与 CA 的省份一致
organizationName = match # 必须与 CA 的组织名称一致
organizationalUnitName = optional # 不强制要求(可选)
commonName = supplied # 必须提供(如域名或用户名)
emailAddress = optional # 不强制要求
匹配策略,指用此CA颁发证书时,证书的相关字段与CA的值的匹配规则
|----------|----------------------|
| 匹配规则 | 说明 |
| match | 要求申请填写的信息跟CA设置信息必须一致 |
| optional | 可有可无,跟CA设置信息可不一致 |
| supplied | 必须填写这项申请信息 |
1、创建私有CA
①创建CA所需要的文件
#创建相关目录
[root@ubuntu-158 108]#mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
[root@ubuntu-158 108]#tree /etc/pki/CA
/etc/pki/CA
├── certs
├── crl
├── newcerts
└── private
4 directories, 0 files
②生成CA私钥
[root@ubuntu-158 108]#cd /etc/pki/CA
[root@ubuntu-158 CA]#openssl genrsa -out private/cdkey.pem 2048
③生成CA自签名证书
openssl req用于生成证书签名请求,自签名证书。
-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书有效期
-out /PATH/...:证书的保存路径
openssl x509允许用户查看、修改、转换和验证证书文件
[root@ubuntu-158 CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN #国家代码
State or Province Name (full name) [Some-State]:tianjin #省/州
Locality Name (eg, city) []:tianjin #城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hcompany #公司/单位
Organizational Unit Name (eg, section) []:HHH #部门
Common Name (e.g. server FQDN or YOUR name) []:test-certificate #域名
Email Address []:3506934363@qq.com #邮箱
[root@ubuntu-158 CA]#ls
cacert.pem certs crl newcerts private
#查看证书
[root@ubuntu-158 CA]#cat cacert.pem
-----BEGIN CERTIFICATE-----
MIIEATCCAumgAwIBAgIUfdOQV13NEl6fVJs/TnuNRT3rEewwDQYJKoZIhvcNAQEL
BQAwgY8xCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAd0aWFuamluMRAwDgYDVQQHDAd0
aWFuamluMREwDwYDVQQKDAhIY29tcGFueTEMMAoGA1UECwwDSEhIMRkwFwYDVQQD
...
-----END CERTIFICATE-----
#查看证书
[root@ubuntu-158 CA]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
7d:d3:90:57:5d:cd:12:5e:9f:54:9b:3f:4e:7b:8d:45:3d:eb:11:ec
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=tianjin, L=tianjin, O=Hcompany, OU=HHH, CN=test-certificate, emailAddress=3506934363@qq.com
Validity
Not Before: Oct 8 11:05:24 2025 GMT
Not After : Oct 6 11:05:24 2035 GMT
Subject: C=CN, ST=tianjin, L=tianjin, O=Hcompany, OU=HHH, CN=test-certificate, emailAddress=3506934363@qq.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:b0:d3:8c:5d:ed:8e:cf:99:a8:5d:f2:d0:ed:1d:
b0:70:16:99:82:80:47:99:c5:c2:f8:0f:3d:d4:05:
38:34:73:e9:93:1f:8b:34:a5:61:25:84:9a:a1:de:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
83:35:29:EB:BE:49:F6:65:BA:28:16:6D:C9:50:15:FF:15:79:B6:1E
X509v3 Authority Key Identifier:
83:35:29:EB:BE:49:F6:65:BA:28:16:6D:C9:50:15:FF:15:79:B6:1E
X509v3 Basic Constraints: critical
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
6f:d9:4b:d4:87:1f:47:e7:30:1b:99:dc:47:6a:35:ec:6f:f5:
37:04:f9:5c:ca:1f:27:74:86:50:d2:52:8d:63:e8:35:95:1e:
ba:aa:6b:1c:fc:28:2a:17:a3:c4:81:4d:41:3e:be:43:25:ee:
...
#导入到WINDOS中查看,添加后缀.crt
[root@ubuntu-158 CA]#sz cacert.pem
2、申请证书并颁发证书
①为需要使用证书的主机生成私钥
[root@ubuntu-158 108]#openssl genrsa -out test.key 2048
②为需要使用证书的主机生成证书申请文件
#注意:默认要求国家,省,公司名称三项必须和CA一致
[root@ubuntu-158 108]#openssl req -new -key test.key -out test.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:tianjin
Locality Name (eg, city) []:tianjin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hcompany
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test-cert
Email Address []:3506934363@qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@ubuntu-158 108]# ll
total 16
-rw-r--r-- 1 root root 1029 Oct 8 19:22 test.csr
-rw------- 1 root root 1704 Oct 8 19:18 test.key
③用CA签署证书并将证书颁发给请求者
如果证书申请文件中的配置项与CA机构的匹配规则不一致,将无法签发证书。
索引文件:记录所有已颁发证书的元数据,相当于 CA 的"证书数据库"。用于查询、撤销或验证证书状态。
序号文件:存储下一个待颁发证书的序列号,确保每个证书的序列号唯一。
openssl ra用于证书签发、撤销、管理
#创建索引文件
[root@ubuntu-158 CA]#touch index.txt
#创建序号文件
[root@ubuntu-158 CA]#echo 0F > serial
[root@ubuntu-158 CA]#ll
total 32
-rw-r--r-- 1 root root 1448 Oct 8 19:05 cacert.pem
drwxr-xr-x 2 root root 4096 Oct 8 18:44 certs/
drwxr-xr-x 2 root root 4096 Oct 8 18:44 crl/
-rw-r--r-- 1 root root 0 Oct 8 19:24 index.txt
drwxr-xr-x 2 root root 4096 Oct 8 18:44 newcerts/
drwxr-xr-x 2 root root 4096 Oct 8 18:55 private/
-rw-r--r-- 1 root root 3 Oct 8 19:24 serial
#签发证书
[root@ubuntu-158 CA]#openssl ca -in /root/hu/108/test.csr -out certs/test.crt -days 100
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 15 (0xf)
Validity
Not Before: Oct 8 11:26:26 2025 GMT
Not After : Jan 16 11:26:26 2026 GMT
Subject:
countryName = CN
stateOrProvinceName = tianjin
organizationName = Hcompany
commonName = test-cert
emailAddress = 3506934363@qq.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
0B:7B:A6:2E:3A:56:93:56:B0:1B:AD:99:69:08:E3:F4:20:24:C8:AD
X509v3 Authority Key Identifier:
83:35:29:EB:BE:49:F6:65:BA:28:16:6D:C9:50:15:FF:15:79:B6:1E
Certificate is to be certified until Jan 16 11:26:26 2026 GMT (100 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Database updated
#查看
[root@ubuntu-158 CA]#tree /etc/pki/CA
/etc/pki/CA
├── cacert.pem
├── certs
│ └── test.crt
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│ └── 0F.pem
├── private
│ └── cakey.pem
├── serial
└── serial.old
5 directories, 9 files
#原来是0F,加1变成10
[root@ubuntu-158 CA]#cat /etc/pki/CA/serial
10
#V - 表示有效,260116 - 表示2026年11月6日过期,0F 表示证书编号
[root@ubuntu-158 CA]#cat /etc/pki/CA/index.txt
V 260116112626Z 0F unknown /C=CN/ST=tianjin/O=Hcompany/CN=test-cert/emailAddress=3506934363@qq.com
④查看证书中信息
#根据编号查看状态
[root@ubuntu-158 CA]#openssl ca -status 0F
Using configuration from /usr/lib/ssl/openssl.cnf
0F=Valid (V)
[root@ubuntu-158 CA]#openssl x509 -in /etc/pki/CA/certs/test.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 15 (0xf)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=tianjin, L=tianjin, O=Hcompany, OU=HHH, CN=test-certificate, emailAddress=3506934363@qq.com
Validity
Not Before: Oct 8 11:26:26 2025 GMT
Not After : Jan 16 11:26:26 2026 GMT
Subject: C=CN, ST=tianjin, O=Hcompany, CN=test-cert, emailAddress=3506934363@qq.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a9:1b:0d:b9:4a:cf:6d:d3:98:0e:91:49:65:06:
3c:61:2f:2f:1d:81:b4:c9:1c:11:3a:84:c8:0c:3a:
fc:9a:eb:a7:cf:0a:d5:1f:dd:6e:26:2f:a3:24:3e:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
0B:7B:A6:2E:3A:56:93:56:B0:1B:AD:99:69:08:E3:F4:20:24:C8:AD
X509v3 Authority Key Identifier:
83:35:29:EB:BE:49:F6:65:BA:28:16:6D:C9:50:15:FF:15:79:B6:1E
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
6b:43:a1:ab:70:6d:c3:9c:d1:2c:cd:5c:b5:e2:ce:b0:20:48:
6c:7c:40:5d:13:4c:3b:2c:93:0e:35:38:f2:57:7a:ff:4b:e7:
14:cd:a0:36:4c:2b:6f:9c:9f:89:2e:03:e3:53:5e:21:99:c2:
...
#导入到WINDOS中查看
[root@ubuntu-158 CA]#sz certs/test.crt

解决:


3、吊销证书
客户端访问服务器,得到服务器的证书,要先去校验服务器证书的合法性,先看证书颁发的机构,如果颁发机构在客户端受信任列表可以进一步校验,如果不在压根不需要校验其证书。操作系统中查找颁发机构的证书,用来校验服务器的证书合法性,首先先看颁发机构吊销了哪些证书,如果吊销列表存在该服务器的证书,说明该服务器证书被颁发机构吊销失效。
在客户端获取要吊销证书的serial
[root@ubuntu-158 CA]#openssl x509 -in /etc/pki/CA/certs/test.crt -noout -serial -subject
serial=0F
subject=C=CN, ST=tianjin, O=Hcompany, CN=test-cert, emailAddress=3506934363@qq.com
在CA上,根据客户提交的serial和subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书
[root@ubuntu-158 CA]#openssl ca -revoke /etc/pki/CA/certs/test.crt
Using configuration from /usr/lib/ssl/openssl.cnf
Revoking Certificate 0F.
Database updated
[root@ubuntu-158 CA]#cat /etc/pki/CA/index.txt
R 260116112626Z 251008120005Z 0F unknown /C=CN/ST=tianjin/O=Hcompany/CN=test-cert/emailAddress=3506934363@qq.com
指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行
[root@ubuntu-158 CA]#echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表
#-gencrl生成证书撤销列表crl
[root@ubuntu-158 CA]#openssl ca -gencrl -out /etc/pki/CA/crl.pem
Using configuration from /usr/lib/ssl/openssl.cnf
查看crl文件
[root@ubuntu-158 CA]#openssl crl -in /etc/pki/CA/crl.pem -noout -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=tianjin, L=tianjin, O=Hcompany, OU=HHH, CN=test-certificate, emailAddress=3506934363@qq.com
Last Update: Oct 8 12:11:29 2025 GMT
Next Update: Nov 7 12:11:29 2025 GMT
CRL extensions:
X509v3 CRL Number:
1
Revoked Certificates:
Serial Number: 0F
Revocation Date: Oct 8 12:00:05 2025 GMT
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
a4:fd:32:4d:60:1a:68:f3:c4:e1:cf:16:d1:4d:f5:16:92:e0:
aa:93:72:dc:4d:fb:1b:07:a7:29:7e:1c:5a:5a:70:23:cd:29:
6b:e2:5e:4b:e0:d7:81:62:f3:bc:e1:c5:f8:a1:53:43:8f:bf:
70:25:d9:86:70:a6:32:c6:33:a1:ab:e1:a0:51:0c:e7:d9:35:
8b:08:b1:8d:6c:5b:65:ad:51:3d:52:c7:48:e1:36:c3:31:75:
b0:fa:11:d2:7c:b5:c4:df:f1:d5:06:bf:1c:cd:90:1f:09:51:
c8:08:5e:bc:84:bd:03:b0:b5:6c:fe:0b:81:e5:7c:10:93:31:
90:10:35:2e:0d:06:85:09:1d:10:06:1b:89:60:a1:8b:e9:0a:
bc:a6:42:ca:b2:ac:f0:07:ad:03:5c:81:b0:82:ed:bd:e3:45:
f2:81:2e:44:1d:0e:0c:eb:a9:95:1b:a6:5b:1a:cf:cf:b7:fb:
09:e2:f1:ac:b0:6e:98:55:cc:54:8e:30:c4:08:d4:76:c0:34:
25:a1:cd:36:f3:37:50:7d:00:b8:72:64:e8:22:54:d4:37:33:
f1:c3:0d:7c:ae:33:9e:1b:ac:06:eb:3e:8a:98:a9:04:00:d4:
dc:37:ed:e8:f5:c2:9b:13:0d:c2:3b:2d:3d:fe:c3:78:1b:53:
5a:66:c1:f4