
我已從第三方憑證授權單位取得 SSL 憑證。這是一個.cer
文件。證書已安裝並在 IIS7 中正常運作。
該憑證將其預期用途顯示為伺服器身份驗證、用戶端身份驗證。
該網站需要透過客戶端憑證進行身份驗證。是不是使用客戶端憑證映射,但只是使用客戶端憑證作為身份驗證的一種措施——如果您有一個,那麼您就已經通過了身份驗證。
- 如何建立客戶端憑證?
- CA 是否必須這樣做並涉及另一個 CSR?
- 我可以用其他工具自己做這件事嗎? (OpenSSL 或其他)
- 客戶端憑證需要什麼格式?
答案1
IIS(或大多數 HTTPD)中的用戶端憑證驗證有些複雜。您必須將使用者對應到憑證。憑證本身可以由伺服器信任的任何 CA 頒發;你可以設定 AD CS 實例頒發證書,甚至使用本地副本開放式SSL如果您願意,可以建立證書。
有一篇文章是關於IIS.net描述客戶端憑證映射;包含有關啟用它以及以程式設計方式將憑證與使用者關聯的資訊。
編輯:
使用 OpenSSL 頒發客戶端憑證的超短版本。
openssl genrsa -des3 -out my_ca.key 4096
openssl req -new -key my_ca.key -out my_ca.csr
openssl x509 -req -days 365 -in my_ca.csr -signkey my_ca.key -out my_ca.crt
您現在擁有 CA 憑證和金鑰。- 對於您將產生的每個用戶端證書,您都需要一個證書簽署請求。如果需要,您可以為每個使用者使用相同的證書,但這不是一個特別好的主意,而且您肯定還應該需要某種其他形式的身份驗證(例如密碼)。客戶端可以自行產生 CSR,或再次使用 openssl 產生 CSR(請注意,每個 CSR 首先需要一個私鑰):
openssl genrsa -des3 -out client1.key 1024
openssl req -new -key client1.key -out client1.csr
編輯 openssl.cnf 檔案並填寫相關的 CA 部分。他們是:
[ ca ] default_ca = CA_default # The default ca section [ CA_default ] dir = ./ # top dir database = $dir/my_ca.index # index file. new_certs_dir = $dir/newcerts # new certs dir certificate = $dir/my_ca.crt # The CA cert serial = $dir/my_ca.srl # serial no file private_key = $dir/my_ca.key # CA private key RANDFILE = $dir/rand # random number file default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # md to use policy = policy_any # default policy email_in_dn = no # Don't add the email into cert DN name_opt = ca_default # Subject name display option cert_opt = ca_default # Certificate display option copy_extensions = none # Don't copy extensions from request [ policy_any ] countryName = supplied stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
使用 CA 憑證簽署金鑰
openssl ca -in client1.csr -out client1.crt
- 如果您為用戶端建立了金鑰和 CSR,則需要匯出它們。將證書對匯出到 PKCS12 文件,以便客戶端可以匯入它。
openssl pkcs12 -export -in client1.crt -inkey client1.key -out client1.p12
- 如果您完成了#7,請將您建立的 PKCS12 檔案傳送給客戶端;否則向他們發送#6 的憑證。
請注意,這是頒發簽名證書的糟糕方法,因為它只是授予 CSR 指定的任何類型的證書。一定要注意你正在做的事情。如果您要頒發大量證書,則需要投入一些時間進行更安全的設定。