openssl 基本命令使用方法

查看OpenSSL的版本信息:

root@ openssl version
OpenSSL 3.4.0 22 Oct 2024 (Library: OpenSSL 3.4.0 22 Oct 2024)

注:root@ 代表命令行提示符,不属于输入部分。

获取OpenSSL的帮助信息:

root@ 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
mdc2              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
idea              idea-cbc          idea-cfb          idea-ecb
idea-ofb          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

具体某一个工具的帮助:

root@ openssl enc -help

加密

aes-128-ecb加密

加密

echo hello >>test.txt
openssl enc -e -aes-128-ecb -in test.txt -out enc_test.txt -pass pass:123
  • e:加密;d: 解密;
  • aes-128-ecb:aes加密,加密的秘钥长度是128bit,加密模式采用ecb模式;
  • in/out: 输入/输出文本
  • pass:加密密码,真实的密码是在pass:后的字符

加密后的结果:

Salted__+□□¶□ڨ<□♣□1?S□↕□□I☻0□cp

解密

openssl enc -d -aes-128-ecb -in enc_test.txt -out decrypt_test.txt -pass pass:123

加密+base64编码

openssl enc -e -aes-128-ecb -base64 -in test.txt -out enc_test.txt -pass pass:123 -p
  • p:是打印加密时的密文、盐值和初始化向量等信息。

上述命令执行后,打印出以下信息:

salt=225FD3B76BD6D783
key=C46F6DE636A12D8096B110D12C27EE98
  • salt:当前加密的盐值。有了这个盐值后,多次对相同密文使用相同密码加密的密文都不同。
  • key:由盐值和密码派生出来实际用于加密的秘钥。秘钥的长度与分组长度相同,均为128bits。

加密后的结果:

U2FsdGVkX18F8pAVPvcIbYUgFYDBZtKGEKSvOwRqloY=

解密+base64编码

使用base64进行编码,在解密时也需要告知base64编码的。

openssl enc -d -aes-128-ecb -base64 -in enc_test.txt -out decrypt_test.txt -pass pass:123

若加密时,采用base64编码,解密时未指定,将会出现下面的错误:

bad decrypt
34359836736:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:crypto/evp/evp_enc.c:572:

加密不带盐值
不带盐值,ECB模式对相同明文的多次加密后的密文就是相同。大家可以使用下面的命令多次重复加密相同的明文,再用前面的带盐值的命令加密进行对比。

openssl enc -e -aes-128-ecb -in test.txt -out enc_test.txt -pass pass:123 -nosalt -base64 -p
  • nosalt:不加入盐值。这就会造成多次加密后的密文是相同的。

上述命令执行后,打印出以下信息:

salt=225FD3B76BD6D783
key=A665A45920422F9D417E4867EFDC4FB8

解密不带盐值

openssl enc -d -aes-128-ecb -in enc_test.txt -out decrypt_test.txt -pass pass:123 -nosalt -base64 -p

解密时,也许指定不带盐值,否则报告下面的错误。

bad magic number

aes-128-cbc加密

加密

openssl enc -e -aes-128-cbc -in test.txt -out enc_test.txt -pass pass:123 -nosalt -base64 -p

上述命令执行后,打印出以下信息:

key=A665A45920422F9D417E4867EFDC4FB8
iv =A04A1F3FFF1FA07E998E86F7F7A27AE3
  • iv:即为CBC模式的初始化向量值。这个初始化向量可以人工指定,也可以采用随机生成,也可以有OpenSSL自动生成。

解密

openssl enc -d -aes-128-cbc -in enc_test.txt -out decrypt_test.txt -pass pass:123 -nosalt -base64 -p

aes-128-ctr加密

该加密模式,分块的末块长度不足,无需填充。因此,待加密的明文数据量较少时,加密后的密文数据量也较少。

加密

openssl enc -e -aes-128-ctr -in test.txt -out enc_test.txt -pass pass:123 -nosalt -base64 -p

上述命令执行后,打印出以下信息:

key=A665A45920422F9D417E4867EFDC4FB8
iv =A04A1F3FFF1FA07E998E86F7F7A27AE3

解密

openssl enc -d -aes-128-ctr -in enc_test.txt -out decrypt_test.txt -pass pass:123 -nosalt -base64 -p

散列函数和消息验证码

散列函数

MD5

root@ openssl dgst -md5 test.txt
MD5(test.txt)= de1ec876fbb738255aa58bdb775d93c2

SHA256

root@ openssl dgst -sha256 test.txt
SHA256(test.txt)= ec58ec95a10466fa34edd4790dd822ab849b2562bfd700c53c31e2cf39dc695a

SHA3-256

root@ openssl dgst -sha3-256 test.txt
SHA3-256(test.txt)= af5b10d616cadd83f643d842e1c199d2d15c2800a8a8f5f19d1f259be92970c1

消息验证码

root@ openssl dgst -sha256 -hmac 123 test.txt
HMAC-SHA256(test.txt)= e5b12545e3f7e19b4f623ec70b110f70c65af7c7b8bc768663d5a27e33d332b3

公私钥生成

1. 生成私钥明文文件

root@ openssl genrsa -out self_private.pem 2048
  • out: 输出的文件名。
  • 2048:指的是私钥的长度,默认是2048bits。最短:512,最长16384。不建议太长,也不建议太短。太短,秘钥安全等级不够;太长生成秘钥的时间很长,更别说用于加解密了。使用默认值2048即可,不填写时就是默认2048bits。

生成的私钥文件内容如下:

-----BEGIN RSA PRIVATE KEY-----                                 
MIIEowIBAAKCAQEAxby5Z/WPn0SoKl6R+Wh9Og/FGc0S5Mek7Bd5Z7VqAtEuqYt5
tVWv76Gqmv5hGKAcHt2SCUpyxHYhTaXQug0TJfuJHK5tuUxwkblznUpbRgp2PK9k
...
3HgG4jZXSAw9kW4hJFkMHuEKciL/G2VBjmERc0ew/C7xjKoC4cBQrfHqx2hzPKnw
M/2El4Erby8O//J+tgk9c2zEtK19MIUwUstt03z9JgdsBZZjbmRj            
-----END RSA PRIVATE KEY-----                                   

2. 查看明文私钥内容

openssl rsa -in self_private.pem -text
  • text:表示将输入的文件信息以文本方式呈现。

输出内容如下,作者未对每个参数的用途做深入研究,感兴趣的读者可以从其他途径进一步了解:

RSA Private-Key: (2048 bit, 2 primes)
modulus:
    00:c5:bc:b9:67:f5:8f:9f:44:a8:2a:5e:91:f9:68:
    ...
    e6:ce:69:e4:79:7e:87:ed:c6:c2:5b:6b:9e:69:41:
    78:2d
publicExponent: 65537 (0x10001)
privateExponent:
    70:59:0e:2e:d7:02:c7:47:47:14:eb:ae:9c:ba:95:
    ...
    55:3b:53:90:42:6f:77:2a:31:c3:5a:04:9c:7b:ce:
    b1
prime1:
    00:f5:9f:0f:67:97:5b:73:0b:cd:c6:ff:04:c0:93:
    ...
    89:14:b8:f2:23:8b:54:63:4b:b7:23:7a:7e:88:ac:
    8b:0b:7c:b2:eb:5f:c9:1b:af
prime2:
    00:ce:17:b0:e4:1c:5a:c7:a5:77:59:2e:c6:bf:03:
    ...   
    7d:83:a9:17:1f:d8:d2:f5:1c:1a:9d:ef:a4:1e:de:
    7e:f2:34:78:04:dc:4f:d4:e3
exponent1:
    28:33:f3:ca:89:ec:af:05:04:96:88:d1:57:50:06:
    ...
    c7:36:8a:73:a4:ef:98:1d:21:89:ce:17:fd:f8:f7:
    fd:56:58:d6:cb:e3:d8:03
exponent2:
    1c:22:a9:d8:8a:72:6e:3d:0d:ad:14:30:b7:d5:13:
    ...
    3d:1b:31:77:fc:8e:d8:3d:8c:f8:b0:c5:94:1d:45:
    f1:64:ee:59:a3:86:16:87
coefficient:
    00:96:a3:ee:9e:3e:1c:93:00:20:d7:f4:9f:35:8e:
    ...
    73:6c:c4:b4:ad:7d:30:85:30:52:cb:6d:d3:7c:fd:
    26:07:6c:05:96:63:6e:64:63
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxby5Z/WPn0SoKl6R+Wh9Og/FGc0S5Mek7Bd5Z7VqAtEuqYt5
tVWv76Gqmv5hGKAcHt2SCUpyxHYhTaXQug0TJfuJHK5tuUxwkblznUpbRgp2PK9k
...
3HgG4jZXSAw9kW4hJFkMHuEKciL/G2VBjmERc0ew/C7xjKoC4cBQrfHqx2hzPKnw
M/2El4Erby8O//J+tgk9c2zEtK19MIUwUstt03z9JgdsBZZjbmRj
-----END RSA PRIVATE KEY-----

3. 从私钥文件中提取公钥
注:从原理上是不能从公钥中提取私钥信息的。

openssl rsa -pubout -in self_private.pem -out self_public.pem
  • pubout:表示输出的是公钥信息

生成的公钥文件内容如下:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxby5Z/WPn0SoKl6R+Wh9
...
N2qaDYc7XCg4QRotKTb0DP9c7cmTle+88OCYUrK1CZPmzmnkeX6H7cbCW2ueaUF4
LQIDAQAB
-----END PUBLIC KEY-----

4. 查看明文公钥内容

openssl rsa -pubin -in self_public.pem -text
  • pubin:表示输入是公钥文件

输出内容如下:

RSA Public-Key: (2048 bit)
Modulus:
    00:c5:bc:b9:67:f5:8f:9f:44:a8:2a:5e:91:f9:68:
    ...
    e6:ce:69:e4:79:7e:87:ed:c6:c2:5b:6b:9e:69:41:
    78:2d
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxby5Z/WPn0SoKl6R+Wh9
...
N2qaDYc7XCg4QRotKTb0DP9c7cmTle+88OCYUrK1CZPmzmnkeX6H7cbCW2ueaUF4
LQIDAQAB
-----END PUBLIC KEY-----

5. 生成私钥密文文件

openssl genrsa -aes-128-cbc -passout pass:123 -out self_private.pem 2048
  • aes-128-cbc:对私钥的加密的算法。
  • passout:加密的密码。一定要以pass:开头,123:才是密码。

生成的私钥密文文件内容如下,输出内容中有表明该私钥文件时已经加密过:

-----BEGIN ENCRYPTED PRIVATE KEY-----                            
MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQQYxNNgN4T33Kab8LP 
...
DwlZu+UpVvxWIqZ71uEmO4zuMMrq+AAGKYP9tT6dexZ1d8dXkfhqAlXRfPrF84h 
UFNSLz4or3kBL0SLsZfdGkNlC04OY+FfIvspn+w6KJmk7MY9Uc6bN6A=         
-----END ENCRYPTED PRIVATE KEY-----                              

6. 解密私钥密文文件

openssl rsa -passin pass:123 -in self_private.pem -out decrypt.pem

解密后的明文私钥:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2bzXPBenjjFqb
...
24JN99YfT3Ib/cTiY9gTaQ0yFMng6zpGu47NiL4F1x1TQsWt/v2edMa5d+MaLFyX
HiF54f/y8YemhZp6fp5MSIyC
-----END PRIVATE KEY-----

直接从私钥密文文件提取公钥:

openssl rsa -passin pass:123 -pubout -in self_private.pem -out self_public.pem

7. 校验私钥文件秘钥对匹配

root@ openssl rsa -check -in self_private.pem -passin pass:123 -noout
RSA key ok
  • check:校验私钥文件
  • noout:不输出秘钥信息

8. 比较私钥文件中的公钥信息和公钥文件中的公钥信息

从私钥文件中提取公钥,计算sha256值:

root@ openssl rsa -passin pass:123 -in self_private.pem -pubout | openssl sha256
writing RSA key
SHA2-256(stdin)= 56698700a3328d088755be4ebe9215dd847c44a4a77ad1ad8baf96b5045f24cf

提取公钥文件公钥,计算公钥的sha256值:

root@ openssl rsa -pubin -in self_public.pem -pubout | openssl sha256
writing RSA key
SHA2-256(stdin)= 56698700a3328d088755be4ebe9215dd847c44a4a77ad1ad8baf96b5045f24cf

或者,直接计算公钥文件的sha256值:

root@ openssl sha256 self_public.pem
SHA2-256(self_public.pem)= 56698700a3328d088755be4ebe9215dd847c44a4a77ad1ad8baf96b5045f24cf

公私钥加解密

公钥加密

openssl pkeyutl -encrypt -pubin -inkey self_public.pem -in test.txt -out encrypt_test.txt
  • encrypt:加密。
  • pubin:输入是公钥
  • inkey:因为pubin是表示公钥,此处传入的就是公钥文件

私钥解密
因为私钥文件是密文,因此需要包含 -passin pass:123来对密文的私钥解密。

openssl pkeyutl -decrypt -inkey self_private.pem -passin pass:123 -in encrypt_test.txt -out decrypt_test.txt
  • decrypt:解密。
  • inkey:因为没有指定是公钥,此处就默认是私钥文件。

私钥签名,公钥验签

私钥签名

openssl pkeyutl -sign -inkey self_private.pem -passin pass:123 -digest sha256 -rawin -in test.txt -out sign_test.txt -hexdump
  • sign:签名
  • digest:签名时所用的Hash函数,且限制输入文件为raw类型。
  • rawin:指示raw类型的文件输入。未经过压缩处理的,即原生的。所有文件都可以认为是原始文件。
  • hexdump:十六进制打印输出。在生成签名文件时,需要去掉,否则在验签时无法验证通过。

等效命令如下:

openssl dgst -sha256 -sign self_private.pem -passin pass:123 -out sign_test.txt -hex test.txt

打印输出签名文件内容如下:

root@ cat sign_test.txt  
}□□♠□□□□▲□□N□□□.□OF□□-□□□♣G□□□☺□*►↕□□
$m□q□□c□♥8~ǕuxO□□□□□□ □R□♥,□□□H□%☼□E□̆□□W<_♫>□↑d□∟{[□□□TL☻□□□□B□>□►|■q□8
□□□□□□□♠գPp□j3☺q□□□□□D
□▲□J|□□□^#□□i□↨͓1Ӌо□♠□JI9□g□\□p↨□□►□♦§˜□"□☻O□□<□2#8□□UΞI→Π□Ϙh□□?'3□l□h□□
□►□i□□□-□)`□v□□M□ꦿ

按照十六进制输出如下:

root@ cat sign_test.txt                                                      
0000 - 7d e4 af 06 bf dd e9 98-1e f9 c1 4e 96 bf d8 2e   }..........N....
0010 - e0 4f 46 8c 92 2d 98 b0-90 05 47 83 e6 9c 01 b7   .OF..-....G.....
0020 - 2a 10 12 9e df 1b 45 24-6d f2 71 95 d6 63 e6 03   *.....E$m.q..c..
0030 - 38 7e c7 95 75 78 4f 9c-e6 8b e6 95 d0 20 b6 52   8~..uxO...... .R
0040 - f5 03 2c be 88 c9 48 80-25 0f ff 45 f5 cc 86 a1   ..,...H.%..E....
0050 - bd 57 3c 5f 0e 3e b2 18-64 fa 1c 7b a4 5b ba 8e   .W<_.>..d..{.[..
0060 - df 54 4c 02 c0 a3 b2 85-42 c5 3e 86 10 7c 16 71   .TL.....B.>..|.q
0070 - 8a 38 aa 90 72 05 fa 41-f9 04 cc 6a 1f d8 4e 9c   .8..r..A...j..N.
0080 - c8 41 97 c4 f5 f2 b0 44-0d ad 9e c6 e3 f9 8f a6   .A.....D........
0090 - 06 d5 a3 50 70 98 6a 33-01 71 0a b7 1e b1 4a 7c   ...Pp.j3.q....J|
00a0 - a2 dd df 5e 23 94 b7 69-c3 17 cd 93 31 d3 8b d0   ...^#..i....1...
00b0 - be bb 06 dd 4a 49 39 df-67 d0 5c d3 70 17 bd d8   ....JI9.g.\.p...
00c0 - 10 b2 04 00 15 c2 98 eb-22 f5 02 4f b6 a7 3c f9   ........"..O..<.
00d0 - 32 23 38 8e db 55 ce 9e-49 1a ce a0 ab cf 98 68   2#8..U..I......h
00e0 - 94 bc 3f 27 33 99 6c c2-68 ba 9a fa 10 f6 69 8d   ..?'3.l.h.....i.
00f0 - b1 f7 2d cb 29 60 a9 76-d8 dd 4d b7 ea a6 bf d8   ..-.)`.v..M.....

公钥验签

root@ openssl pkeyutl -verify -pubin -inkey self_public.pem -rawin -in test.txt -sigfile sign_test.txt
Signature Verified Successfully

等效命令如下:

root@ openssl dgst -verify self_public.pem -signature sign_test.txt test.txt
Verified OK

身份证书

1. 生成证书签名请求文件

a. 生成一对公私钥

openssl genrsa -aes-128-cbc -passout pass:123 -out self_private.pem 2048
openssl rsa -pubout -passin pass:123 -in self_private.pem -out self_public.pem

私钥文件:self_private.pem
公钥文件:self_public.pem

b. 基于公私钥生成签名请求

openssl req -new -key self_private.pem -passin pass:123 -subj "/CN=*example.com/O=Test, Inc./C=CN/ST=Sichuan/L=Chengdu" -out self_csr.pem
  • req:签名请求命令
  • key:私钥文件
  • subj:主体信息,主要包含以下信息:
    • C:国家代码(Country Name),此处填写:中国CN。
    • ST:省份或州(State or Province Name),此处填写:Sichuan。
    • L:城市或地区(Locality Name),此处填写:Chengdu。
    • O:组织名称(Organization Name),此处填写Test, Inc.公司。
    • OU:组织单位名称(Organizational Unit Name),表示组织内部的部门或单位。一般可不填写。
    • CN:通用名称(Common Name),对于服务器证书,这通常是服务器的域名或IP地址,此处填写*example.com网址;对于个人证书,这通常是证书持有者的姓名或别名。

签名请求文件原始信息如下:

-----BEGIN CERTIFICATE REQUEST-----
MIICojCCAYoCAQAwXTEVMBMGA1UEAwwMKmV4YW1wbGUuY29tMRMwEQYDVQQKDApU
...
HIFgyPBTc0gUXvHCLqoseVXuUUeOL6zThgQOCWj9WP2XgCyzY/Gqzbq003aBa58a
9Ov/84+n
-----END CERTIFICATE REQUEST-----

通过下列的命令,可以查看签名请求文件信息:

openssl req -in self_csr.pem -noout -text

输出内容如下:

Certificate Request:
    Data:
        Version: 1 (0x0)
        # 主体信息
        Subject: CN=*example.com, O=Test, Inc., C=CN, ST=Sichuan, L=Chengdu
        # 主体的公钥信息
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:e4:cf:dc:1f:35:5f:58:c0:1b:1c:b3:7d:ff:fe:
                    ...
                    97:88:fc:5a:65:00:2f:28:78:03:5a:65:89:8d:ee:
                    ea:ef
                Exponent: 65537 (0x10001)
        Attributes:
            (none)
            Requested Extensions:
    # 对签名请求信息的签名算法和签名值
    Signature Algorithm: sha256WithRSAEncryption 
    Signature Value:
        cb:bd:2b:71:ff:2f:f4:f3:e0:ec:7c:4d:e0:13:e1:72:54:fd:
        ...
        97:80:2c:b3:63:f1:aa:cd:ba:b4:d3:76:81:6b:9f:1a:f4:eb:
        ff:f3:8f:a7

c. 一步生成签名请求
生成私钥的同时也生成签名请求文件。

openssl req -new -newkey rsa:2048 -passout pass:123 -subj "/CN=*example.com/O=Test, Inc./C=CN/ST=Sichuan/L=Chengdu" -keyout self_private.pem -out self_csr.pem
  • newkey:生成私钥,rsa算法,2048bits的秘钥长度。

d. 校验签名请求文件

root@ openssl req -verify -in self_csr.pem -key self_private.pem -passin pass:123 -noout
Warning: Not placing -key in cert or request since request is used
Certificate request self-signature verify OK

2. 证书颁发机构签名身份证书

a. 证书机构生成自签名的根证书

生成根私钥和证书签名请求文件

openssl req -new -newkey rsa:2048 -passout pass:123 -subj "/CN=*root_cert.com/O=root_cert.Inc./C=CN/ST=Sichuan/L=Chengdu" -keyout root_private.pem -out root_csr.pem
  • 根私钥文件:root_private.pem
  • 根证书请求文件:root_csr.pem

自签发根证书

openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private.pem -passin pass:123 -out root_cert.pem -extensions v3_ca -extfile <(cat <<-EOF
[v3_ca]
basicConstraints = critical,CA:true
keyUsage = critical, keyCertSign, cRLSign
EOF
)
Certificate request self-signature ok
subject=CN=*root_cert.com, O=root_cert.Inc., C=CN, ST=Sichuan, L=Chengdu
  • x509:是一个标准协议,此处是满足协议的x509命令。

自签发的证书内容如下:

root@ cat root_cert.pem
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgIUAKR3xmTKbjm9lW13Zq8QUFIWNaAwDQYJKoZIhvcNAQEL
...
C6FBSwbFbI8hh+GrpPeydvM9s1UtgYGo0Y7ngvMPNyOo5viz5cbDLQ4nL224i2Ii
MP9FXzU9ETlolRBau6h/IF8H4Rp3xwrMSw==
-----END CERTIFICATE-----

利用如下命令查看根证书:

openssl x509 -in root_cert.pem -noout -text
Certificate:                                                                       
    Data:                                                                          
        Version: 3 (0x2)                                                           
        Serial Number:                                                             
            68:08:bc:c3:99:19:45:37:57:0a:99:34:99:72:37:0e:b4:16:da:05            
        Signature Algorithm: sha256WithRSAEncryption                               
        Issuer: CN=*root_cert.com, O=root_cert.Inc., C=CN, ST=Sichuan, L=Chengdu   
        Validity                                                                   
            Not Before: Nov 25 16:45:39 2024 GMT                                   
            Not After : Nov 23 16:45:39 2034 GMT                                   
        Subject: CN=*root_cert.com, O=root_cert.Inc., C=CN, ST=Sichuan, L=Chengdu  
        Subject Public Key Info:                                                   
            Public Key Algorithm: rsaEncryption                                    
                Public-Key: (2048 bit)                                             
                Modulus:                                                           
                    00:e0:f9:37:a9:c9:ff:2c:8b:a9:fb:76:4c:7a:d4:                  
                    ...
                    94:70:00:09:1b:b2:4b:e6:10:68:ad:c3:cb:67:ff:                  
                    52:9d                                                          
                Exponent: 65537 (0x10001)                                          
        X509v3 extensions:                                                         
            X509v3 Basic Constraints: critical                                     
                CA:TRUE # 证书机构颁发的证书                                                           
            X509v3 Key Usage: critical                                             
                Certificate Sign, CRL Sign  # 证书签名,证书吊销列表签名                                        
            X509v3 Subject Key Identifier:                                         
                52:56:00:0C:28:98:26:2E:56:70:7E:84:62:7B:A2:81:95:2E:C9:50        
    Signature Algorithm: sha256WithRSAEncryption                                   
    Signature Value:                                                               
        29:e1:51:8d:9a:c0:56:c3:e8:5c:12:15:08:30:75:06:b3:17:                     
        18:d8:89:6b:2b:4d:87:d7:34:3f:99:09:ba:28:e9:91:e0:13:                    
        ...
        04:c6:b9:3e                                                                

b. 利用自签发的根证书,签发其他实体组织的证书签名

openssl x509 -req -days 180 -CA root_cert.pem -CAkey root_private.pem -passin pass:123 -in self_csr.pem -out self_cert.pem -CAcreateserial -extfile <(cat <<-EOF
[v3_server]
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
EOF
)
Certificate request self-signature ok  # 表明签名请求信息时自签名,且状态OK。
subject=CN=*example.com, O=Test, Inc., C=CN, ST=Sichuan, L=Chengdu

查看身份证书信息

openssl x509 -in self_cert.pem -noout -text
Certificate:                                                                         
    Data:                                                                            
        Version: 3 (0x2)                                                             
        Serial Number:                                                               
            71:32:19:0a:09:10:b6:a9:a0:b8:3e:65:3d:59:7f:0e:18:a2:cd:cd              
        Signature Algorithm: sha256WithRSAEncryption                                 
        Issuer: CN=*root_cert.com, O=root_cert.Inc., C=CN, ST=Sichuan, L=Chengdu   # 签发机构信息  
        Validity                                                                     
            Not Before: Nov 24 15:15:53 2024 GMT                                     
            Not After : May 23 15:15:53 2025 GMT                                     
        Subject: CN=*example.com, O=Test, Inc., C=CN, ST=Sichuan, L=Chengdu          
        Subject Public Key Info:                                                     
            Public Key Algorithm: rsaEncryption                                      
                Public-Key: (2048 bit)                                               
                Modulus:                                                             
                    00:e2:48:5a:74:18:7d:80:e8:5c:4a:99:bd:f8:76:                    
                    97:a0:e7:48:d9:15:27:7f:40:6a:ca:da:16:00:b2:                    
                    ...
                    dd:10:41:ca:18:49:38:2f:22:cb:05:11:ae:b6:a8:                    
                    68:e9                                                            
                Exponent: 65537 (0x10001)                                            
        X509v3 extensions:                                                           
            X509v3 Subject Key Identifier:                                           
                5C:8C:46:0E:B8:6D:49:E5:EE:A8:6E:92:90:84:10:E9:C3:A2:E0:E7          
            X509v3 Authority Key Identifier:                                         
                CA:D1:4A:2A:47:A6:CF:9F:96:C3:26:C9:B6:52:AF:6C:7E:DA:56:E1          
    Signature Algorithm: sha256WithRSAEncryption                                     
    Signature Value:                                                                 
        05:dd:8b:60:a1:e5:80:82:fc:63:e0:20:a9:37:b4:62:b2:23:                       
        ...             
        dc:5f:db:81:c2:9e:23:35:32:0c:31:f1:c1:18:43:ac:ff:9c:                       
        56:93:32:40                                                                  

c. 验证身份信息

openssl verify -CAfile root_cert.pem self_cert.pem

验证成功,输出如下内容:

self_cert.pem: OK

如果在签发证书时,未提供扩展信息字段内容,将出现下面的错误:

CN=*root_cert.com, O=root_cert.Inc., C=CN, ST=Sichuan, L=Chengdu
error 18 at 0 depth lookup: self-signed certificate
error root_cert.pem: verification failed
CN=*example.com, O=Test, Inc., C=CN, ST=Sichuan, L=Chengdu
error 20 at 0 depth lookup: unable to get local issuer certificate
error self_cert.pem: verification failed

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA2024创建一个spingboot项目

以下是创建一个基本的 Spring Boot 项目的步骤和示例&#xff1a; 初始化一个springboot工程其实有许多方法&#xff0c;笔者这里挑了一个最快捷的方式搭建一个项目。我们直接通过官方平台&#xff08;start.spring.io&#xff09;进行配置&#xff0c;然后下载压缩包就可以获取…

商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)

一、 密码应用安全性评估方案 &#xff08;一&#xff09; 密码应用测评工作思路 1.1.1. 测评准备活动的主要任务 1.1.2. 测评准备活动的输出文档 1.2. 方案编制活动 1.2.1. 方案编制活动的主要任务 1.2.2. 方案编制活动的输出文档 1.3. 现场预评估活动 1.3.1. 现场测评…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

标定系列——关于cv::calibrateHandEye的介绍

关于cv::calibrateHandEye的介绍 介绍函数原型所在头文件原理说明 介绍 函数原型 void cv::calibrateHandEye ( InputArrayOfArrays R_gripper2base, InputArrayOfArrays t_gripper2base, InputArrayOfArrays R_target2cam, InputArrayOfArrays t_target2cam, OutputArra…

uname -m(machine) 命令用于显示当前系统的机器硬件架构(Unix Name)

文章目录 关于 arm64 架构检查是否安装了 Rosetta 2其他相关信息解释&#xff1a;命令功能&#xff1a;示例&#xff1a; dgqdgqdeMac-mini / % uname -m arm64您运行的 uname -m 命令显示您的系统架构是 arm64。这意味着您的 Mac Mini 使用的是 Apple 的 M1 或更新的芯片&…

代码随想录算法训练营day46|动态规划09

买卖股票的最佳时机四 之前是最多只能完成两笔交易&#xff0c;现在是至多可以买卖k次&#xff0c;那么状态数需要定为2*k1种&#xff0c;此时&#xff0c;就要分析多种情况的递推式 找到奇偶数交替的规则即可 class Solution { public:int maxProfit(int k, vector<int&g…

qt QDateTime详解

1. 概述 QDateTime 是 Qt 框架中用于处理日期和时间的类。它将 QDate 和 QTime 组合在一起&#xff0c;提供了日期时间的统一处理方案。QDateTime 可以精确到毫秒&#xff0c;并支持时区处理。 2. 重要方法 构造函数: QDateTime() 构造无效的日期时间 QDateTime(const QDa…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时&#xff0c;突然发现它的一个接口&#xff0c;被另一个服务ip频繁的请求。 按理说&#xff0c;之前设置的是&#xff0c;每隔1分钟请求一次接口。但从日志来看&#xff0c;则是1秒钟请求一次&#xff…

imx-6ULL uboot 移植

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录 环境搭建交叉编…

Zookeeper选举算法与提案处理概览

共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法&#xff0c;提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为&#xff1a; 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为&#xff0c;如进程崩溃&#xff0c;只要…

零地址挂页

零地址 如果我们有比较好的C编程基础&#xff0c;我们就会知道&#xff0c;我们在代码中定义了一个零地址或者空指针&#xff0c;那么它实际上会指向虚拟内存的零地址&#xff0c;多数操作系统&#xff0c;包括Win&#xff0c;在进程创建的时候&#xff0c;都会空出前64k的空间…

leetcode:222完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最…

【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子

目录 1 先说结论 2 联合概率 3 边缘概率 4 (行/列)边缘概率的和 总概率1 5 条件概率 5.1 条件概率的除法公式 5.2 条件概率和联合概率区别 1 先说结论 关于独立概率&#xff0c;联合概率&#xff0c;交叉概率&#xff0c;交叉概率和&#xff0c;总概率 类型含义 …

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…

《安富莱嵌入式周报》第346期:开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波,开源固件安全分析器, 开源口袋电源,开源健康测量,FreeCAD

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频&#xff1a; https://www.bilibili.com/video/BV1TYBhYKECK/ 《安富莱嵌入式周报》第346期&#xff1a;开源2GHz带…

《白帽子讲Web安全》13-14章

《白帽子讲Web安全》13-14章 《白帽子讲Web安全》13-14章13、应用层拒绝服务攻击13.1、DDOS简介13.2、应用层DDOS13.2.1、CC攻击13.2.2、限制请求频率13.2.3、道高一尺&#xff0c;魔高一丈 13.3、验证码的那些事儿13.4、防御应用层DDOS13.5、资源耗尽攻击13.5.1、Slowloris攻击…

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…

相亲交友小程序项目介绍

一、项目背景 在当今快节奏的社会生活中&#xff0c;人们忙于工作和事业&#xff0c;社交圈子相对狭窄&#xff0c;寻找合适的恋爱对象变得愈发困难。相亲交友作为一种传统而有效的社交方式&#xff0c;在现代社会依然有着巨大的需求。我们的相亲交友项目旨在为广大单身人士提…

Python中的简单爬虫

文章目录 一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务器和浏览器的通讯流程3. 浏览器访问Web服务器的通讯流程4. 加载图片资源代码 二. 基于Web请求的FastAPI通用配置1. 目前Web服务器存在问题2. 基于Web请求的FastAPI通用配置 三. Python爬虫介绍1. 什…

uni-app运行 安卓模拟器 MuMu模拟器

最近公司开发移动端系统&#xff0c;使用真机时每次调试的时候换来换去的麻烦&#xff0c;所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器&#xff0c;如果系统…