certreq
certreq 命令可用於向憑證授權單位 (CA) 要求憑證、從 CA 擷取對先前要求的回應、從 .inf 檔案建立新要求、接受並安裝對要求的回應、從現有 CA 憑證或要求建構交叉認證或合格的從屬要求,以及簽署交叉認證或合格的從屬要求。
重要
舊版 certreq 命令可能無法提供此處所述的所有選項。 若要檢視根據特定 certreq 版本支援的選項,請執行命令列說明選項,certreq -v -?
。
certreq 命令不支援在 CEP/CES 環境中根據金鑰證明範本建立新的憑證要求。
警告
本主題的內容是以 Windows Server 的預設設定為基礎;例如,將金鑰長度設定為 2048、選取 Microsoft 軟體金鑰儲存提供者作為 CSP,並使用安全雜湊演算法 1 (SHA1)。 請根據公司安全性原則的需求評估這些選擇。
語法
certreq [-submit] [options] [requestfilein [certfileout [certchainfileout [fullresponsefileOut]]]]
certreq -retrieve [options] requestid [certfileout [certchainfileout [fullresponsefileOut]]]
certreq -new [options] [policyfilein [requestfileout]]
certreq -accept [options] [certchainfilein | fullresponsefilein | certfilein]
certreq -sign [options] [requestfilein [requestfileout]]
certreq –enroll [options] templatename
certreq –enroll –cert certId [options] renew [reusekeys]
參數
參數 | 描述 |
---|---|
-submit | 將要求提交至憑證授權單位。 |
-retrieve <requestid> |
從憑證授權單位擷取對先前要求的回應。 |
-new | 從 .inf 檔案建立新的要求。 |
-accept | 接受並安裝憑證要求的回應。 |
-policy | 設定要求的原則。 |
-sign | 簽署交叉認證或合格的從屬要求。 |
-enroll | 註冊或更新憑證。 |
-? | 顯示 certreq 語法、選項和描述的清單。 |
<parameter> -? |
顯示指定參數的說明。 |
-v -? | 顯示 certreq 語法、選項和描述的詳細資訊清單。 |
範例
certreq -submit
若要提交基本憑證要求:
certreq –submit certrequest.req certnew.cer certnew.pfx
備註
這是預設 certreq.exe 參數。 如果在命令列提示字元中未指定任何選項,certreq.exe 為嘗試將憑證要求提交給憑證授權單位。 使用 –submit 選項時,您必須指定憑證要求檔案。 如果省略此參數,就會顯示通用的 [開啟檔案] 視窗,讓您選取適當的憑證要求檔案。
若要指定 SAN 屬性來要求憑證,請參閱 Microsoft 知識庫文章 931351 如何將主體別名新增至安全的 LDAP 憑證的「如何使用 certreq.exe 公用程式建立及提交憑證要求」一節。
certreq -retrieve
若要擷取憑證識別碼 20,並建立名為 MyCertificate 的憑證檔案 (.cer):
certreq -retrieve 20 MyCertificate.cer
備註
使用 certreq -retrieve requestid 在憑證授權單位發出憑證之後擷取憑證。 requestid PKC 可以是具有 0x 前置詞的十進位或十六進位,而且可以是沒有 0x 前置詞的憑證序號。 您也可以使用它來擷取憑證授權單位已發行的任何憑證,包括已撤銷或過期的憑證,而不考慮憑證的要求是否處於擱置狀態。
如果您將要求提交至憑證授權單位,憑證授權單位的原則模組可能會將要求保留在擱置狀態,並將 requestid 傳回 certreq 呼叫端以供顯示。 最後,憑證授權單位的系統管理員會發出憑證或拒絕要求。
certreq -new
若要建立新的要求:
[newrequest]
; At least one value must be set in this section
subject = CN=W2K8-BO-DC.contoso2.com
以下是可以新增至 INF 檔案的一些可能區段:
[newrequest]
任何新的憑證要求範本都必須使用 INF 檔案的這個區域,而且必須至少包含一個具有值的參數。
金鑰1 | 描述 | 值2 | 範例 |
---|---|---|---|
主體 | 數個應用程式依賴憑證中的主體資訊。 建議為此金鑰指定值。 如果未在此設定主體,建議您在主體別名憑證延伸中包含主體名稱。 | 相對的辨別名稱字串值 | Subject = CN=computer1.contoso.com Subject=CN=John Smith,CN=Users,DC=Contoso,DC=com |
Exportable | 如果設定為 TRUE,可使用憑證匯出私密金鑰。 為了確保高度安全性,私密金鑰應該不可匯出;不過,在某些情況下,如果數個電腦或使用者必須共用相同的私密金鑰,則可能是必要的。 | true | false |
Exportable = TRUE . CNG 金鑰可以對此與可匯出的純文字之間作出區別。 CAPI1 金鑰則無法區別。 |
ExportableEncrypted | 指定是否應將私密金鑰設定為可匯出。 | true | false |
ExportableEncrypted = true 提示: 並非所有公開金鑰大小和演算法都適用於所有雜湊演算法。 指定的 CSP 也必須支援指定的雜湊演算法。 若要查看支援的雜湊演算法清單,您可以執行命令: |
HashAlgorithm | 要用於此要求的雜湊演算法。 | Sha256, sha384, sha512, sha1, md5, md4, md2 |
HashAlgorithm = sha1 . 若要查看支援的雜湊演算法清單,請使用:certutil -oid 1 | findstr pwszCNGAlgid | findstr /v CryptOIDInfo |
KeyAlgorithm | 服務提供者用來產生公開和私密金鑰組的演算法。 | RSA, DH, DSA, ECDH_P256, ECDH_P521, ECDSA_P256, ECDSA_P384, ECDSA_P521 |
KeyAlgorithm = RSA |
KeyContainer | 不建議針對產生新金鑰內容的新要求設定此參數。 系統會自動產生和維護金鑰容器。 對於應使用現有金鑰內容的要求,此值可以設定為現有金鑰的金鑰容器名稱。 使用 |
隨機字串值 提示:針對任何具有空白或特殊字元的 INF 金鑰值使用雙引號,以避免潛在的 INF 剖析問題。 |
KeyContainer = {C347BD28-7F69-4090-AA16-BC58CF4D749C} |
KeyLength | 定義公開和私密金鑰的長度。 金鑰長度會影響憑證的安全性層級。 較大的密鑰長度通常提供較高的安全性層級;不過,某些應用程式可能會有金鑰長度的限制。 | 密碼編譯服務提供者支援的任何有效金鑰長度。 | KeyLength = 2048 |
KeySpec | 判斷金鑰是否可用於簽章、Exchange (加密) 或兩者。 | AT_NONE, AT_SIGNATURE, AT_KEYEXCHANGE |
KeySpec = AT_KEYEXCHANGE |
KeyUsage | 定義應該使用的憑證金鑰。 |
|
KeyUsage = CERT_DIGITAL_SIGNATURE_KEY_USAGE | CERT_KEY_ENCIPHERMENT_KEY_USAGE 提示:多個值使用直立線 (|) 分隔符號。 請確定您在使用多個值時使用雙引號,以避免 INF 剖析問題。 顯示的值是每個位元定義的十六進位 (十進位) 值。 也可以使用較舊的語法:設定多個位元的單一十六進位值,而不是符號表示。 例如: |
KeyUsageProperty | 擷取值,識別可以使用私密金鑰的特定用途。 |
|
KeyUsageProperty = NCRYPT_ALLOW_DECRYPT_FLAG | NCRYPT_ALLOW_SIGNING_FLAG |
MachineKeySet | 當您需要建立由電腦而不是使用者擁有的憑證時,此金鑰很重要。 產生的金鑰內容會保留在已建立要求之安全性主體 (使用者或電腦帳戶) 的安全性內容中。 當系統管理員代表電腦建立憑證要求時,必須在電腦的安全性內容而不是系統管理員的安全性內容中建立金鑰內容。 否則,電腦無法存取其私密金鑰,因為它會位於系統管理員的安全性內容中。 | true | false . 預設值為 false。 |
MachineKeySet = true |
NotBefore | 指定無法發出要求之前的日期或日期和時間。 NotBefore 可與 ValidityPeriod 和 ValidityPeriodUnits 搭配使用。 |
日期或日期及時間 | NotBefore = 7/24/2012 10:31 AM 提示: |
NotAfter | 指定無法發出要求之後的日期或日期和時間。 NotAfter 無法與 ValidityPeriod 或 ValidityPeriodUnits 搭配使用。 |
日期或日期及時間 | NotAfter = 9/23/2014 10:31 AM 提示: |
PrivateKeyArchive | PrivateKeyArchive 設定只有在對應的 RequestType 設定為 CMC 時才有效,因為只有透過 CMS 的憑證管理訊息 (CMC) 要求格式,才能安全地將要求者的私密金鑰傳輸至 CA 以進行金鑰封存。 | true | false |
PrivateKeyArchive = true |
EncryptionAlgorithm | 要使用的加密演算法。 | 可能的選項會根據作業系統版本和已安裝的密碼編譯提供者集而有所不同。 若要查看可用的演算法清單,請執行命令:certutil -oid 2 | findstr pwszCNGAlgid 。 所使用的指定 CSP 也必須支援指定的對稱加密演算法和長度。 |
EncryptionAlgorithm = 3des |
EncryptionLength | 要使用的加密演算法長度。 | 指定之 EncryptionAlgorithm 所允許的任何長度。 | EncryptionLength = 128 |
ProviderName | 提供者名稱是 CSP 的顯示名稱。 | 如果您不知道您使用的 CSP 提供者名稱,請從命令行執行 certutil –csplist 。 該命令會顯示本機系統上所有可用的 CSP 名稱 |
ProviderName = Microsoft RSA SChannel Cryptographic Provider |
ProviderType | 提供者類型是用於根據特定演算法功能來選取特定提供者,例如 RSA Full。 | 如果您不知道您使用的 CSP 提供者類型,請從命令行提示字元執行 certutil –csplist 。 該命令會顯示本機系統上所有可用 CSP 的提供者類型。 |
ProviderType = 1 |
RenewalCert | 如果您需要更新在產生憑證要求之系統上的憑證,您必須將其憑證雜湊指定為此金鑰的值。 | 建立憑證要求之電腦上可用之任何憑證的憑證雜湊。 如果您不知道憑證雜湊,請使用憑證 MMC 嵌入式管理單元,並查看應該更新的憑證。 開啟憑證屬性,並查看憑證的 Thumbprint 屬性。 憑證更新需要 PKCS#7 或 CMC 要求格式。 |
RenewalCert = 4EDF274BD2919C6E9EC6A522F0F3B153E9B1582D |
RequesterName | 代表另一個使用者要求提出註冊要求。 要求也必須使用註冊代理憑證簽署,否則 CA 會拒絕要求。 使用 -cert 選項來指定註冊代理憑證。 如果 RequestType 設定為 PKCS#7 或 CMC ,則可以為憑證要求指定要求者名稱。 如果 RequestType 設定為 PKCS#10 ,則會忽略此金鑰。 Requestername 只能設定為要求的一部分。 您無法在擱置的要求中操控 Requestername 。 |
Domain\User |
Requestername = Contoso\BSmith |
RequestType | 決定用來產生和傳送憑證要求的標準。 |
|
RequestType = CMC |
SecurityDescriptor | 包含與安全性實體物件相關聯的安全性資訊。 對於大部分的安全性實體物件,您可以根據安全性描述元定義語言在建立 object.Strings 的函式呼叫中指定物件的安全性描述元。 提示:這僅適用於電腦內容非智慧卡金鑰。 |
SecurityDescriptor = D:P(A;;GA;;;SY)(A;;GA;;;BA) |
|
AlternateSignatureAlgorithm | 指定及擷取布林值,指出 PKCS#10 要求或憑證簽章的簽章演算法物件識別碼 (OID) 是離散或結合的。 | true | false |
AlternateSignatureAlgorithm = false 若為 RSA 簽章,則 |
無訊息 | 根據預設,此選項允許 CSP 存取互動式使用者桌面並要求資訊,例如使用者的智慧卡 PIN。 如果此金鑰設定為 TRUE,則 CSP 不得與桌面互動,而且會遭到封鎖,無法向使用者顯示任何使用者介面。 | true | false |
Silent = true |
SMIME | 如果此參數設定為 TRUE,則會將物件識別碼 1.2.840.113549.1.9.15 的延伸模組新增至要求。 物件識別碼的數目取決於已安裝的作業系統版本和 CSP 功能,這是指安全的多用途網際網路郵件延伸 (S/MIME) 應用程式可以使用的對稱加密演算法,例如 Outlook。 | true | false |
SMIME = true |
UseExistingKeySet | 此參數用來指定現有金鑰組應該用於建置憑證要求。 如果此金鑰設定為 TRUE,您也必須指定 RenewalCert 金鑰或 KeyContainer 名稱的值。 您無法設定可匯出金鑰,因為您無法變更現有金鑰的屬性。 在此情況下,建置憑證要求時不會產生任何金鑰內容。 | true | false |
UseExistingKeySet = true |
KeyProtection | 指定值,指出私密金鑰在使用前如何受到保護。 |
|
KeyProtection = NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG |
SuppressDefaults | 指定布林值,指出要求中是否包含預設延伸模組和屬性。 預設值會以其物件識別碼 (OID) 表示。 | true | false |
SuppressDefaults = true |
FriendlyName | 新憑證的易記名稱。 | Text | FriendlyName = Server1 |
ValidityPeriodUnits | 指定要與 ValidityPeriod 搭配使用的許多單位。 注意:這只會在 request type=cert 時使用。 |
數值 | ValidityPeriodUnits = 3 |
ValidityPeriod | ValidityPeriod 必須是美式英文複數時間週期。 注意:這只會在要求 type=cert 時使用。 | Years | Months | Weeks | Days | Hours | Minutes | Seconds |
ValidityPeriod = Years |
1 等號 (=) 左邊的參數
2 等號 (=) 右邊的參數
[Extensions]
本節為選擇性。
延伸模組 OID | 定義 | 範例 |
---|---|---|
2.5.29.17 | 2.5.29.17 = {text} | |
continue | continue = UPN=User@Domain.com& |
|
continue | continue = EMail=User@Domain.com& |
|
continue | continue = DNS=host.domain.com& |
|
continue | continue = DirectoryName=CN=Name,DC=Domain,DC=com& |
|
continue | continue = URL=<http://host.domain.com/default.html&> |
|
continue | continue = IPAddress=10.0.0.1& |
|
continue | continue = RegisteredId=1.2.3.4.5& |
|
continue | continue = 1.2.3.4.6.1={utf8}String& |
|
continue | continue = 1.2.3.4.6.2={octet}AAECAwQFBgc=& |
|
continue | continue = 1.2.3.4.6.2={octet}{hex}00 01 02 03 04 05 06 07& |
|
continue | continue = 1.2.3.4.6.3={asn}BAgAAQIDBAUGBw==& |
|
continue | continue = 1.2.3.4.6.3={hex}04 08 00 01 02 03 04 05 06 07 |
|
2.5.29.37 | 2.5.29.37={text} |
|
continue | continue = 1.3.6.1.5.5.7 |
|
continue | continue = 1.3.6.1.5.5.7.3.1 |
|
2.5.29.19 | {text}ca=0pathlength=3 |
|
重大 | Critical=2.5.29.19 |
|
KeySpec |
|
|
RequestType |
|
|
KeyUsage |
|
|
KeyUsageProperty |
|
|
KeyProtection |
|
|
SubjectNameFlags | template |
|
X500NameFlags |
|
注意
SubjectNameFlags
允許 INF 檔案根據目前的使用者或目前的電腦屬性,指定哪些 Subject 和 SubjectAltName 延伸欄位應該由 certreq 自動填入:DNS 名稱、UPN 等等。 使用常值範本表示會改用範本名稱旗標。 這可讓單一 INF 檔案用於多個內容中,以產生具有內容特定主體資訊的要求。
X500NameFlags
指定當 Subject INF keys
值轉換成 ASN.1 編碼的辨別名稱時,要直接傳遞至 CertStrToName
API 的旗標。
範例
若要在記事本中建立原則檔案 (.inf),並將它儲存為 requestconfig.inf:
[NewRequest]
Subject = CN=<FQDN of computer you are creating the certificate>
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xf0
MachineKeySet = TRUE
[RequestAttributes]
CertificateTemplate=WebServer
[Extensions]
OID = 1.3.6.1.5.5.7.3.1
OID = 1.3.6.1.5.5.7.3.2
在您要求憑證的電腦上:
certreq –new requestconfig.inf certrequest.req
若要針對 OID 和其他難以解譯的資料使用 [Strings] 區段語法。 EKU 延伸的新 {text} 語法範例,這會使用逗號分隔的 OID 清單:
[Version]
Signature=$Windows NT$
[Strings]
szOID_ENHANCED_KEY_USAGE = 2.5.29.37
szOID_PKIX_KP_SERVER_AUTH = 1.3.6.1.5.5.7.3.1
szOID_PKIX_KP_CLIENT_AUTH = 1.3.6.1.5.5.7.3.2
[NewRequest]
Subject = CN=TestSelfSignedCert
Requesttype = Cert
[Extensions]
%szOID_ENHANCED_KEY_USAGE%={text}%szOID_PKIX_KP_SERVER_AUTH%,
_continue_ = %szOID_PKIX_KP_CLIENT_AUTH%
若要指定主體替代名稱 (SAN),請在 INF 的 [Extensions] 區段中新增它。 例如:
[Version]
Signature=$Windows NT$
[Strings]
szOID_ENHANCED_KEY_USAGE = 2.5.29.37
szOID_PKIX_KP_SERVER_AUTH = 1.3.6.1.5.5.7.3.1
szOID_PKIX_KP_CLIENT_AUTH = 1.3.6.1.5.5.7.3.2
[NewRequest]
Subject = CN=TestSelfSignedCert
Requesttype = Cert
[Extensions]
2.5.29.17 = "{text}"
_continue_ = "DNS=example.com"
_continue_ = "DNS=www.example.com"
_continue_ = "IP Address=192.168.1.1"
在此範例中,2.5.29.17
是定義 SAN 的 OID。 若要指定多個 SAN,_continue_
會使用延伸模組 OID,讓您分隔並指定每個 SAN 延伸模組。
certreq -accept
–accept
參數會連結先前產生的私密金鑰與發行的憑證,並從要求憑證的系統移除擱置的憑證要求 (如果有相符的要求)。
若要手動接受憑證:
certreq -accept certnew.cer
警告
將 -accept
參數與 -user
和 –machine
選項搭配使用,指出是否應該在使用者或電腦內容中安裝安裝憑證。 如果任一內容中有符合所安裝公開金鑰的未完成要求,則不需要這些選項。 如果沒有未完成的要求,則必須指定其中一項。
certreq -policy
policy.inf 檔案是一個組態檔,定義當定義合格的附屬干係時套用至 CA 認證的條件約束。
若要建置交叉憑證要求:
certreq -policy certsrv.req policy.inf newcertsrv.req
使用 certreq -policy
時不含任何其他參數會開啟一個對話方塊視窗,讓您選取所要求的檔案 (.req、.cmc、.txt、.der、.cer 或 .crt)。 選取要求的檔案並按一下 [開啟] 之後,會開啟另一個對話方塊視窗,讓您選取 policy.inf 檔案。
範例
在 CAPolicy.inf 語法中尋找 policy.inf 檔案的範例。
certreq -sign
若要建立新的憑證要求,請進行簽署後提交:
certreq -new policyfile.inf myrequest.req
certreq -sign myrequest.req myrequest.req
certreq -submit myrequest_sign.req myrequest_cert.cer
備註
使用
certreq -sign
時不含任何其他參數會開啟一個對話方塊視窗,讓您能夠選取所要求的檔案 (req、cmc、txt、der、cer 或 crt)。簽署合格的從屬要求可能需要企業管理員認證。 這是為合格的附屬關係發行簽署憑證的最佳做法。
用來簽署合格的附屬要求的憑證會使用合格的附屬關係範本。 企業管理員必須簽署要求或將使用者權限授與簽署憑證的個體。
您可能需要讓其他人員在您之後簽署 CMC 要求。 這取決於與合格的從屬關係相關聯的保證層級。
如果您要安裝的合格次級 CA 的父 CA 已離線,您必須從離線父系取得合格次級 CA 的 CA 憑證。 如果父 CA 已連線,請在「憑證服務安裝」精靈期間指定合格次級 CA 的 CA 憑證。
certreq -enroll
您可以使用此註解來註冊或更新您的憑證。
範例
若要使用 WebServer 範本註冊憑證,並使用 U/I 選取原則伺服器:
certreq -enroll –machine –policyserver * WebServer
若要使用序號更新憑證:
certreq –enroll -machine –cert 61 2d 3c fe 00 00 00 00 00 05 renew
您只能更新有效的憑證。 過期的憑證無法更新,且必須取代為新的憑證。
選項。
選項。 | 描述 |
---|---|
-any | Force ICertRequest::Submit 用以判斷編碼類型。 |
-attrib <attributestring> |
指定 Name 和 Value 字串組,以冒號分隔。 使用 |
-binary | 將輸出檔案格式化為二進位檔,而不是 base64 編碼。 |
-policyserver <policyserver> |
ldap: <path> 為執行憑證註冊原則 Web 服務的電腦插入 URI 或唯一識別碼。 若要指定您想要透過瀏覽來使用要求檔案,請對 |
-config <ConfigString> |
使用組態字串中指定的 CA 來處理作業,也就是 CAHostName\CAName。 對於 https:\\ 連線,指定註冊伺服器 URI。 對於本機電腦存放區 CA,請使用減號 (-)。 |
-anonymous | 針對憑證註冊 Web 服務使用匿名認證。 |
-kerberos | 針對憑證註冊 Web 服務使用 Kerberos (網域) 認證。 |
-clientcertificate <ClientCertId> |
您可以將 <ClientCertId> 取代為憑證指紋、CN、EKU、範本、電子郵件、UPN 或新的 name=value 語法。 |
-username <username> |
與憑證註冊 Web 服務搭配使用。 您可以使用 SAM 名稱或 domain\user 值來取代 <username> 。 此選項是要與 -p 選項搭配使用。 |
-p <password> |
與憑證註冊 Web 服務搭配使用。 以實際的使用者密碼取代 <password> 。 此選項是要與 -username 選項搭配使用。 |
-user | 為新憑證要求設定 -user 內容,或為憑證接受指定內容。 如果在 INF 或範本中指定無,則這是預設內容。 |
-machine | 對於電腦內容,設定新憑證要求或是為憑證接受指定內容。 對於新要求,它必須與 MachineKeyset INF 金鑰和範本內容一致。 如果未指定此選項,而且範本未設定內容,則預設值為使用者內容。 |
-crl | 將憑證撤銷清單 (CRL) 包含在由 certchainfileout 指定之 base64 編碼的 PKCS #7 檔案輸出中,或由 requestfileout 指定的 base64 編碼檔案輸出中。 |
-rpc | 指示 Active Directory 憑證服務 (AD CS) 使用遠端程序呼叫 (RPC) 伺服器連線,而不是分散式 COM。 |
-adminforcemachine | 使用金鑰服務或模擬,從本機系統內容提交要求。 要求叫用此選項的使用者必須是本機管理員的成員。 |
-renewonbehalfof | 代表簽署憑證中識別的主體提交更新。 呼叫 ICertRequest::Submit 方法時,這會設定 CR_IN_ROBO |
-f | 強制覆寫現有的檔案。 這也會略過快取範本和原則。 |
-q | 使用無訊息模式;隱藏所有互動式提示。 |
-unicode | 將標準輸出重新導向或傳送至另一個命令時,寫入 Unicode 輸出,這有助於從 Windows PowerShell 指令碼叫用。 |
-unicodetext | 將 base64 文字編碼的資料 Blob 寫入檔案時,傳送 Unicode 輸出。 |
格式
格式 | 描述 |
---|---|
requestfilein | Base64 編碼或二進位輸入檔名稱:PKCS #10 憑證要求、CMS 憑證要求、PKCS #7 憑證更新要求、要進行交叉認證的 X.509 憑證,或 KeyGen 標記格式憑證要求。 |
requestfileout | Base64 編碼的輸出檔名。 |
certfileout | Base64 編碼的 X-509 檔名。 |
PKCS10fileout | 僅適用於與 certreq -policy 參數搭配使用。 Base64 編碼的 PKCS10 輸出檔名。 |
certchainfileout | Base64 編碼的 PKCS #7 檔名。 |
fullresponsefileout | Base64 編碼的完整回應檔名。 |
policyfilein | 僅適用於與 certreq -policy 參數搭配使用。 INF 檔案,其中包含用來限定要求的延伸模組文字表示。 |
其他資源
下列文章包含 certreq 使用方式的範例: