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