我有一個可用的ssl客戶端驗證設置。在將請求轉發到其他應用程序時,是否有辦法獲取客戶端證書指紋並將其放入請求標頭中?根據apache客戶端驗證 - 將客戶端證書的指紋設置爲標頭值
: http://httpd.apache.org/docs/current/mod/mod_ssl.html
有沒有像:
RequestHeader set SSL_CLIENT_X_FINGERPRINT "%{SSL_CLIENT_X_FINGERPRINT}s"
任何幫助讚賞
燙髮
我有一個可用的ssl客戶端驗證設置。在將請求轉發到其他應用程序時,是否有辦法獲取客戶端證書指紋並將其放入請求標頭中?根據apache客戶端驗證 - 將客戶端證書的指紋設置爲標頭值
: http://httpd.apache.org/docs/current/mod/mod_ssl.html
有沒有像:
RequestHeader set SSL_CLIENT_X_FINGERPRINT "%{SSL_CLIENT_X_FINGERPRINT}s"
任何幫助讚賞
燙髮
你可以做的最接近的事是通過整個證書( SSL_CLIENT_CERT
),並在指紋到達應用程序後計算指紋。
取決於它的實施方式,這不應該太難。例如,如果需要,您可以實現Filter
以在Java servlet環境中執行此操作:解碼PEM編碼的證書以將其轉換爲DER格式,將獲得的byte []數組傳遞到MessageDigest
,並用您需要的算法初始化並可能對結果進行十六進制編碼)。
請注意,「指紋」是一個相當寬鬆的詞。現在大多數工具都會使用SHA-1,但這並不總是如此(這可能會改變)。作爲一個側面提示,你要做的事情表明你沒有使用傳統的PKI進行身份驗證,而是接受潛在的自簽名證書(或由未知CA簽名的證書),並將這些指紋與列表進行比較你懂。如果是這種情況,那麼您可能對所有這些「X.509證書」方面不感興趣,但是您僅將此證書用作公鑰容器(SSL/TLS將爲您保證客戶端具有匹配的私鑰),因此您可能會發現比較公鑰而不是證書更靈活。
嗨,布魯諾。感謝您的回答。你是對的。我們創建了自己的CA,並希望有些客戶端連接到我們的服務器(以及我們簽署的證書)。在握手完成之後,對於客戶端DN應該是足夠的,並將其與已知客戶端的列表進行比較。我們只希望能夠找出關於連接的客戶端,並讓apache處理ssl終止。 – Marcel
那就不同了,如果你有自己的CA,你確實可以用它作爲一個普通的PKI並直接使用Subject DN。在這種情況下,最好在Apache Httpd配置中僅接受來自您的CA的證書(或您信任的有限數量的CA)。 – Bruno