2014-05-22 64 views

回答

0

你可以做的最接近的事是通過整個證書( SSL_CLIENT_CERT),並在指紋到達應用程序後計算指紋。

取決於它的實施方式,這不應該太難。例如,如果需要,您可以實現Filter以在Java servlet環境中執行此操作:解碼PEM編碼的證書以將其轉換爲DER格式,將獲得的byte []數組傳遞到MessageDigest,並用您需要的算法初始化並可能對結果進行十六進制編碼)。

請注意,「指紋」是一個相當寬鬆的詞。現在大多數工具都會使用SHA-1,但這並不總是如此(這可能會改變)。作爲一個側面提示,你要做的事情表明你沒有使用傳統的PKI進行身份驗證,而是接受潛在的自簽名證書(或由未知CA簽名的證書),並將這些指紋與列表進行比較你懂。如果是這種情況,那麼您可能對所有這些「X.509證書」方面不感興趣,但是您僅將此證書用作公鑰容器(SSL/TLS將爲您保證客戶端具有匹配的私鑰),因此您可能會發現比較公鑰而不是證書更靈活。

+0

嗨,布魯諾。感謝您的回答。你是對的。我們創建了自己的CA,並希望有些客戶端連接到我們的服務器(以及我們簽署的證書)。在握手完成之後,對於客戶端DN應該是足夠的,並將其與已知客戶端的列表進行比較。我們只希望能夠找出關於連接的客戶端,並讓apache處理ssl終止。 – Marcel

+0

那就不同了,如果你有自己的CA,你確實可以用它作爲一個普通的PKI並直接使用Subject DN。在這種情況下,最好在Apache Httpd配置中僅接受來自您的CA的證書(或您信任的有限數量的CA)。 – Bruno