(11) openssl req(生成请求证书、私钥和自建CA)

news/2024/4/21 1:25:01/

伪命令req大致有3个功能:生成证书请求文件、验证证书请求文件和创建根CA。

由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明。若已熟悉openssl req和证书请求相关知识,可直接跳至后文,若不熟悉,建议从前向后一步一步阅读。

首先说明下生成证书请求需要什么:申请者需要将自己的信息及其公钥放入证书请求中。但在实际操作过程中,所需要提供的是私钥而非公钥,因为它会自动从私钥中提取公钥。另外,还需要将提供的数据进行数字签名(使用单向加密),保证该证书请求文件的完整性和一致性,防止他人盗取后进行篡改,例如黑客将为www.baidu.com所申请的证书请求文件中的公司名改成对方的公司名称,如果能够篡改成功,则签署该证书请求时,所颁发的证书信息中将变成他人信息。

所以第一步就是先创建出私钥pri_key.pem。其实私钥文件是非必需的,因为openssl req在需要它的时候会自动创建在特定的路径下,此处为了举例说明,所以创建它。

[root@localhost tmp]# openssl genrsa -out pri_key.pem

(1).根据私钥pri_key.pem生成一个新的证书请求文件。其中"-new"表示新生成一个新的证书请求文件,"-key"指定私钥文件,"-out"指定输出文件,此处输出文件即为证书请求文件

[root@localhost tmp]# openssl req -new   -key pri_key.pem   -out req1.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) [XX]:CN
State or Province Name (full name) []:FJ
Locality Name (eg, city) [Default City]:XM
Organization Name (eg, company) [Default Company Ltd]:.
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:www.youwant.com
Email Address []:Please enter the following 'extra' attributes    # 下面两项几乎不用考虑,留空即可
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

 在敲下回车键后,默认会进入交互模式让你提供你个人的信息,需要注意的是,如果某些信息不想填可以选择使用默认值,也可以选择留空不填,直接回车将选择使用默认值,输入点"."将表示该信息项留空

某些项是必填项,否则未来证书签署时将失败。如"Common Name",它表示的是为哪个域名、子域名或哪个主机申请证书,未来证书请求被签署后将只能应用于"Common Name"所指定的地址。具体哪些必填项还需要看所使用的配置文件(默认的配置文件为/etc/pki/tls/openssl.cnf)中的定义,此处暂且不讨论配置相关内容,仅提供Common Name即可。

除了"-new"选项,使用"-newkey"选项也能创建证书请求文件,此处暂不举例说明"-newkey"的用法,后文会有示例

 

(2).查看证书请求文件内容。

现在已经生成了一个新的证书请求文件req1.csr。查看下该证书请求文件的内容。

[root@localhost tmp]# cat req1.csr
-----BEGIN CERTIFICATE REQUEST-----             # 证书请求的内容
MIIBgDCB6gIBADBBMQswCQYDVQQGEwJDTjELMAkGA1UECAwCRkoxCzAJBgNVBAcM
AlhNMRgwFgYDVQQDDA93d3cueW91d2FudC5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBAMbx9bfsC0GTn7DijfGFs56Fb8atX9ABRDE/wmE74jXjdfbH4ZOg
Te0Orlu5pA4jqXDgSLzlQvjD6QsyhToyvtyQbgGSfXSVOPcgfAohDNo9t6+mnvs/
5rFQJ1+uI6gsLMbwQBJidLGnM1pOvFo2671Vm2jewDLVweGP5wmIfDyLAgMBAAGg
ADANBgkqhkiG9w0BAQUFAAOBgQAqKYjNKKpNCvwDNeDeYynOx1XD/OYgAU43Sq03
aRUcKenqICkvkXkUE+H0lYMtXcDL/rgDyjlKvwartgZ/ngoKSwtXhd4UivII2hNN
jolE3gfe8KGjMpnX/8oxkJIoSTETqee+11ez8E2fya1DwoQnKpXjTt5qya8VWflt
DG8WmA==
-----END CERTIFICATE REQUEST-----

更具体的可以使用openssl req命令查看。命令如下,其中"-in"选项指定的是证书请求文件

[root@localhost tmp]# openssl req   -in req1.csr
-----BEGIN CERTIFICATE REQUEST-----             # 证书请求的内容
MIIBgDCB6gIBADBBMQswCQYDVQQGEwJDTjELMAkGA1UECAwCRkoxCzAJBgNVBAcM
AlhNMRgwFgYDVQQDDA93d3cueW91d2FudC5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBAMbx9bfsC0GTn7DijfGFs56Fb8atX9ABRDE/wmE74jXjdfbH4ZOg
Te0Orlu5pA4jqXDgSLzlQvjD6QsyhToyvtyQbgGSfXSVOPcgfAohDNo9t6+mnvs/
5rFQJ1+uI6gsLMbwQBJidLGnM1pOvFo2671Vm2jewDLVweGP5wmIfDyLAgMBAAGg
ADANBgkqhkiG9w0BAQUFAAOBgQAqKYjNKKpNCvwDNeDeYynOx1XD/OYgAU43Sq03
aRUcKenqICkvkXkUE+H0lYMtXcDL/rgDyjlKvwartgZ/ngoKSwtXhd4UivII2hNN
jolE3gfe8KGjMpnX/8oxkJIoSTETqee+11ez8E2fya1DwoQnKpXjTt5qya8VWflt
DG8WmA==
-----END CERTIFICATE REQUEST-----

查看请求文件时,可以结合其他几个选项输出特定的内容。"-text"选项表示以文本格式输出证书请求文件的内容。

[root@localhost tmp]# openssl req   -in req1.csr   -text
Certificate Request:                                            # 此为证书请求文件头Data:Version: 0 (0x0)Subject: C=CN, ST=FJ, L=XM, CN=www.youwant.com          # 此为提供的个人信息,注意左侧标头为"Subject",这是很重要的一项Subject Public Key Info:Public Key Algorithm: rsaEncryption                 # 使用的公钥算法Public-Key: (1024 bit)                          # 公钥的长度Modulus:00:c6:f1:f5:b7:ec:0b:41:93:9f:b0:e2:8d:f1:85:b3:9e:85:6f:c6:ad:5f:d0:01:44:31:3f:c2:61:3b:e2:35:e3:75:f6:c7:e1:93:a0:4d:ed:0e:ae:5b:b9:a4:0e:23:a9:70:e0:48:bc:e5:42:f8:c3:e9:0b:32:85:3a:32:be:dc:90:6e:01:92:7d:74:95:38:f7:20:7c:0a:21:0c:da:3d:b7:af:a6:9e:fb:3f:e6:b1:50:27:5f:ae:23:a8:2c:2c:c6:f0:40:12:62:74:b1:a7:33:5a:4e:bc:5a:36:eb:bd:55:9b:68:de:c0:32:d5:c1:e1:8f:e7:09:88:7c:3c:8bExponent: 65537 (0x10001)Attributes:a0:00Signature Algorithm: sha1WithRSAEncryption                  # 为请求文件数字签名时使用的算法2a:29:88:cd:28:aa:4d:0a:fc:03:35:e0:de:63:29:ce:c7:55:c3:fc:e6:20:01:4e:37:4a:ad:37:69:15:1c:29:e9:ea:20:29:2f:91:79:14:13:e1:f4:95:83:2d:5d:c0:cb:fe:b8:03:ca:39:4a:bf:06:ab:b6:06:7f:9e:0a:0a:4b:0b:57:85:de:14:8a:f2:08:da:13:4d:8e:89:44:de:07:de:f0:a1:a3:32:99:d7:ff:ca:31:90:92:28:49:31:13:a9:e7:be:d7:57:b3:f0:4d:9f:c9:ad:43:c2:84:27:2a:95:e3:4e:de:6a:c9:af:15:59:f9:6d:0c:6f:16:98
-----BEGIN CERTIFICATE REQUEST-----                    
MIIBgDCB6gIBADBBMQswCQYDVQQGEwJDTjELMAkGA1UECAwCRkoxCzAJBgNVBAcM
AlhNMRgwFgYDVQQDDA93d3cueW91d2FudC5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBAMbx9bfsC0GTn7DijfGFs56Fb8atX9ABRDE/wmE74jXjdfbH4ZOg
Te0Orlu5pA4jqXDgSLzlQvjD6QsyhToyvtyQbgGSfXSVOPcgfAohDNo9t6+mnvs/
5rFQJ1+uI6gsLMbwQBJidLGnM1pOvFo2671Vm2jewDLVweGP5wmIfDyLAgMBAAGg
ADANBgkqhkiG9w0BAQUFAAOBgQAqKYjNKKpNCvwDNeDeYynOx1XD/OYgAU43Sq03
aRUcKenqICkvkXkUE+H0lYMtXcDL/rgDyjlKvwartgZ/ngoKSwtXhd4UivII2hNN
jolE3gfe8KGjMpnX/8oxkJIoSTETqee+11ez8E2fya1DwoQnKpXjTt5qya8VWflt
DG8WmA==
-----END CERTIFICATE REQUEST-----

将"-text"和"-noout"结合使用,则只输出证书请求的文件头部分。

[root@localhost tmp]# openssl req   -in req1.csr   -noout -text
Certificate Request:Data:Version: 0 (0x0)Subject: C=CN, ST=FJ, L=XM, CN=www.youwant.comSubject Public Key Info:Public Key Algorithm: rsaEncryptionPublic-Key: (1024 bit)Modulus:00:c6:f1:f5:b7:ec:0b:41:93:9f:b0:e2:8d:f1:85:b3:9e:85:6f:c6:ad:5f:d0:01:44:31:3f:c2:61:3b:e2:35:e3:75:f6:c7:e1:93:a0:4d:ed:0e:ae:5b:b9:a4:0e:23:a9:70:e0:48:bc:e5:42:f8:c3:e9:0b:32:85:3a:32:be:dc:90:6e:01:92:7d:74:95:38:f7:20:7c:0a:21:0c:da:3d:b7:af:a6:9e:fb:3f:e6:b1:50:27:5f:ae:23:a8:2c:2c:c6:f0:40:12:62:74:b1:a7:33:5a:4e:bc:5a:36:eb:bd:55:9b:68:de:c0:32:d5:c1:e1:8f:e7:09:88:7c:3c:8bExponent: 65537 (0x10001)Attributes:a0:00Signature Algorithm: sha1WithRSAEncryption          # 为请求文件数字签名时使用的算法2a:29:88:cd:28:aa:4d:0a:fc:03:35:e0:de:63:29:ce:c7:55:c3:fc:e6:20:01:4e:37:4a:ad:37:69:15:1c:29:e9:ea:20:29:2f:91:79:14:13:e1:f4:95:83:2d:5d:c0:cb:fe:b8:03:ca:39:4a:bf:06:ab:b6:06:7f:9e:0a:0a:4b:0b:57:85:de:14:8a:f2:08:da:13:4d:8e:89:44:de:07:de:f0:a1:a3:32:99:d7:ff:ca:31:90:92:28:49:31:13:a9:e7:be:d7:57:b3:f0:4d:9f:c9:ad:43:c2:84:27:2a:95:e3:4e:de:6a:c9:af:15:59:f9:6d:0c:6f:16:98

还可以只输出subject部分的内容。

[root@localhost tmp]# openssl req -in req2.csr   -subject -noout
subject=/C=CN/ST=FJ/L=XM/CN=www.youwant.com

也可以使用"-pubkey"输出证书请求文件中的公钥内容。如果从申请证书请求时所提供的私钥中提取出公钥,这两段公钥的内容是完全一致的。

[root@localhost tmp]# openssl req   -in req1.csr   -pubkey -noout        #输出请求证书中的公钥内容
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG8fW37AtBk5+w4o3xhbOehW/G
rV/QAUQxP8JhO+I143X2x+GToE3tDq5buaQOI6lw4Ei85UL4w+kLMoU6Mr7ckG4B
kn10lTj3IHwKIQzaPbevpp77P+axUCdfriOoLCzG8EASYnSxpzNaTrxaNuu9VZto
3sAy1cHhj+cJiHw8iwIDAQAB
-----END PUBLIC KEY-----
[root@localhost tmp]# openssl rsa -in pri_key.pem   -pubout               #从请求证书中提取公钥
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG8fW37AtBk5+w4o3xhbOehW/G
rV/QAUQxP8JhO+I143X2x+GToE3tDq5buaQOI6lw4Ei85UL4w+kLMoU6Mr7ckG4B
kn10lTj3IHwKIQzaPbevpp77P+axUCdfriOoLCzG8EASYnSxpzNaTrxaNuu9VZto
3sAy1cHhj+cJiHw8iwIDAQAB
-----END PUBLIC KEY-----

(3).指定证书请求文件中的签名算法。

注意到证书请求文件的头部分有一项是"Signature Algorithm",它表示使用的是哪种数字签名算法。默认使用的是sha1,还支持md5、sha512等,更多可支持的签名算法见"openssl dgst --help"中所列出内容。例如此处指定md5算法。

[root@localhost tmp]# openssl req -new   -key pri_key.pem   -out req2.csr    -md5[root@localhost tmp]# openssl req -in req2.csr   -noout -text | grep AlgoPublic Key Algorithm: rsaEncryption
    Signature Algorithm: md5WithRSAEncryption

(4).验证请求文件的数字签名,这样可以验证出证书请求文件是否被篡改过。下面的命令中"-verify"选项表示验证证书请求文件的数字签名。

[root@localhost tmp]# openssl req -verify -in req2.csr
verify OK
-----BEGIN CERTIFICATE REQUEST-----
MIIBgDCB6gIBADBBMQswCQYDVQQGEwJDTjELMAkGA1UECAwCRkoxCzAJBgNVBAcM
AlhNMRgwFgYDVQQDDA93d3cueW91d2FudC5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBAMbx9bfsC0GTn7DijfGFs56Fb8atX9ABRDE/wmE74jXjdfbH4ZOg
Te0Orlu5pA4jqXDgSLzlQvjD6QsyhToyvtyQbgGSfXSVOPcgfAohDNo9t6+mnvs/
5rFQJ1+uI6gsLMbwQBJidLGnM1pOvFo2671Vm2jewDLVweGP5wmIfDyLAgMBAAGg
ADANBgkqhkiG9w0BAQQFAAOBgQCcvWuwmeAowbqLEsSpBVGnRfDEeH897v1r/SaX
9yYhpc3Kp5HKQ3LpSZBYGxlIsE6I3DMT5d1wcPeKRi8B6BIfemYOEbhLVGLmhNAg
iHyV/s1/TaOc31QZMY1HvD5BTOlhed+MpevWAFX2CRXuhKYBOimCrGNJxrFj4srJ
M1zDOA==
-----END CERTIFICATE REQUEST-----

结果中第一行的"verify OK"表示证书请求文件是完整未被篡改过的,但同时输出了证书请求的内容。如果不想输出这部分内容,使用"-noout"选项即可。

[root@localhost tmp]# openssl req -verify -in req2.csr -noout
verify OK

(5).自签署证书,可用于自建根CA时。

使用openssl req自签署证书时,需要使用"-x509"选项,由于是签署证书请求文件,所以可以指定"-days"指定所颁发的证书有效期

[root@localhost tmp]# openssl req   -x509   -key pri_key.pem   -in req1.csr   -out CA1.crt    -days 365

由于openssl req命令的主要功能是创建和管理证书请求文件,所以没有提供对证书文件的管理能力,暂时也就只能通过cat来查看证书文件CA1.crt了。

[root@localhost tmp]# cat CA1.crt
-----BEGIN CERTIFICATE-----
MIICUDCCAbmgAwIBAgIJAIrxQ+zicLzIMA0GCSqGSIb3DQEBBQUAMEExCzAJBgNV
BAYTAkNOMQswCQYDVQQIDAJGSjELMAkGA1UEBwwCWE0xGDAWBgNVBAMMD3d3dy55
b3V3YW50LmNvbTAeFw0xNzA2MjcwNzU0NTJaFw0xODA2MjcwNzU0NTJaMEExCzAJ
BgNVBAYTAkNOMQswCQYDVQQIDAJGSjELMAkGA1UEBwwCWE0xGDAWBgNVBAMMD3d3
dy55b3V3YW50LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxvH1t+wL
QZOfsOKN8YWznoVvxq1f0AFEMT/CYTviNeN19sfhk6BN7Q6uW7mkDiOpcOBIvOVC
+MPpCzKFOjK+3JBuAZJ9dJU49yB8CiEM2j23r6ae+z/msVAnX64jqCwsxvBAEmJ0
saczWk68WjbrvVWbaN7AMtXB4Y/nCYh8PIsCAwEAAaNQME4wHQYDVR0OBBYEFMLa
Dm9yZeRh3Bu+zmpU2iKbQBQgMB8GA1UdIwQYMBaAFMLaDm9yZeRh3Bu+zmpU2iKb
QBQgMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAd2CJPe987RO34ySA
7EC0zQkhDz9d2vvvPWYjq0XA/frntlKKhgFwypWPBwwFTBwfvLHMnNpKy0zXXAkB
1ttgzMgka/qv/gcKoLN3dwM7Hz+eCl/cXVJmVG7PqAjfqSr6IyM7v/B6dC0Xv49m
h5mv24HqKtJoEeI0iARaNmOxKeE=
-----END CERTIFICATE-----

实际上,"-x509"选项和"-new"或"-newkey"配合使用时,可以不指定证书请求文件,它在自签署过程中将在内存中自动创建证书请求文件,当然,既然要创建证书请求文件,就需要人为输入申请者的信息了。例如:

[root@localhost tmp]# openssl req   -new   -x509   -key pri_key.pem   -out CA1.crt   -days 365

其实,使用"-x509"选项后,"-new"或"-newkey"将表示创建一个证书文件而不是一个证书请求文件。

(6).让openssl req自动创建所需的私钥文件。

在前面的所有例子中,在需要私钥的时候都明确使用了"-key"选项提供私钥。其实如果不提供,openssl req会在任何需要私钥的地方自动创建私钥,并保存在特定的位置,默认的保存位置为当前目录,文件名为privkey.pem,具体保存的位置和文件名由配置文件(默认为/etc/pki/tls/openssl.cnf)决定,此处不讨论该文件。当然,openssl req命令的"-keyout"选项可以指定私钥保存位置。

例如:

[root@localhost tmp]# openssl req -new -out req3.csr
Generating a 2048 bit RSA private key          # 自动创建私钥
..................+++
.....................................+++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:                         # 要求输入加密私钥文件的密码,且要求长度为4-1024个字符
Verifying - Enter PEM pass phrase:
-----
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) [XX]:^C

但是,openssl req在自动创建私钥时,将总是加密该私钥文件,并提示输入加密的密码。可以使用"-nodes"选项禁止加密私钥文件

[root@localhost tmp]# openssl req   -new   -out req3.csr   -nodes
Generating a 2048 bit RSA private key
.............+++
.............................................................................+++
writing new private key to 'privkey.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) [XX]:^C

指定自动创建私钥时,私钥文件的保存位置和文件名。使用"-keyout"选项。

[root@localhost tmp]# openssl req  -new   -out req3.csr   -nodes   -keyout myprivkey.pem
Generating a 2048 bit RSA private key
......................+++
............................................................+++
writing new private key to 'myprivkey.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) [XX]:^C

(7).使用"-newkey"选项。

"-newkey"选项和"-new"选项类似,只不过"-newkey"选项可以直接指定私钥的算法和长度,所以它主要用在openssl req自动创建私钥时

它的使用格式为"-newkey arg",其中arg的格式为"rsa:numbits",rsa表示创建rsa私钥,numbits表示私钥的长度,如果不给定长度(即"-newkey rsa")则默认从配置文件中读取长度值。其实不止支持rsa私钥,只不过现在基本都是用rsa私钥,所以默认就使用rsa。

[root@localhost tmp]# openssl req   -newkey rsa:2048   -out req3.csr    -nodes    -keyout myprivkey.pem
Generating a 2048 bit RSA private key
....+++
.......................................................+++
writing new private key to 'myprivkey.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) [XX]:^C

 

通过上面一系类的举例说明后,想必openssl req的各基本选项的用法都通了。从上面的示例中也发现了,openssl req经常会依赖于配置文件(默认为/etc/pki/tls/openssl.cnf)中的值。所以,先将openssl req的命令用法总结下,再简单说明下配置文件中和req有关的内容。

openssl req [-new] [-newkey rsa:bits] [-verify] [-x509] [-in filename] [-out filename] [-key filename] [-passin arg] [-passout arg] 
[-keyout filename] [-pubkey] [-nodes] [-[dgst]] [-config filename] [-subj arg] [-days n] [-set_serial n] [-extensions section]
[-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-text] [-noout] [-batch] [-verbose]选项说明: -new :创建一个证书请求文件,会交互式提醒输入一些信息,这些交互选项以及交互选项信息的长度值以及其他一些扩展属性在配置文件(默认为:openssl.cnf,还有些辅助配置文件)中指定了默认值。
           :如果没有指定"-key"选项,则会自动生成一个RSA私钥,该私钥的生成位置在openssl.cnf中指定了或使用-keyout选项指定。
如果指定了-x509选项,则表示创建的是自签署证书文件,而非证书请求文件 -newkey args :类似于"-new"选项,创建一个新的证书请求,并创建私钥。args的格式是"rsa:bits"(其他加密算法请查看man),其中bits:是rsa密钥的长度,如果bits省略了(即-newkey rsa),则长度根据配置文件中default_bits指令的值作为默认长度,默认该值为2048:如果指定了-x509选项,则表示创建的是自签署证书文件,而非证书请求文件 -nodes :默认情况下,openssl req自动创建私钥时都要求加密并提示输入加密密码,指定该选项后则禁止对私钥文件加密 -key filename :指定私钥的输入文件创建证书请求时需要 -keyout filename :指定自动创建私钥时私钥的存放位置,若未指定该选项,则使用配置文件中default_keyfile指定的值,默认该值为privkey.pem
-[dgst] :指定对创建请求证书时提供的申请者信息进行数字签名时的单向加密算法,如-md5/-sha1/-sha512等(即对请求证书进行数字签名使用的算法),:若未指定则默认使用配置文件中default_md指定的值
-verify :对请求证书文件的数字签名进行验证
-x509 :指定该选项时,将生成一个自签署证书,而不是创建证书请求。一般用于测试或者为根CA创建自签名证书 -days n :指定自签名证书的有效期限,默认30天,需要和"-x509"一起使用。:注意是自签名证书期限,而非请求的证书期限,因为证书的有效期是颁发者指定的,证书请求者指定有效期是没有意义的,:配置文件中的default_days指定了请求证书的有效期限,默认365天 -set_serial n :指定生成自签名证书时的证书序列号,该序列号将写入配置文件中serial指定的文件中,这样就不需要手动更新该序列号文件:支持数值和16进制值(0x开头),虽然也支持负数,但不建议 -in filename :签发证书时,指定证书请求文件filename。注意,创建证书请求文件时是不需要指定该选项的,签发证书时需要 -out filename :生成证书请求或自签署证书的输出文件,也可以是其他内容的输出文件,不指定时默认stdout -subj args :替换或自定义证书请求时需要输入的信息,并输出修改后的请求信息。args的格式为"/type0=value0/type1=value1...",:如果value为空,则表示使用配置文件中指定的默认值,如果value值为".",则表示该项留空。其中可识别type(man req)有::C是Country(国家缩写)、ST是state(省会全拼)、L是localcity(城市全拼)、O是Organization(公司名称)、OU是Organization Unit(部门名称)、CN是common name等【输出内容选项:】 -text :以文本格式打印证书请求 -noout :不输出部分信息 -subject :输出证书请求文件中的subject(如果指定了x509,则打印证书中的subject) -pubkey :输出证书请求文件中的公钥【配置文件项和杂项:】 -passin arg :传递解密密码 -passout arg :指定加密输出文件时的密码 -config filename :指定req的配置文件,指定后将忽略所有的其他配置文件。如果不指定则默认使用/etc/pki/tls/openssl.cnf中req段落的值 -batch :非交互模式,直接从配置文件(默认/etc/pki/tls/openssl.cnf)中读取证书请求所需字段信息。但若不指定"-key"时,仍会询问key -verbose :显示操作执行的详细信息

以下则是配置文件中(默认/etc/pki/tls/openssl.cnf)关于req段落的配置格式。

input_password :密码输入文件,和命令行的"-passin"选项对应
output_password:密码的输出文件,与命令行的"-passout"选项对应
default_bits   :openssl req自动生成RSA私钥时的长度,不写时默认是512,命令行的"-new"和"-newkey"可能会用到它 
default_keyfile:默认的私钥输出文件,与命令行的"-keyout"选项对应 
encrypt_key    :当设置为no时,自动创建私钥时不会加密该私钥。设置为no时与命令行的"-nodes"等价。还有等价的兼容性写法:encry_rsa_key 
default_md     :指定创建证书请求时对申请者信息进行数字签名的单向加密算法,与命令行的"-[dgst]"对应 
prompt         :当指定为no时,则不提示输入证书请求的字段信息,而是直接从openssl.cnf中读取 :请小心设置该选项,很可能请求文件创建失败就是因为该选项设置为no 
distinguished_name:(DN)是一个扩展属性段落,用于指定证书请求时可被识别的字段名称

以下是默认的配置文件格式及值。关于配置文件的详细分析见"配置文件"部分。

[ req ]
default_bits            = 2048          #openssl rsa自动生成RSA密钥时的长度,默认为512
default_md              = sha1          #创建请求证书时,对申请者信息进行数字签名的单向加密算法,与-dgst选项对应
default_keyfile         = privkey.pem      #默认私钥输出文件,与-keyout对应
distinguished_name      = req_distinguished_name  #指定证书请求时可被识别的字段名称
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
string_mask = utf8only
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = XX
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
localityName                    = Locality Name (eg, city)
localityName_default    = Default City
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Default Company Ltd
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server\'s hostname)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_max                = 64

 

转载于:https://www.cnblogs.com/wyzhou/p/9739527.html


http://www.ppmy.cn/news/486507.html

相关文章

邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利

邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利 http://zouhengfu.blog.sohu.com/50608460.html 邹恒甫(这仅仅是冰山一角啊) 中国人民特别是中国的穷苦人民, 我要向你们坦白地交待我们北京大学光华管理学院和清华大学经济管理学院特聘教授和许多其他海龟/鬼教授的工资…

C#开发的OpenRA游戏之建造物品的窗口5

C#开发的OpenRA游戏之建造物品的窗口5 前面分析了TAB窗口的建立和运行,现在关注它的子窗口,也就是ProductionPaletteWidget类实现的窗口,这个窗口主要用来显示所有可以创建物品的ICON图标。用户可以通过这个窗口实现物品创建,如下图所示: 比如要创建电厂,就是点击上面…

“形象代言人”与“抽风式管理”

本文来自CSDN博客:http://blog.csdn.net/sunljm1000/archive/2011/04/07/6306962.aspx “形象代言人”与“抽风式管理”两者似乎没有什么联系,和程序员似乎更没什么关系。但软件行业内,这两样东西都是存在的。 先说“形象代言人”&#xff1a…

转载非原创 -- Windows编程革命简史

首先,是 Windows API 和 DLL Hell。 (译注:DLL Hell——DLL灾难,就是微软的DLL升级时因为不同版本可能造成应用程序无法运行的灾难,首当其冲的是COM编程,相信大家都知道某些木马或是病毒 更改了一些系统的D…

Python2.7学习笔记 Day2

Python2.7学习笔记 Day2 字符串String和文本 代码示例与注释: #-*- coding: UTF-8 -*- x "There are %d types of people." % 10 #这里%d指代整数10 binary "binary" #定义一个变量,是字符串 do_not "dont" #定义一…

编码一时爽,重写火葬场?这些公司都重写了软件,结局却不同

作者 | Herb Caudill 译者 | 无名 生存,还是死亡,这是一个问题。重写,还是不重写,这是导致生存或死亡的另一个问题。 这是一个很老套的问题:你应该重写应用程序吗?又或者这是“任何一家软件公司都会犯的一…

程序员必读经典书籍推荐

http://just-study.blogbus.com/logs/138489584.html 读书就得读经典。读计算机书就得读牛人写的书!以下几本书是我觉得非常相当十分特别不错的,还是值得一读的。 程序员修炼之道 Andrew Hunt的代表作,也是我最喜欢的一本书,没有…

php连接mysql插入数据

PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据。 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 在 SQL 查询语句中的字符串值必须加引号 数值的值不需要引号 NULL 值不需要引号 INS…

ArangoDB——AQL操作

插入文档 INSERT 关键字想要插入一些属性,花括号 { } 表示文档或对象。INTO 是每个操作的必需 INSERT 的部分 ,后面是我们要在其中存储文档的集合名称。RETURN NEW 返回新创建的文档. INSERT document INTO collectionName 属性值的类型 null boolean ( …

java jol原理_Java对象布局(JOL)实现过程解析

java对象布局JOL(java object layout),描述对象在堆内存的布局。如下图: 1.markword 固定长度8byte,描述对象的identityhashcode,分代年龄,锁信息等(https://www.jb51.net/article/183984.htm); 2.klasspoint 固定长度…

jole 说软件(二)

二 深 入 底 层 2001年12月11日,星期二 我在自己的Web站点上花了许多时间聊关于令人激动的“巨幅图画”素材方面的内容,比如说.NET与Java啦,XML策略啦,锁定啦,竞争策略啦,软件设计啦,体系结构啦…

《JOEL说软件》-- Jole Spolsky

这是目录:(转载自:http://www.cnblogs.com/bengxia/archive/2006/04/10/371387.html) 第一部分 位与字节:编程实践点滴 一、语言的选择   确实,简单的合适的才是正确的。 二、深入底层   很多程序员总…

《Jole On Software》--Jole Spolsky

《JOEL说软件》-- Jole Spolsky. 太久了,没有一本书让我停下两天的工作去读完她,以至于我得告诫自己:停,今天到此结束,再看就消化不良了。  没错,就是这么棒,获得15届JOLT大奖当之无愧。虽然早…

JOle 建议

“给计算机系学生的建议”里Joel提出了8条建议: (1) 毕业前练好写作。 (2) 毕业前学好C语言。 (3) 毕业前学好微观经济学。 (4) 不要因为枯燥就不选修非计算机专业的课程。 (5) 选修有大量编程实践的课程。 (6) 别担心所有工作都被印度人抢走。 (7) 找一份好的暑期实…

计算机组成原理-复习大纲(期末版)

目录 第一章 计算机系统概论 1.1 冯诺依曼型计算机 1.2 计算机的硬件组成 第二章 运算方法和运算器 2.1 ieee754标准、32位浮点数 2.2 补码运算 2.3 运算器的基本结构形式 第三章 存储系统 3.1 主存与cache的地址映射 3.1.1 全相联映射方式 3.1.2 直接映射方式 3.1.3 组相…

git使用的shell脚本集合:一键切换分支,一键创建备份分支

背景: 项目较多,需要手动操作较麻烦,故新增脚本操作 1.一键切换分支.sh #!/bin/bash #使用方法:打开git bash, 命令行切换进入项目文件夹, sh 当前脚本; echo "<<<<<<<<该脚本作用:一键将所有项目的分支切换到指定分支>>>>>&g…

差分信号隔离放大变送模块光电转换器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA

概述&#xff1a; DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源&#xff0c;向输…

【ArcGIS Pro二次开发】(41):勘测定界txt文件转数据库(批量)

在规划工作中有时候会收到一种带坐标点的txt文件&#xff1a; 上网查了一下资料&#xff0c;这是根据《勘测定界界址点坐标交换格式》制作的固定格式文件。 其中包含了坐标系、精度、地块编号、地块名称、坐标点等信息。 这个工具的目的就是将TXT格式坐标批量转换为数据库文件…

JAVA+access综合测评系统毕业设计(源代码+论文+开题报告+任务书)

大学期间,综合测评计算是每学期必不可少的工作。人工计算综合测评是一个很繁杂的过程:每个学生先计算自己的综合测评成绩,制成草表,上交给班委;然后班委核对并将成绩录入制成电子文档上交给院系相关部门。在这个过程中,学生常常感到厌烦,因而草表的准确率很低;接着人工…

中顶SPA会所管理系统

中顶SPA会所管理系统是一款专业的SPA会所管理系统&#xff0c;它集前台收银管理系统&#xff0c;员工提成管理系统&#xff0c;库存管理系统&#xff0c;房间管理&#xff0c;强大的会员次卡套餐&#xff0c;财务报表系统等强大功能为一体&#xff0c;系统界面简洁优美&#xf…