記錄

記錄

我正在為一些 IoT 設備運行 OpenVPN 伺服器,其中許多設備需要更換證書,因為舊證書已過期。更新這些憑證是一個脆弱的手動過程,使用緩慢的行動連接,而且這些裝置只能使用 OVPN 存取。因此,我想額外確保憑證已成功替換,並使用這些憑證建立新連線。問題是我無法找到一種簡單的方法來從 OVPN 獲取足夠的詳細信息,例如查看替換證書的序號或頒發時間。

那麼,如何記錄 OpenVPN 中每個連線的憑證詳細資訊?

最好是在狀態日誌中新增一些附加列,但即使如此--狀態版本2似乎沒有提供證書的任何其他詳細資訊。新舊證書之間的證書通用名稱等內容是相同的。是否支援基於內部可用資料的其他自訂列?

我另外將日誌等級增加到 9,但除了記錄大量與資料包相關的低階內容之外,我也沒有看到客戶端的任何其他憑證詳細資訊。不過,根據日誌等級的不同,事情可能很容易被遺漏,因此無論如何,只記錄這些證書詳細資訊本身的內容將是首選。

--client-connect諸如和 之類的概念--learn-address似乎也僅提供通用名稱。此外,由於事情只是暫時的,我想避免為這種情況實現一些過於定制的軟體。

謝謝!

答案1

我的問題實際上包含兩個部分:如何記錄感興趣的內容以及如何實現確保不再使用舊憑證的目標。所以答案也不同。

記錄

雖然我沒有找到一個簡單的配置來記錄證書序號等其他詳細信息,但可以在以下幫助下自訂實現--tls-驗證。這需要一個腳本,並為該腳本 OVPN 設定多個環境變量,例如包含某些憑證的序號。

–tls-驗證cmd執行指令 cmd 以驗證掛起的 TLS 連線的 X509 名稱,該連線已通過所有其他認證測試(透過 –crl-verify 指令進行撤銷除外;撤銷測試在 –tls-verifytest 之後發生)。

支援的環境變數:

tls_id_{n}
tls_serial_{n}
tls_serial_hex_{n}

雖然不是嚴格的日誌記錄,--tls-export-cert但也可能很有趣,因為它使某些客戶端的整個憑證可以在伺服器上用於理論上的詳細分析。

–tls-export-cert 目錄儲存用戶端連接到此目錄時使用的憑證。這將在呼叫 –tls-verify 之前完成。憑證將使用臨時名稱,並在 tls-verify 腳本返回時被刪除。用於憑證的檔案名稱可透過peer_cert 環境變數取得。

拒絕無效證書

我的最終目標是確保按預期使用替換的憑證。這樣做的一種方法是使用證書吊銷列表,OVPN 支援一種非常簡單的方法:不需要任何特定的文件格式或證書等,但可以簡單地將一些文件名添加到某些配置的目錄和所有證書中包含與某些檔案名稱對應的序號的內容將被封鎖。最重要的是要記住,檔案名稱必須是十進位書寫的憑證序號,其他一切都很簡單。

–crl-驗證 crl ['dir']根據PEM 格式的檔案crl 檢查對等憑證。 ,內容為從來沒有讀過)。如果用戶端請求連接,其中用戶端憑證序號(十進位字串)是目錄中存在的檔案的名稱,則會被拒絕。

server.conf僅包含以下附加配置:

crl-verify 'crl' 'dir'

它映射到以下目錄:

crl
    7
    8
    9
crl_staging
    12
    13
    14
openvpn-status.log
server.conf

crl和中的檔案crl_staging只是十進位憑證序號,可以根據需要在目錄之間移動。如果 中的序號可用crl,則連線被阻止,否則連線成功。日誌中的錯誤訊息範例如下所示:

ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS: new session incoming connection from [AF_INET]34.252.35.124:35231 (via [AF_INET][...]%eth1)
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 VERIFY OK: depth=1, C=DE, ST=[...], O=[...], OU=[...], CN=[...], emailAddress=[...]
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 VERIFY CRL: certificate serial number 10 is revoked
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS_ERROR: BIO read tls_read_plaintext error
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS Error: TLS object -> incoming plaintext read error
ovpn-server[15859]: 00-0a-14-81-d9-e1/34.252.35.124:35231 TLS Error: TLS handshake failed

相關內容