是否可以將根憑證的使用限制在某個網域中

是否可以將根憑證的使用限制在某個網域中

我的客戶使用自簽名憑證來使應用程式正常運作。為了能夠工作,我必須安裝他們用來簽署憑證的根憑證。

是否可以設定根證書,使其僅針對一個網域進行驗證?

答案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 新增至瀏覽器的信任資料庫​​。

相關內容