openssl req(生成证书请求和自建CA)

openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.htmlhtml


伪命令req大体有3个功能:生成证书请求文件、验证证书请求文件和建立根CA。因为openssl req命令选项较多,因此先各举几个例子,再集中给出openssl req的选项说明。若已熟悉openssl req和证书请求相关知识,可直接跳至后文查看openssl req选项整理,若不熟悉,建议从前向后一步一步阅读。node

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

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

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

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

[root@xuexi 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"的用法,后文会有示例。spa

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

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

[root@xuexi 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"选项指定的是证书请求文件。code

[root@xuexi 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@xuexi 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:8b
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00 Signature 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@xuexi tmp]# openssl req -in req1.csr -noout -text
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CN, ST=FJ, L=XM, CN=www.youwant.com
        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:8b
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature 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@xuexi tmp]# openssl req -in req2.csr -subject -noout
subject=/C=CN/ST=FJ/L=XM/CN=www.youwant.com

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

[root@xuexi 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@xuexi 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,还支持md五、sha512等,更多可支持的签名算法见"openssl dgst --help"中所列出内容。例如此处指定md5算法。

[root@xuexi tmp]# openssl req -new -key pri_key.pem -out req2.csr -md5

[root@xuexi tmp]# openssl req -in req2.csr -noout -text | grep Algo
            Public Key Algorithm: rsaEncryption
 Signature Algorithm: md5WithRSAEncryption

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

[root@xuexi 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@xuexi tmp]# openssl req -verify -in req2.csr -noout
verify OK

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

使用openssl req自签署证书时,须要使用"-x509"选项,因为是签署证书请求文件,因此能够指定"-days"指定所颁发的证书有效期。

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

因为openssl req命令的主要功能是建立和管理证书请求文件,因此没有提供对证书文件的管理能力,暂时也就只能经过cat来查看证书文件CA1.crt了。

[root@xuexi 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@xuexi 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@xuexi 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@xuexi 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@xuexi 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@xuexi 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中指定了。若是指定了-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"选项对应,密码格式以及意义见"openssl密码格式"
output_password:密码的输出文件,与命令行的"-passout"选项对应,密码格式以及意义见"openssl密码格式"
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
default_md              = sha1
default_keyfile         = privkey.pem
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
相关文章
相关标签/搜索