在驗證證書時,如何讓 OpenVPN 使用我的 CA 的 CRL 分發點?
我有一個現有的 PKI,我正在嘗試將 OpenVPN 伺服器集成到其中。我已將CRL 分發點包含在我的鏈中的每個 CA 證書中,並將 CRL 發佈在可從我的 OpenVPN 伺服器訪問的位置。
問題是 OpenVPN 伺服器似乎完全忽略了CRL 分發點擴展,而是支持自己的
--crl-verify
選項。如果我撤銷使用者的證書並發布新的 CRL,OpenVPN 將很樂意繼續讓該客戶端連接。我不明白為什麼 OpenVPN 不閱讀這些擴展,因為它們正是為此目的而添加的。我只能想到 2 種替代方法來檢查我的 CRL:
- 我可以有一個將 CRL 複製到 OpenVPN 伺服器並使用該
--crl-verify
選項的 cronjob。但是由於我有一系列 CA,如何將所有 CRL 放入一個文件中?如果我使用的文件夾模式--crl-verify
,是不是鏈中的每個CA都有自己的序列號方案有問題?2)我試圖避免呼叫任何外部腳本,而只使用內置的東西,假設我手動做的越多,我就越有可能引入安全漏洞。我錯了嗎?編寫我自己的腳本來檢查我的 CRL 是否正確?
有什麼方法可以讓 OpenVPN 檢查證書鏈中包含的CRL 分發點,最好使用 OpenVPN 本身內置的機制?
編輯:很高興知道在客戶端是否也有任何方法可以做到這一點(即,讓客戶端檢查 OpenVPN 伺服器證書的有效性)。如果
--crl-verify
採用 URL 會簡單得多。
我相信你是正確的,OpenVPN 沒有這個功能。
至於為什麼,除了普遍認為 OpenVPN 更普遍地設置為專用 PKI的相當簡單的 easy-rsa之外,我沒有其他答案。
--crl-verify ...
對於多個 CA 的 CRL似乎不會很好。但是,如果您使用
--capath dir
而不是--ca file
配置您的 CA,則該capath
選項需要該目錄中的 CA 證書和 CRL。如果您定期將 CRL 導出到 OpenVPN 伺服器,我相信這將是一個可行的選擇。另一種選擇,我同意你應該小心它是如何實現的,那就是掛鉤腳本。
您可以將
--tls-verify cmd
鉤子與--tls-export-cert directory
環境peer_cert
變數結合使用。這將允許您的自定義腳本以及手頭的對等證書對 TLS 握手是否成功擁有最終決定權。
(有關詳細資訊,請參閱手冊中的上述配置選項。)