
我有一個 openvpn 伺服器,客戶端使用 ssl 憑證進行驗證。每當用戶端憑證過期時,必須頒發新憑證並將其傳送給客戶端。
我發現 openvpn 的 easyrsa 有一個更新命令但 AFAIK 並沒有真正更新:Easyrsa「renew」是一個誤導性名稱 · 問題 #345 · OpenVPN/easy-rsa
所以問題是:技術上是否可以延長 ssl 憑證的有效性,無論它是否過期,以避免向客戶端使用者傳送新檔案?
答案1
這是一個非常好的問題:-)。
Technically : yes (at the end the client could use expired one to connect)
Easily : no
原則上不可能,因為 CA 簽署具有特定有效期的憑證要求,因此無法延期。您可以做什麼來建立新證書,棘手的部分可能是在頒發過程中和檢查有效性的過程中。
首先,公平地說,以下內容在技術上與一般證書相關,並且我沒有使用 openvpn 對其進行測試 - 如果它無法通過,則總體答案是否定的:-(。
在 openVPN 設定中,有 3 個與憑證相關的參數 - ca、key 和 cert。
key :資料簽章的私鑰。可用於解密由證書。
cert :公鑰(源自鑰匙)來確認密鑰簽署的資料的有效性。它可用於加密金鑰的資料。這將在安全連線協商期間提供給「另一端」。 / 這種情況適用於遠端已知有效憑證的情況,因此發送憑證可能是可選的,並且可以忽略過期的憑證/
ca :用於檢查安全連線協商時提供的憑證的有效性。
一旦客戶端憑證過期,情況就是這樣證書已經過時了。原則上金鑰不會過期,且 CA 不應過期(在這種情況下,這是完全不同的用例;-))。憑證包含有效期限,它是由 CA 以 x.509 結構簽署的「信封」的一部分。
透過產生新憑證來產生新金鑰是一種很好的做法,但沒有什麼強制執行此步驟,因此從技術上講,使用與實際過期憑證相同的金鑰建立 CSR(憑證簽署請求)不是問題。如果您有可用的舊 CSR,您可以直接將其用於新憑證。一旦此 CSR 與 CA 簽署,新憑證就會從「舊」金鑰衍生出來。
棘手的部分是您需要(其中之一):
將此新證書交付給目前使用者以取代證書
了解伺服器有關此憑證的信息,以便可以使用它來代替客戶端提供的過期憑證(這是此用例的理論部分;-))
我所知道的是,您可以將更多 CA 憑證組合在一起加州檔案連結到伺服器上的配置中沒有問題(PEM 格式)。從技術上講,“用戶”證書和“ca”證書在參數上有所不同,說明它是否可以用作 CA。因此從技術上講,您可以將 CA 憑證與新產生的憑證合併到一個文件中...
一旦該檔案就位(最有可能需要重新啟動 openvpn 伺服器),您可以嘗試建立新連線。一旦擁有金鑰的客戶端嘗試連接,伺服器可能會根據與伺服器上的客戶端憑證配對的雜湊來「識別」金鑰,並忽略客戶端提供的憑證(這必須經過測試) )。從技術上講(從證書作為技術的角度來看)它可以工作,但我沒有嘗試使用 openVPN。由於 openVPN 使用外部程式庫來處理 SSL 內容,因此它可能是可行的方法;-)。
在客戶端,需要 CA 來證明伺服器端(未過期)、用於簽署和解密通訊的金鑰(未過期),並且本地操作並不真正需要自己的證書,因此過期的證書並不是真正的問題。伺服器的憑證是在 SSL 協商期間取得的,並使用本機 CA 憑證進行檢查,因此所需的一切都可用(本機金鑰、遠端憑證)。
這種方法的缺點是,您會稍微失去 CA 作為客戶端憑證驗證的單一憑證的好處(您需要將其列在 CA 憑證旁邊的伺服器端),但另一方面,優點是可以續訂憑證.. .
如果您想嘗試,請隨時提供回饋...
祝你好運!
規劃時的另一種方法可以是頒發長有效期證書,並利用 CRL(證書重新定位清單)撤銷在此期間無效的證書。但這不是這個問題的範圍......