證書籤署請求
在公開密鑰基礎架構(PKI)系統,證書籤署請求(certificate signing request,CSR或certification request)是申請者發給證書頒發機構(ca)的消息,用於申請公開密鑰證書。通常包含用於簽發證書的公鑰、用於辨識的信息(如域名)、完整性保護(如數字簽名)。當證書被簽署時,這兩部分都會被插入到證書中。CSR最常用格式是PKCS #10規範。
過程
[編輯]在創建CSR之前,申請者先產生一個密鑰對,保持私鑰為秘密。CSR保護申請者的身份信息(如X.509證書中區分名稱)用公鑰加密。CSR還包含了這個公鑰。
CSR中的典型DN信息:
Distinguished_Name[1] | 信息 | 描述 | 例子 |
---|---|---|---|
CN
|
Common Name | 通用名稱。通常是需要證書籤名的完全合格域名(Fully Qualified Domain Name)(FQDN) | *.wikipedia.org |
O
|
商業名字 / Organization | 通常是法律上的商業名字 | Wikimedia Foundation, Inc. |
OU
|
部門名字 / Organizational Unit | 如HR, Finance, IT | |
L
|
城鎮 | San Francisco | |
ST
|
省、州 | 不應該使用縮寫 | California |
C
|
國家名字 | 兩字母ISO國家代碼 | US |
MAIL
|
Email地址 | 該組織中的證書管理人的email地址 |
如果申請成功,證書頒發機構(ca)用自己的私鑰簽發一個公開密鑰證書並發給申請者。
結構
[編輯]證書包含三部分:[2] Thus the private key is needed to produce, but it is not part of, the CSR.[3]
例子
[編輯]PKCS#10 標準化了使用X.509的CSR的二進制格式。使用OpenSSL的命令行工具可以解讀:
openssl asn1parse -i -in your_request
Base64編碼的CSR的例子如下:
-----BEGIN CERTIFICATE REQUEST----- MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/ kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y /ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr 9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG 7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i 57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy /YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+ 3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7 -----END CERTIFICATE REQUEST-----
openssl解讀為ASN.1結構,其中第一個數是字節偏移值,d=深度, hl=當前類型的頭部長度, l=內容長度:
0:d=0 hl=4 l= 716 cons: SEQUENCE 4:d=1 hl=4 l= 436 cons: SEQUENCE 8:d=2 hl=2 l= 1 prim: INTEGER :00 11:d=2 hl=3 l= 134 cons: SEQUENCE 14:d=3 hl=2 l= 11 cons: SET 16:d=4 hl=2 l= 9 cons: SEQUENCE 18:d=5 hl=2 l= 3 prim: OBJECT :countryName 23:d=5 hl=2 l= 2 prim: PRINTABLESTRING :EN 27:d=3 hl=2 l= 13 cons: SET 29:d=4 hl=2 l= 11 cons: SEQUENCE 31:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName 36:d=5 hl=2 l= 4 prim: UTF8STRING :none 42:d=3 hl=2 l= 13 cons: SET 44:d=4 hl=2 l= 11 cons: SEQUENCE 46:d=5 hl=2 l= 3 prim: OBJECT :localityName 51:d=5 hl=2 l= 4 prim: UTF8STRING :none 57:d=3 hl=2 l= 18 cons: SET 59:d=4 hl=2 l= 16 cons: SEQUENCE 61:d=5 hl=2 l= 3 prim: OBJECT :organizationName 66:d=5 hl=2 l= 9 prim: UTF8STRING :Wikipedia 77:d=3 hl=2 l= 13 cons: SET 79:d=4 hl=2 l= 11 cons: SEQUENCE 81:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName 86:d=5 hl=2 l= 4 prim: UTF8STRING :none 92:d=3 hl=2 l= 24 cons: SET 94:d=4 hl=2 l= 22 cons: SEQUENCE 96:d=5 hl=2 l= 3 prim: OBJECT :commonName 101:d=5 hl=2 l= 15 prim: UTF8STRING :*.wikipedia.org 118:d=3 hl=2 l= 28 cons: SET 120:d=4 hl=2 l= 26 cons: SEQUENCE 122:d=5 hl=2 l= 9 prim: OBJECT :emailAddress 133:d=5 hl=2 l= 13 prim: IA5STRING :none@none.com 148:d=2 hl=4 l= 290 cons: SEQUENCE 152:d=3 hl=2 l= 13 cons: SEQUENCE 154:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption 165:d=4 hl=2 l= 0 prim: NULL 167:d=3 hl=4 l= 271 prim: BIT STRING 442:d=2 hl=2 l= 0 cons: cont [ 0 ] 444:d=1 hl=2 l= 13 cons: SEQUENCE 446:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 457:d=2 hl=2 l= 0 prim: NULL 459:d=1 hl=4 l= 257 prim: BIT STRING
使用openssl創建證書籤署請求
[編輯]生成一個私鑰和一個 CSR
[編輯]從頭開始創建一個 2048 位的私鑰(domain.key)和一個 CSR(domain.csr):
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
其中選項-newkey rsa:2048指定密鑰應該是2048位,使用RSA算法生成。選項-nodes指定私鑰沒有用密碼加密。這裏沒有包含-new選項,而是隱含在其中,表示正在生成一個CSR。還需要繼續回答 CSR 信息提問,完成該過程:
--- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:Brooklyn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company Organizational Unit Name (eg, section) []:Technology Division Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com Email Address []:
在這個命令中也可以使用-subj選項非交互式地添加CSR信息:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
從現有的私鑰中生成一個 CSR
[編輯]如果已經有了私鑰,想用它向 CA 申請證書,使用這個方法。該命令基於現有的私鑰(domain.key)創建一個新的 CSR(domain.csr):
openssl req -key domain.key -new -out domain.csr
其中選項 -key 指定一個現有的私鑰(domain.key),它將被用來生成一個新的 CSR。選項 -new 表示正在生成一個 CSR。繼續回答 CSR 信息提問,完成該過程。
從現有的證書和私鑰生成 CSR
[編輯]如果想更新現有的證書,但由於某些原因,你或你的 CA 沒有原始的 CSR,使用這個方法可以省去重新輸入 CSR 信息的麻煩,因為是從現有證書中提取信息。該命令基於現有的證書(domain.crt)和私鑰(domain.key)創建一個新的 CSR(domain.csr):
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr
其中選項 -x509toreq 指定使用一個 X509 證書來製作 CSR。
參見
[編輯]參考文獻
[編輯]- ^ Distinguished Names. WebSphere MQ Security Concepts and mechanisms. IBM. 2019-11-05 [2020-01-16]. (原始內容存檔於2020-01-16).
- ^ 2.0 2.1 RFC 2986 - PKCS #10: Certification Request Syntax Specification Version 1.7
- ^ Nikos Mavrogiannopoulos. PKCS #10 certificate requests. GnuTLS. 2020-01-09 [2020-01-16]. (原始內容存檔於2020-11-26).