Lệnh certreq trong Windows

Certreq có thể được sử dụng để yêu cầu chứng chỉ từ một tổ chức chứng nhận (CA), nhằm nhận được một phản hồi cho yêu cầu trước đó từ một CA, tạo một yêu cầu mới từ file .inf, chấp nhận và cài đặt phản hồi cho yêu cầu, xây dựng yêu cầu cấp quyền chéo, chứng nhận đủ điều kiện từ chứng chỉ hay yêu cầu CA hiện có và ký yêu cầu cấp quyền chứng nhận chéo hoặc đủ điều kiện.

Cảnh báo

Các phiên bản trước của certreq có thể không cung cấp tất cả các tùy chọn được mô tả trong tài liệu này. Bạn có thể thấy tất cả các tùy chọn mà một phiên bản cụ thể của certreq cung cấp bằng cách chạy các lệnh được hiển thị trong phần Ký hiệu cú pháp bên dưới.

Các động từ được sử dụng với lệnh certreq

Bảng sau mô tả các động từ có thể được sử dụng với lệnh certreq:

Động từMô tả
-SubmitGửi yêu cầu tới CA. Để biết thêm thông tin, xem phần Certreq -submit.
-retrieve RequestIDTruy xuất phản hồi cho yêu cầu trước đó từ CA. Để biết thêm thông tin, xem phần Certreq -retrieve.
-NewTạo một yêu cầu mới từ file .inf. Để biết thêm thông tin, xem phần Certreq -new.
-AcceptChấp nhận và cài đặt phản hồi cho yêu cầu chứng chỉ. Để biết thêm thông tin, xem phần Certreq -accept.
-PolicyĐặt chính sách cho một yêu cầu. Để biết thêm thông tin, xem phần Certreq -policy.
-SignKý một yêu cầu phụ đủ điều kiện hoặc chứng nhận chéo. Để biết thêm thông tin, xem phần Certreq -ign.
-EnrollĐăng ký hoặc gia hạn chứng chỉ. Để biết thêm thông tin, hãy xem phần Certreq -enroll.
-?Hiển thị danh sách cú pháp, tùy chọn và mô tả của lệnh certreq.
<verb> -?Hiển thị trợ giúp cho động từ được chỉ định.
-v -?Hiển thị một danh sách chi tiết cho cú pháp, tùy chọn và mô tả lệnh certreq.

Ký hiệu cú pháp

Đối với cú pháp dòng lệnh cơ bản, hãy chạy:

certreq -?

Đối với cú pháp sử dụng certutil với một động từ cụ thể, hãy chạy:

certreq <verb> -?

Để gửi tất cả cú pháp certutil vào một file văn bản, hãy chạy các lệnh sau:

certreq -v -? > certreqhelp.txt
notepad certreqhelp.txt

Bảng sau mô tả ký hiệu được sử dụng để chỉ ra cú pháp dòng lệnh.

Ký hiệuMô tả
Văn bản không có dấu ngoặc vuông hoặc ngoặc nhọnCác mục bạn phải nhập như được hiển thị
<Văn bản bên trong dấu ngoặc nhọn>Placeholder mà bạn phải cung cấp giá trị
[Văn bản bên trong dấu ngoặc vuông]Các mục tùy chọn
{Văn bản bên trong dấu ngoặc nhọn}Chọn một trong các mục được yêu cầu
Thanh dọc (|)Dấu phân tách cho các mục loại trừ lẫn nhau (chọn một trong số các mục)
Dấu ba chấm (…)Các mục có thể được lặp lại

Certreq -submit

Đây là tham số certreq.exe mặc định, nếu không có tùy chọn nào được chỉ định rõ ràng tại dấu nhắc lệnh, certreq.exe sẽ cố gắng gửi yêu cầu chứng chỉ tới CA.

CertReq [-Submit] [Options] [RequestFileIn [CertFileOut [CertChainFileOut [FullResponseFileOut]]]]

Bạn phải chỉ định file yêu cầu chứng chỉ khi sử dụng tùy chọn –submit. Nếu tham số này bị bỏ qua, một cửa sổ File Open sẽ được hiển thị. Đây là nơi bạn có thể chọn file yêu cầu chứng chỉ thích hợp.

Bạn có thể sử dụng các ví dụ này làm điểm bắt đầu để tạo yêu cầu gửi chứng chỉ của mình. Để gửi yêu cầu chứng chỉ đơn giản, hãy sử dụng ví dụ bên dưới:

certreq –submit certRequest.req certnew.cer certnew.pfx

Certreq -retrieve

certreq -retrieve [Options] RequestId [CertFileOut [CertChainFileOut [FullResponseFileOut]]]
  • Nếu bạn không chỉ định CAComputerName hoặc CAName trong -config, một hộp thoại CAComputerName\CANamea sẽ xuất hiện và hiển thị một danh sách tất cả các CA có sẵn.
  • Nếu bạn sử dụng -config thay vì -config CAComputerName\CAName, thao tác được xử lý bằng CA mặc định.
  • Bạn có thể sử dụng certreq -retrieve RequestID để lấy chứng chỉ sau khi CA đã thực sự phát hành nó. RequestIDPKC có thể là một số thập phân hoặc thập lục phân với tiền tố 0x và nó có thể là một số sê-ri chứng chỉ không có tiền tố 0x. Bạn cũng có thể sử dụng nó để truy xuất bất kỳ chứng chỉ nào đã được CA cấp, bao gồm các chứng chỉ bị thu hồi hoặc hết hạn, bất kể yêu cầu của chứng chỉ có ở trạng thái đang chờ xử lý hay không.
  • Nếu bạn gửi yêu cầu tới CA, mô-đun chính sách của CA có thể để lại yêu cầu trong trạng thái đang chờ xử lý và trả lại RequestID cho người gọi Certreq. Cuối cùng, quản trị viên của CA sẽ cấp chứng chỉ hoặc từ chối yêu cầu.

Lệnh dưới đây lấy chứng chỉ id 20 và tạo file chứng chỉ (.cer):

certreq -retrieve 20 MyCertificate.cer

Certreq -new

certreq -new [Options] [PolicyFileIn [RequestFileOut]]

Vì file INF cho phép tập hợp các tham số và tùy chọn phong phú, nên khó xác định template mặc định mà quản trị viên nên sử dụng cho mọi mục đích. Do đó, phần này mô tả tất cả các tùy chọn cho phép bạn tạo một file INF phù hợp với nhu cầu cụ thể của bạn. Các từ khóa sau được sử dụng để mô tả cấu trúc file INF.

  1. Section là một vùng trong file INF bao gồm một nhóm các key logic. Section luôn xuất hiện trong các dấu ngoặc ở file INF.
  2. Key là tham số nằm bên trái dấu bằng.
  3. Value là tham số ở bên phải dấu bằng.

Ví dụ, một file INF tối thiểu sẽ trông giống như sau:

[NewRequest] 
; At least one value must be set in this section 
Subject = "CN=W2K8-BO-DC.contoso2.com"

Sau đây là một số section có thể được thêm vào file INF. Phần này là bắt buộc đối với file INF, hoạt động như một template cho yêu cầu chứng chỉ mới. Phần này yêu cầu ít nhất một key có giá trị:

1. Subject

Định nghĩa: Một số ứng dụng dựa vào thông tin của subject trong một chứng chỉ. Do đó, bạn nên chỉ định giá trị cho key này. Nếu subject không được đặt ở đây, bạn nên đưa tên subject vào trong phần mở rộng thay thế tên cho subject của chứng chỉ.

Giá trị: Các giá trị chuỗi Relative Distinguished Name.

Ví dụ:

Subject = "CN=computer1.contoso.com" 
Subject="CN=John Smith,CN=Users,DC=Contoso,DC=com"

2. Exportable

Định nghĩa: Nếu thuộc tính này được đặt thành TRUE, private key có thể được xuất với chứng chỉ. Để đảm bảo mức bảo mật cao, không thể xuất private key. Tuy nhiên, trong một số trường hợp, private key có thể xuất được, nếu một số máy tính hoặc người dùng phải chia sẻ cùng một private key.

Giá trị: true, false

Ví dụ:

Exportable = TRUE.

Các key CNG có thể phân biệt giữa điều này và văn bản thô có thể xuất được. Còn key CAPI1 thì không thể.

3. ExportableEncrypted

Định nghĩa: Chỉ định liệu private key có nên được đặt thành có thể xuất được hay không.

Giá trị: true, false

Ví dụ:

ExportableEncrypted = true

Mẹo: Không phải tất cả các kích thước và thuật toán của các public key đều sẽ hoạt động với tất cả các thuật toán hash. Tamehe CSP được chỉ định cũng phải hỗ trợ thuật toán hash được chỉ định. Để xem danh sách các thuật toán hash được hỗ trợ, bạn có thể chạy lệnh:

certutil -oid 1 | findstr pwszCNGAlgid | findstr /v CryptOIDInfo

4. HashAlgorithm

Định nghĩa: Thuật toán Hash được sử dụng cho yêu cầu này.

Giá trị: Sha256, sha384, sha512, sha1, md5, md4, md2

Ví dụ:

HashAlgorithm = sha1

Để xem danh sách các thuật toán băm được hỗ trợ, hãy sử dụng:

certutil -oid 1 | findstr pwszCNGAlgid | findstr /v CryptOIDInfo

5. KeyAlgorithm

Định nghĩa: Thuật toán sẽ được nhà cung cấp dịch vụ sử dụng để tạo cặp public và private key.

Giá trị: RSA, DH, DSA, ECDH_P256, ECDH_P521, ECDSA_P256, ECDSA_P384, ECDSA_P521

Ví dụ: KeyAlgorithm = RSA

6. KeyContainer

Định nghĩa: Không nên đặt tham số này cho các yêu cầu mới, ở nơi tạo tài liệu key mới. Vùng chứa key được tự động tạo và duy trì bởi hệ thống. Đối với các yêu cầu sử dụng tài liệu key hiện tại, giá trị này có thể được đặt thành key-tên vùng chứa của key hiện tại. Sử dụng lệnh certutil –key để hiển thị danh sách các vùng chứa key có sẵn cho ngữ cảnh máy. Sử dụng lệnh certutil –key –user cho ngữ cảnh của người dùng hiện tại.

Giá trị: Giá trị chuỗi ngẫu nhiên. Mẹo: Bạn nên sử dụng dấu ngoặc kép xung quanh bất kỳ giá trị key INF nào có khoảng trắng hoặc ký tự đặc biệt, để tránh các sự cố phân tích cú pháp INF tiềm ẩn.

Ví dụ:

KeyContainer = {C347BD28-7F69-4090-AA16-BC58CF4D749C}

7. KeyLength

Định nghĩa: Xác định độ dài của khóa public và private key. Độ dài key có tác động đến mức độ bảo mật của chứng chỉ. Độ dài key lớn hơn thường cung cấp mức bảo mật cao hơn. Tuy nhiên, một số ứng dụng có thể có giới hạn về độ dài key.

Giá trị: Bất kỳ độ dài key hợp lệ nào được nhà cung cấp dịch vụ mã hóa hỗ trợ.

Ví dụ: KeyLength = 2048

8. KeySpec

Định nghĩa: Xác định xem key có thể được sử dụng cho signature (chữ ký), cho Exchange (mã hóa), hoặc cho cả hai hay không.

Giá trị: AT_NONE, AT_SIGNATURE, AT_KEYEXCHANGE

Ví dụ:

KeySpec = AT_KEYEXCHANGE

9. KeyUsage

Định nghĩa: Xác định những gì các key chứng chỉ nên được sử dụng cho.

Giá trị:

CERT_DIGITAL_SIGNATURE_KEY_USAGE -- 80 (128)

Mẹo: Các giá trị được hiển thị là các giá trị thập lục phân (thập phân) cho mỗi bit. Cú pháp cũ hơn cũng có thể được sử dụng: Một giá trị thập lục phân đơn với nhiều bit được đặt, thay vì biểu đạt bằng ký hiệu. Ví dụ:

KeyUsage = 0xa0.
CERT_NON_REPUDIATION_KEY_USAGE -- 40 (64)
CERT_KEY_ENCIPHERMENT_KEY_USAGE -- 20 (32)
CERT_DATA_ENCIPHERMENT_KEY_USAGE -- 10 (16)
CERT_KEY_AGREEMENT_KEY_USAGE -- 8
CERT_KEY_CERT_SIGN_KEY_USAGE -- 4
CERT_OFFLINE_CRL_SIGN_KEY_USAGE -- 2
CERT_CRL_SIGN_KEY_USAGE -- 2
CERT_ENCIPHER_ONLY_KEY_USAGE -- 1
CERT_DECIPHER_ONLY_KEY_USAGE -- 8000 (32768)

Ví dụ:

KeyUsage = "CERT_DIGITAL_SIGNATURE_KEY_USAGE | 
CERT_KEY_ENCIPHERMENT_KEY_USAGE"

Mẹo: Nếu có nhiều giá trị hãy sử dụng dấu (|). Đảm bảo rằng bạn sử dụng dấu ngoặc kép khi sử dụng nhiều giá trị để tránh các sự cố phân tích cú pháp INF.

10. KeyUsageProperty

Định nghĩa: Lấy ra một giá trị xác định mục đích cụ thể, mà một private key có thể được sử dụng.

Giá trị:

NCRYPT_ALLOW_DECRYPT_FLAG -- 1
NCRYPT_ALLOW_SIGNING_FLAG -- 2
NCRYPT_ALLOW_KEY_AGREEMENT_FLAG -- 4
NCRYPT_ALLOW_ALL_USAGES -- ffffff (16777215)

Ví dụ:

KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG | 
NCRYPT_ALLOW_SIGNING_FLAG"

11. MachineKeySet

Định nghĩa: Key này rất quan trọng khi bạn cần tạo chứng chỉ do máy sở hữu chứ không phải người dùng. Tài liệu key được tạo ra duy trì trong ngữ cảnh của nguyên tắc bảo mật (tài khoản người dùng hoặc máy tính) đã tạo yêu cầu. Khi admin tạo yêu cầu chứng chỉ thay mặt cho máy tính, tài liệu key này phải được tạo trong ngữ cảnh bảo mật của máy, chứ không phải ngữ cảnh bảo mật của admin. Nếu không, máy không thể truy cập private key vì nó sẽ nằm trong ngữ cảnh bảo mật của admin.

Giá trị: true, false

Ví dụ: MachineKeySet = true

Mẹo: Giá trị mặc định là False.

12. NotBefore

Định nghĩa: Xác định ngày hoặc ngày và thời gian, trước khi yêu cầu không thể được đưa ra. NotBefore có thể được sử dụng với ValidityPeriod và ValidityPeriodUnits.

Giá trị: Ngày hoặc ngày và thời gian

Ví dụ: NotBefore = "7/24/2012 10:31 AM"

13. NotAfter

Định nghĩa: Chỉ định ngày hoặc ngày và thời gian mà yêu cầu không thể được đưa ra. NotAfter không thể được sử dụng với ValidityPeriod hoặc ValidityPeriodUnits.

Giá trị: Ngày hoặc ngày và thời gian

Ví dụ: NotAfter = "9/23/2014 10:31 AM"

Mẹo: NotBefore và NotAfter chỉ dành cho RequestType = cert. Việc phân tích ngày tháng sẽ cố gắng để được thực hiện ở các khu vực cục bộ. Sử dụng tên tháng sẽ phân biệt và hoạt động trong mọi khu vực cục bộ.

14. PrivateKeyArchive

Định nghĩa: Cài đặt PrivateKeyArchive chỉ hoạt động nếu RequestType tương ứng được đặt thành "CMC", vì chỉ có các Certificate Management Messages over CMS (Thông báo quản lý chứng chỉ qua định dạng yêu cầu CMS), viết tắt là CMC, mới cho phép chuyển private key của người yêu cầu sang CA để lưu trữ key.

Giá trị: true, false

Ví dụ: PrivateKeyArchive = True

15. EncryptionAlgorithm

Định nghĩa: Thuật toán mã hóa được sử dụng.

Giá trị: Các tùy chọn có thể khác nhau, tùy thuộc vào phiên bản hệ điều hành và tập hợp mà các nhà cung cấp đã cài đặt. Để xem danh sách các thuật toán có sẵn, hãy chạy lệnh:

certutil -oid 2 | findstr pwszCNGAlgid

CSP được chỉ định sử dụng cũng phải hỗ trợ thuật toán và độ dài mã hóa tương ứng được chỉ định.

Ví dụ: EncryptionAlgorithm = 3des

16. EncryptionLength

Định nghĩa: Độ dài của thuật toán mã hóa được sử dụng.

Giá trị: Bất kỳ độ dài nào được cho phép bởi thuật toán mã hóa được chỉ định.

Ví dụ: EncryptionLength = 128

17. ProviderName

Định nghĩa: Tên nhà cung cấp là tên hiển thị của CSP.

Giá trị: Nếu bạn không biết tên nhà cung cấp của CSP bạn đang sử dụng, hãy chạy certutil –csplist từ một dòng lệnh. Lệnh sẽ hiển thị tên của tất cả các CSP có sẵn trên hệ thống cục bộ.

Ví dụ:

ProviderName = "Microsoft RSA SChannel Cryptographic Provider"

18. ProviderType

Định nghĩa: Loại nhà cung cấp được sử dụng để chọn các nhà cung cấp cụ thể dựa trên khả năng của thuật toán cụ thể như "RSA Full".

Giá trị: Nếu bạn không biết loại nhà cung cấp của CSP bạn đang sử dụng, hãy chạy certutil –csplist từ một dòng lệnh. Lệnh sẽ hiển thị loại nhà cung cấp của tất cả các CSP có sẵn trên hệ thống cục bộ.

Ví dụ: ProviderType = 1

19. RenewalCert

Định nghĩa: Nếu bạn cần gia hạn chứng chỉ tồn tại trên hệ thống, nơi yêu cầu chứng chỉ được tạo, bạn phải chỉ định giá trị hash của nó làm giá trị cho key này.

Giá trị: Giá trị hash của bất kỳ chứng chỉ nào có sẵn tại máy tính, nơi yêu cầu chứng chỉ được tạo. Nếu bạn không biết giá trị hash của chứng chỉ, hãy sử dụng Certificates MMC Snap-In và xem chứng chỉ có cần được gia hạn không. Mở thuộc tính chứng chỉ và xem thuộc tính "Thumbprint" của chứng chỉ. Việc gia hạn chứng chỉ yêu cầu định dạng PKCS#7 hoặc CMC.

Ví dụ:

RenewalCert = 4EDF274BD2919C6E9EC6A522F0F3B153E9B1582D

20. RequesterName

Lưu ý: Điều này dành cho yêu cầu đăng ký thay mặt người dùng khác. Yêu cầu cũng phải được ký bằng chứng chỉ Enrollment Agent, nếu không CA sẽ từ chối yêu cầu. Sử dụng tùy chọn -cert để chỉ định chứng chỉ Enrollment Agent.

Định nghĩa: Tên người yêu cầu có thể được chỉ định cho các yêu cầu chứng chỉ, nếu RequestType được đặt thành PKCS#7 hoặc CMC. Nếu RequestType được đặt thành PKCS#10, key này sẽ bị bỏ qua. Chỉ có thể đặt Requestername làm một phần của yêu cầu. Bạn không thể thao tác với Requestername trong một yêu cầu đang chờ xử lý.

Giá trị: Domain\User

Ví dụ:

Requestername = "Contoso\BSmith"

21. RequestType

Định nghĩa: Xác định tiêu chuẩn được sử dụng để tạo và gửi yêu cầu chứng chỉ.

Giá trị:

PKCS10 -- 1
PKCS7 -- 2
CMC -- 3
Cert -- 4

Mẹo: Tùy chọn này cho biết chứng chỉ tự ký hoặc tự cấp. Nó không tạo ra một yêu cầu, mà là một chứng chỉ mới và sau đó cài đặt chứng chỉ này. Tự ký (Self-signed) là tùy chọn mặc định. Chỉ định một chứng chỉ ký bằng cách sử dụng tùy chọn –cert để tạo chứng chỉ tự cấp, nhưng không tự ký.

Ví dụ: RequestType = CMC

22. SecurityDescriptor

Mẹo: Điều này chỉ liên quan đến các key không phải smart card theo ngữ cảnh của máy.

Định nghĩa: Chứa thông tin bảo mật liên quan đến các đối tượng bảo mật. Đối với hầu hết các đối tượng bảo mật, bạn có thể chỉ định mô tả bảo mật cho đối tượng trong hàm call tạo ra đối tượng.

Giá trị: Các chuỗi dựa trên ngôn ngữ định nghĩa mô tả bảo mật.

Ví dụ:

SecurityDescriptor = "D:P(A;;GA;;;SY)(A;;GA;;;BA)"

23. AlternateSignatureAlgorithm

Định nghĩa: Chỉ định và truy xuất giá trị Boolean, cho biết liệu thuật toán chữ ký cho mã nhận dạng đối tượng (OID) đối với yêu cầu PKCS#10 hoặc chữ ký chứng chỉ là rời rạc hay kết hợp.

Giá trị: true, false

Ví dụ:

AlternateSignatureAlgorithm = false

Mẹo: Đối với chữ ký RSA, giá trị False chỉ ra chữ ký Pkcs1 v1.5. Giá trị True chỉ ra chữ ký v2.1.

24. Silent

Định nghĩa: Theo mặc định, tùy chọn này cho phép truy cập CSP vào desktop của người dùng tương tác và yêu cầu thông tin như mã PIN smart card từ người dùng. Nếu key này được đặt thành TRUE, CSP không được tương tác với desktop và sẽ bị chặn hiển thị bất kỳ giao diện nào đến người dùng.

Giá trị: true, false

Ví dụ: Silent = true

25. SMIME

Định nghĩa: Nếu tham số này được đặt thành TRUE, thì phần mở rộng có giá trị OID 1.2.840.113549.1.9.15 sẽ được thêm vào yêu cầu. Số lượng mã OID phụ thuộc vào phiên bản hệ điều hành được cài đặt và khả năng của CSP, tức là đề cập đến các thuật toán mã hóa đối xứng có thể được sử dụng bởi các ứng dụng Secure Multipurpose Internet Mail Extensions (S/MIME) như Outlook.

Giá trị: true, false

Ví dụ: SMIME = true

26. UseExistingKeySet

Định nghĩa: Tham số này được sử dụng để xác định rằng một cặp key hiện có sẽ được sử dụng trong việc xây dựng một yêu cầu chứng chỉ. Nếu key này được đặt thành TRUE, bạn cũng phải chỉ định giá trị cho key RenewalCert hoặc KeyContainer. Bạn không được đặt key Exportable vì bạn không thể thay đổi thuộc tính của key hiện có. Trong trường hợp này, không có tài liệu key nào được tạo khi yêu cầu chứng chỉ được tạo.

Giá trị: true, false

Ví dụ: UseExistingKeySet = true

27. KeyProtection

Định nghĩa: Chỉ định một giá trị cho biết cách private key được bảo vệ trước khi sử dụng.

Giá trị:

XCN_NCRYPT_UI_NO_PROTCTION_FLAG -- 0
XCN_NCRYPT_UI_PROTECT_KEY_FLAG -- 1
XCN_NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG -- 2

Ví dụ:

KeyProtection = NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG

28. SuppressDefaults

Định nghĩa: Chỉ định giá trị Boolean cho biết liệu các phần mỏ rộng và thuộc tính mặc định có được đưa vào yêu cầu hay không. Các giá trị mặc định được biểu diễn bằng các mã định danh đối tượng (OID) của chúng.

Giá trị: true, false

Ví dụ: SuppressDefaults = true

29. FriendlyName

Định nghĩa: Tên ngắn gọn cho chứng chỉ mới.

Giá trị: Văn bản

Ví dụ: FriendlyName = "Server1"

30. ValidityPeriodUnits

Lưu ý: Điều này chỉ được sử dụng khi yêu cầu type=cert.

Định nghĩa: Chỉ định một số đơn vị sẽ được sử dụng với ValidityPeriod.

Giá trị: Số

Ví dụ: ValidityPeriodUnits = 3

31. ValidityPeriod

Lưu ý: Điều này chỉ được sử dụng khi yêu cầu type=cert.

Định nghĩa: VValidityPeriod phải là khoảng thời gian số nhiều trong tiếng Anh Mỹ.

Giá trị: Years, Months, Weeks, Days, Hours, Minutes, Seconds

Ví dụ: ValidityPeriod = Years

Phần này là tùy chọn.

Phần mở rộng OIDVí dụ
2.5.29.172.5.29.17 = "{text}"
continuecontinue = "UPN=User@Domain.com&"
continuecontinue = "EMail=User@Domain.com&"
continuecontinue = "DNS=host.domain.com&"
continuecontinue = "DirectoryName=CN=Name,DC=Domain,DC=com&"
continuecontinue = "URL=http://host.domain.com/default.html&"
continuecontinue = "IPAddress=10.0.0.1&"
continuecontinue = "RegisteredId=1.2.3.4.5&"
continuecontinue = "1.2.3.4.6.1={utf8}String&"
continuecontinue = "1.2.3.4.6.2={octet}AAECAwQFBgc=&"
continuecontinue = "1.2.3.4.6.2={octet}{hex}00 01 02 03 04 05 06 07&"
continuecontinue = "1.2.3.4.6.3={asn}BAgAAQIDBAUGBw==&"
continuecontinue = "1.2.3.4.6.3={hex}04 08 00 01 02 03 04 05 06 07"
2.5.29.372.5.29.37="{text}"
continuecontinue = "1.3.6.1.5.5.7.
continuecontinue = "1.3.6.1.5.5.7.3.1"
2.5.29.19"{text}ca=0pathlength=3"
CriticalCritical=2.5.29.19
KeySpecAT_NONE -- 0
AT_SIGNATURE -- 2
AT_KEYEXCHANGE -- 1
RequestTypePKCS10 -- 1
PKCS7 -- 2
CMC -- 3
Cert -- 4
KeyUsageCERT_DIGITAL_SIGNATURE_KEY_USAGE -- 80 (128)
CERT_NON_REPUDIATION_KEY_USAGE -- 40 (64)
CERT_KEY_ENCIPHERMENT_KEY_USAGE -- 20 (32)
CERT_DATA_ENCIPHERMENT_KEY_USAGE -- 10 (16)
CERT_KEY_AGREEMENT_KEY_USAGE -- 8
CERT_KEY_CERT_SIGN_KEY_USAGE -- 4
CERT_OFFLINE_CRL_SIGN_KEY_USAGE -- 2
CERT_CRL_SIGN_KEY_USAGE -- 2
CERT_ENCIPHER_ONLY_KEY_USAGE -- 1
CERT_DECIPHER_ONLY_KEY_USAGE -- 8000 (32768)
KeyUsagePropertyNCRYPT_ALLOW_DECRYPT_FLAG -- 1
NCRYPT_ALLOW_SIGNING_FLAG -- 2
NCRYPT_ALLOW_KEY_AGREEMENT_FLAG -- 4
NCRYPT_ALLOW_ALL_USAGES -- ffffff (16777215)
KeyProtectionNCRYPT_UI_NO_PROTECTION_FLAG -- 0
NCRYPT_UI_PROTECT_KEY_FLAG -- 1
NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG -- 2

SubjectNameFlags

(đây là template)

CT_FLAG_SUBJECT_REQUIRE_COMMON_NAME -- 40000000 (1073741824)
CT_FLAG_SUBJECT_REQUIRE_DIRECTORY_PATH -- 80000000 (2147483648)
CT_FLAG_SUBJECT_REQUIRE_DNS_AS_CN -- 10000000 (268435456)
CT_FLAG_SUBJECT_REQUIRE_EMAIL -- 20000000 (536870912)
CT_FLAG_OLD_CERT_SUPPLIES_SUBJECT_AND_ALT_NAME -- 8
CT_FLAG_SUBJECT_ALT_REQUIRE_DIRECTORY_GUID -- 1000000 (16777216)
CT_FLAG_SUBJECT_ALT_REQUIRE_DNS -- 8000000 (134217728)
CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS -- 400000 (4194304)
CT_FLAG_SUBJECT_ALT_REQUIRE_EMAIL -- 4000000 (67108864)
CT_FLAG_SUBJECT_ALT_REQUIRE_SPN -- 800000 (8388608)
CT_FLAG_SUBJECT_ALT_REQUIRE_UPN -- 2000000 (33554432)
X500NameFlagsCERT_NAME_STR_NONE -- 0
CERT_OID_NAME_STR -- 2
CERT_X500_NAME_STR -- 3
CERT_NAME_STR_SEMICOLON_FLAG -- 40000000 (1073741824)
CERT_NAME_STR_NO_PLUS_FLAG -- 20000000 (536870912)
CERT_NAME_STR_NO_QUOTING_FLAG -- 10000000 (268435456)
CERT_NAME_STR_CRLF_FLAG -- 8000000 (134217728)
CERT_NAME_STR_COMMA_FLAG -- 4000000 (67108864)
CERT_NAME_STR_REVERSE_FLAG -- 2000000 (33554432)
CERT_NAME_STR_FORWARD_FLAG -- 1000000 (16777216)
CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG -- 10000 (65536)
CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG -- 20000 (131072)
CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG -- 40000 (262144)
CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG -- 80000 (524288)
CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG -- 100000 (1048576)
CERT_NAME_STR_ENABLE_PUNYCODE_FLAG -- 200000 (2097152)

Chú thích:

SubjectNameFlags cho phép file INF xác định các trường mở rộng Subject và SubjectAltName nào sẽ được tự động điền bởi certreq dựa trên người dùng hoặc thuộc tính máy hiện tại: Tên DNS, UPN, v.v... Sử dụng chữ "template" nghĩa là SubjectNameFlags được sử dụng thay thế. Điều này cho phép một file INF duy nhất được sử dụng trong nhiều ngữ cảnh, để tạo ra các yêu cầu phù hợp với từng ngữ cảnh cụ thể.

X500NameFlags chỉ định các flag được chuyển trực tiếp đến API CertStrToName khi các key Subject INF được chuyển đổi thành ASN.1 encoded Distinguished Name.

Để yêu cầu chứng chỉ thông qua việc sử dụng certreq, hãy sử dụng các bước từ ví dụ bên dưới:

Cảnh báo

Nội dung trong phần này dựa trên các thiết lập mặc định cho Windows Server 2008 AD CS. Ví dụ, đặt độ dài key thành 2048, chọn Microsoft Software Key Storage Provider (Nhà cung cấp bộ lưu trữ key phần mềm của Microsoft) làm CSP và sử dụng Secure Hash Algorithm 1 (SHA1). Hãy đánh giá các lựa chọn này dựa trên các yêu cầu của chính sách bảo mật ở công ty bạn.

Để tạo một Policy File (.inf) và lưu ví dụ bên dưới trong Notepad dưới dạng 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

Trên máy tính mà bạn đang yêu cầu một loại chứng chỉ, hãy nhập lệnh dưới đây:

CertReq –New RequestConfig.inf CertRequest.req

Ví dụ sau đây minh họa việc triển khai cú pháp phần [Strings] cho các OID và các dữ liệu khó giải thích khác. Ví dụ cú pháp {text} mới cho phần mở rộng EKU, sử dụng danh sách các OID được phân cách bằng dấu phẩy:

[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%"

Certreq -accept

CertReq -accept [Options] [CertChainFileIn | FullResponseFileIn | CertFileIn]

Tham số –accept liên kết private key được tạo trước đó với chứng chỉ đã được phát hành và loại bỏ yêu cầu chứng chỉ đang chờ xử lý từ hệ thống yêu cầu chứng chỉ (nếu có yêu cầu phù hợp).

Bạn có thể sử dụng ví dụ này để chấp nhận chứng chỉ theo cách thủ công:

certreq -accept certnew.cer

Cảnh báo

Tham số –accept, các tùy chọn -user–machine cho biết liệu cert có được cài đặt trong ngữ cảnh của người dùng hay máy không. Nếu có yêu cầu đặc biệt trong cả hai ngữ cảnh khớp với public key đang được cài đặt, thì các tùy chọn này là không cần thiết. Nếu không có yêu cầu đặc biệt nào, thì một trong những yêu cầu này phải được chỉ định.

Certreq -policy

certreq -policy [-attrib AttributeString] [-binary] [-cert CertID] [RequestFileIn [PolicyFileIn [RequestFileOut [PKCS10FileOut]]]]
  • File cấu hình xác định các ràng buộc được áp dụng cho chứng chỉ CA khi điều khoản đủ điều kiện được định nghĩa gọi là Policy.inf.
  • Nếu bạn gõ certreq -policy mà không có bất kỳ tham số bổ sung nào, nó sẽ mở một cửa sổ hộp thoại để bạn có thể chọn file được yêu cầu (req, cmc, txt, der, cer hoặc crt). Khi bạn chọn file được yêu cầu và bấm nút Open, một cửa sổ hộp thoại khác sẽ mở ra để chọn file INF.

Bạn có thể sử dụng ví dụ này để tạo yêu cầu chứng chỉ chéo:

certreq -policy Certsrv.req Policy.inf newcertsrv.req

Certreq -sign

certreq -sign [Options] [RequestFileIn [RequestFileOut]]
  • Nếu bạn gõ certreq -ign mà không có bất kỳ tham số bổ sung nào, nó sẽ mở một cửa sổ hộp thoại để bạn có thể chọn file được yêu cầu (req, cmc, txt, der, cer hoặc crt).
  • Việc ký yêu cầu phụ đủ điều kiện có thể yêu cầu thông tin đăng nhập của Quản trị viên doanh nghiệp. Đây là phương pháp hay nhất để cấp chứng chỉ phụ đủ điều kiện.
  • Chứng chỉ sử dụng để ký yêu cầu phụ đủ điều kiện được tạo bằng template phụ đủ điều kiện. Quản trị viên doanh nghiệp sẽ phải ký yêu cầu hoặc cấp quyền người dùng cho các cá nhân sẽ ký chứng chỉ.
  • Khi bạn ký yêu cầu CMC, bạn cần phải có nhiều nhân viên ký yêu cầu này, tùy thuộc vào mức độ bảo đảm được liên kết với yêu cầu phụ đủ điều kiện.
  • Nếu CA gốc của CA phụ đủ điều kiện bạn đang cài đặt là ngoại tuyến, bạn phải có chứng chỉ CA cho CA phụ đủ điều kiện từ CA gốc ngoại tuyến. Nếu CA gốc đang trực tuyến, hãy chỉ định chứng chỉ CA cho CA phụ đủ điều kiện trong Certificate Services Installation Wizard (Trình hướng dẫn cài đặt dịch vụ chứng chỉ).

Trình tự các lệnh dưới đây sẽ cho thấy cách tạo yêu cầu chứng chỉ mới, ký tên và gửi nó:

certreq -new policyfile.inf MyRequest.req
certreq -sign MyRequest.req MyRequest_Sign.req
certreq -submit MyRequest_Sign.req MyRequest_cert.cer

Certreq -enroll

Để đăng ký chứng chỉ:

certreq –enroll [Options] TemplateName

Để gia hạn chứng chỉ hiện có:

certreq –enroll –cert CertId [Options] Renew [ReuseKeys]

Bạn chỉ có thể gia hạn chứng chỉ hợp lệ về thời gian. Chứng chỉ hết hạn không thể được gia hạn và phải được thay thế bằng chứng chỉ mới.

Dưới đây là ví dụ về việc gia hạn chứng chỉ bằng số sê-ri của nó:

certreq –enroll -machine –cert "61 2d 3c fe 00 00 00 00 00 05" Renew

Dưới đây là ví dụ về việc đăng ký một template chứng chỉ được gọi là WebServer bằng cách sử dụng dấu hoa thị (*) để chọn policy server qua U/I:

certreq -enroll –machine –policyserver * "WebServer"

Các tùy chọn

Tùy chọnMô tả
-anyForce ICertRequest::Gửi để xác định loại mã hóa.
-attrib <AttributeString>Chỉ định cặp chuỗi Name và Value, được phân tách bằng dấu hai chấm.
Các cặp chuỗi Name và Value riêng biệt với \n (ví dụ, Name1:Value1\nName2:Value2).
-binaryĐịnh dạng file đầu ra dưới dạng nhị phân thay vì base64-encoded.
-PolicyServer <PolicyServer>"ldap: <path>"
Chèn URI hoặc ID duy nhất cho máy tính đang chạy Certificate Enrollment Policy Web Service.
Để xác định rằng bạn muốn sử dụng file yêu cầu bằng cách duyệt, chỉ cần sử dụng dấu trừ (-) cho <policyserver>.
-config <ConfigString>Xử lý hoạt động bằng cách sử dụng CA được chỉ định trong chuỗi cấu hình, là CAHostName\CAName. Đối với kết nối https, hãy chỉ định URI máy chủ đăng ký. Đối với máy cục bộ lưu trữ CA, sử dụng dấu trừ (-).
-AnonymousSử dụng thông tin đăng nhập ẩn danh cho Certificate Enrollment Web Services.
-KerberosSử dụng thông tin đăng nhập Kerberos (domain) cho Certificate Enrollment Web Services.
-ClientCertificate <ClientCertId>Bạn có thể thay thế <ClientCertID> bằng thumbprint của chứng chỉ, CN, EKU, template, email, UPN và cú pháp mới name=value.
-UserName <UserName>Được sử dụng với Certificate Enrollment Web Services. Bạn có thể thay thế <UserName> bằng tên SAM hoặc tên domain\user. Tùy chọn này được sử dụng với tham số -p.
-p <Password>Được sử dụng với Certificate Enrollment Web Services. Thay thế <Password> bằng mật khẩu của người dùng thực tế. Tùy chọn này được sử dụng với tùy chọn -UserName.
-userĐịnh cấu hình ngữ cảnh người dùng cho yêu cầu chứng chỉ mới hoặc chỉ định ngữ cảnh chấp nhận chứng chỉ. Đây là ngữ cảnh mặc định, nếu không có được chỉ định trong INF hoặc template.
-machineĐịnh cấu hình yêu cầu chứng chỉ mới hoặc chỉ định bối cảnh chấp nhận chứng chỉ cho ngữ cảnh máy. Đối với các yêu cầu mới, nó phải phù hợp với key INF của MachineKeyset và ngữ cảnh template. Nếu tùy chọn này không được chỉ định và template không đặt ngữ cảnh, thì mặc định là ngữ cảnh của người dùng.
-crlBao gồm các danh sách thu hồi chứng chỉ (CRL) trong đầu ra của file PKCS#7 được chỉ định bởi CertChainFileOut hoặc file mã hóa base64 được chỉ định bởi RequestFileOut.
-rpcHướng dẫn Active Directory Certificate Services (AD CS) sử dụng kết nối máy chủ yêu cầu thủ tục từ xa, thay thế cho Distributed COM.
-AdminForceMachineSử dụng Key Service hoặc tùy chọn thay thế để gửi yêu cầu từ ngữ cảnh hệ thống cục bộ. Người dùng gọi tùy chọn này yêu cầu phải là quản trị viên cục bộ.
-RenewOnBehalfOfGửi bản gia hạn thay mặt cho chủ thể được xác định trong chứng chỉ. Tùy chọn này đặt CR_IN_ROBO khi gọi ICertRequest::Submit
-fBuộc các file hiện có bị ghi đè. Điều này cũng bỏ qua các template và policy lưu vào bộ nhớ cache.
-qSử dụng chế độ im lặng; ngăn chặn tất cả các lời nhắc tương tác.
-UnicodeGhi đầu ra Unicode khi đầu ra tiêu chuẩn được chuyển hướng hoặc dẫn đến lệnh khác, hữu ích khi được gọi từ các kịch bản lệnh Windows PowerShell).
-UnicodeTextGửi đầu ra Unicode khi ghi các khối dữ liệu mã hóa văn bản base64 vào các file.

Các định dạng

Định dạngMô tả
RequestFileInTên file đầu vào nhị phân hoặc được mã hóa Base64: Yêu cầu chứng chỉ PKCS#10, yêu cầu chứng chỉ CMS, yêu cầu gia hạn chứng chỉ PKCS#7, chứng chỉ X.509 được chứng nhận chéo hoặc yêu cầu chứng chỉ định dạng tag KeyGen.
RequestFileOutTên file đầu ra được mã hóa Base64.
CertFileOutTên file X-509 được mã hóa Base64.
PKCS10FileOutChỉ sử dụng Certreq -policy. Tên file đầu ra PKCS10 được mã hóa Base64.
CertChainFileOutTên file PKCS#7 được mã hóa Base64.
FullResponseFileOutTên file phản hồi đầy đủ được mã hóa Base64.
PolicyFileInChỉ sử dụng Certreq -policy. File INF chứa phần biểu thị bằng văn bản của các phần mở rộng được sử dụng để đáp ứng đủ điều kiện yêu cầu.

Xem thêm:

Thứ Năm, 17/09/2020 17:14
52 👨 413
0 Bình luận
Sắp xếp theo
    ❖ Kiến thức cơ bản