openssl 基本命令使用方法

news2024/11/27 11:20:57

查看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

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

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

相关文章

快速理解微服务中Gateway的概念

一.基本概念 定义&#xff1a; 在微服务架构中&#xff0c;Spring Cloud Gateway 是一个用于API网关的框架&#xff0c;它是一个基于 Spring Framework 的高效、可扩展的路由器和反向代理&#xff0c;它能够将外部请求转发到适当的微服务&#xff0c;并提供一些与请求处理相关…

Java【多线程】(1)进程与线程

目录 1.前言 2.正文 2.1什么是进程 2.2PCB&#xff08;进程控制块&#xff09; 2.2.1进程id 2.2.2内存指针 2.2.3文件描述符表 2.2.4进程状态 2.2.4.1就绪状态 2.2.4.2阻塞状态 2.2.5进程优先级 2.2.6进程上下文 2.2.7进程的记账信息 2.3CPU操作进程的方法 2.4什…

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核&#xff0c;鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征&#xff0c;性能超越Linux内核10.7%。 鸿蒙内核更弹性&#xff1a;元OS架构&#xff0c;性能安全双收益 万…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

构造函数的相关

文章目录 一、构造函数 今天我们要来讲解类的默认成员函数之一的构造函数。 一、构造函数 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时&…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…

计算机网络八股整理(一)

计算机网络八股文整理 一&#xff1a;网络模型 1&#xff1a;网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型&#xff0c;它由七层组成&#xff0c;从上到下分别是&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;…

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容&#xff0c;对应操作是&#xff1a; QString curorui->textEdit->toPlainText();然后显示到标签上&#xff0c;对应操作是&#xff1a; …

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…

AI智能体崛起:从“工具”到“助手”的进化之路

目录 AI智能体的崛起 AI智能体的定义与决策模型 AI智能体的特点与优势 AI智能体的应用与类型 面临的挑战 未来展望 近年来&#xff0c;人工智能领域的焦点正从传统的聊天机器人&#xff08;Chat Bot&#xff09;快速转向更具潜力的AI智能体&#xff08;AI Agent&#xff…

【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写

&#x1f30e; 应用层自定义协议与序列化 文章目录&#xff1a; Tcp协议Socket编程 应用层简介 序列化和反序列化       重新理解read/write/recv/send及tcp的全双工       Socket封装       服务器端改写 &#x1f680;应用层简介 我们程序员写的一个个解决…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子&#xff0c;这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画&#xff0c;来营造一种氛围感&#xff0c;比如下…

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨…

【pyspark学习从入门到精通19】机器学习库_2

目录 估计器 分类 回归 聚类 管道 估计器 估计器可以被看作是需要估算的统计模型&#xff0c;以便对您的观测值进行预测或分类。 如果从抽象的 Estimator 类派生&#xff0c;新模型必须实现 .fit(...) 方法&#xff0c;该方法根据在 DataFrame 中找到的数据以及一些默认或…

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型&#xff08;SEM&#xff09;介绍 第三章 R语言SEM分析入门&#xff1a;lavaan VS piecewiseSEM 第四章 SEM全局估计&#xff08;lavaan&#xff09;在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…

JQuery -- 第九课

文章目录 前言一、JQuery是什么&#xff1f;二、JQuery的使用步骤1.引入2.书写位置3. 表示方法 三、JQuery选择器1.层级选择器2. 筛选选择器3. 排他思想4. 精品展示 四、jQuery样式操作1. 修改样式2.类操作1. 添加2. 移除3. 切换 五、jQuery动画1. 显示和隐藏2. 滑动1. slide2.…

无人机探测:光电侦测核心技术算法详解!

核心技术 双光谱探测跟踪&#xff1a; 可见光成像技术&#xff1a;利用无人机表面反射的自然光或主动光源照射下的反射光&#xff0c;通过高灵敏度相机捕捉图像。该技术适用于日间晴朗天气下的无人机探测&#xff0c;具有直观、易于识别目标的特点。 红外成像技术&#xff1…

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时&#xff0c;由于入参时regex &#xff0c;而入参刚好是正则表达式的字符该怎么办&#xff1f;我…

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…