![是否可以將根憑證的使用限制在某個網域中](https://rvso.com/image/652668/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%B0%87%E6%A0%B9%E6%86%91%E8%AD%89%E7%9A%84%E4%BD%BF%E7%94%A8%E9%99%90%E5%88%B6%E5%9C%A8%E6%9F%90%E5%80%8B%E7%B6%B2%E5%9F%9F%E4%B8%AD.png)
我的客戶使用自簽名憑證來使應用程式正常運作。為了能夠工作,我必須安裝他們用來簽署憑證的根憑證。
是否可以設定根證書,使其僅針對一個網域進行驗證?
答案1
根據經驗:
不,信任客戶的 CA 憑證意味著信任該 CA 簽署的每個憑證。
我不知道有哪個應用程式/庫有一個簡單的選項,允許您作為最終用戶選擇僅針對某些(子)網域(即僅針對*)信任您的客戶或任何其他 CA 憑證。 .example.org 沒有其他。
Mozilla 對目前受信任的政府資助的 CA 也有類似的擔憂開放注意點例如鉻合金內建了用於訪問 Google 網站的額外檢查,這就是為什麼流氓 *.google.com 證書和 Diginotar CA 的洩露如何被公開的原因。
但即使您不信任該 CA,您仍然可以匯入/信任該 CA 簽署的特定伺服器證書,這將防止對該證書中的主機名稱發出 SSL 警告。這應該會使您的應用程式正常運行,不會出現錯誤或投訴。
例外情況:
X.509v3 PKI 標準中一個未被充分利用的選項是名稱限制擴展名,它允許 CA 憑證包含其有權為其頒發憑證的網域模式的白名單和黑名單。
您可能很幸運,您的客戶在設定其 PKI 基礎設施並將該名稱約束包含在其 CA 憑證中時已經約束了自己。然後你可以直接匯入他們的CA證書,並且知道它只能驗證有限範圍的網域。
答案2
@CryptoGuy 在這裡有一個很好的答案,但我想擴展它。
轉述一下:
您可以限制第 3 方 CA 信任頒發給您想要的名單的憑證(來自該 CA)。即使第 3 方 CA 沒有名稱約束擴展,也可以透過交叉認證使用您自己的內部 CA 伺服器來套用它們。訣竅是您使用內部 CA 簽署第 3 方 CA。
葉 SSL 憑證 -> 交叉憑證 -> 您的 CA 憑證 -> 您的內部根憑證。
以下是如何實現這一點(使用 OpenSSL 命令列 CA)
創建一個簡單的CA
openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"
要么創建一個中間 CA...
建立帶有名稱約束的中間 CA 請求。
openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg
文件中包含以下內容ossl_domain_com.cfg
:
[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca
[ req_distinguished_name ]
CN=somedomain.com trust CA
[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com
然後,使用您的 CA 簽署該中間域 CA。
openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg
…或使用您的根 CA 重新簽名
如果您跳過了建立中間體,請使用您的根 CA 進行簽名。使用原始網域的憑證在您的授權下重新簽署。您可以在此處新增 CA 擴充功能。
openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt
您可能需要使用它openssl x509 -x509toreq
來建立一個請求,您可以按照與上述中間過程完全相同的方式對該請求進行簽署。
現在,將根 CA、中間 CA 和跨域 CA 新增至瀏覽器的信任資料庫。