驗證來自不同頒發者的客戶端證書
好的,這是場景。一家名為“Corp”的公司向其所有員工頒發 SSL 證書以訪問 Corp 的 Web 資源。Corp 還為其證書頒發機構提供證書,以便其員工可以將其安裝為受信任的 CA。
我正在建構一個在 Corp 網路之外的工具,但我想使用所有員工已安裝的 SSL 證書在他們使用此工具時辨識他們(因為只有 Corp 員工應該能夠使用此工具)。這是在 Amazon 的 linux 發行版上安裝的 Apache 2.2 上執行的。這是我到目前為止所嘗試的:
1)我為伺服器創建並自簽名了一個 SSL 證書,用於提供 HTTPS(“privatekey.pem”和“server.crt”)
我將 Corp 的 CA 證書複製到伺服器 (corp-ca.crt)
我為 Apache 使用了以下 VirtualHost 配置:
<VirtualHost *:443> ServerName toolname.thirdparty.com DocumentRoot /var/www/html ServerAdmin admin@myemail.com ErrorLog logs/toolname-error_log CustomLog logs/toolname-access_log common <Directory "/var/www/html"> AllowOverride all </Directory> SSLEngine On SSLCertificateFile /etc/ssl/server.crt SSLCertificateKeyFile /etc/ssl/privatekey.pem SSLCACertificateFile /etc/ssl/corp-ca.crt SSLVerifyClient require SSLVerifyDepth 1 SSLOptions +StdEnvVars </VirtualHost>
當我嘗試訪問 Corp 的一個網站時,我可以從中選擇我的客戶端證書並且它可以工作,因此我知道客戶端證書已正確安裝。當我這樣做時
SSLVerifyClient optional
,頁面可以通過 HTTPS 正常載入,所以我知道我的伺服器的 SSL 設置很好。SSLVerifyClient required
但是,我得到一個說法ERR_SSL_PROTOCOL_ERROR
:“無法與伺服器建立安全連接。這可能是伺服器的問題,或者可能需要您沒有的客戶端身份驗證證書。”
所以這提出了我必須問的問題:我正在嘗試做的事情是否可能?我可以使用其他人頒發的客戶端證書在我自己的網站上驗證他們的身份嗎?如果這實際上是可能的,我將如何去做呢?
Corp 顯然持有 CA 根證書和中間證書。因此,在這種情況下,您不能將自簽名證書與 Corp 的 CA 鏈一起使用。您的證書必須由 Corp 的 Root 或中間證書使用openssl ca命令“簽名”。
因此,您必須將 CSR 發送給 Corp 的管理員,以便為您提供簽名/有效的證書,以便與您的 Apache 一起使用。
編輯:有關更多資訊,您可以使用openssl s_client命令查看您的 SSL 設置。例如:
openssl s_client -connect myextapp.com:443
您將看到用於配置 apache 的證書鏈的輸出。