延长 OpenVPN 证书的有效期

延长 OpenVPN 证书的有效期

我有一个 openvpn 服务器,客户端使用 ssl 证书进行身份验证。每当客户端证书过期时,都必须颁发新证书并将其发送给客户端。

我发现 openvpn 的 easyrsa 有一个更新命令,但据我所知并没有真正更新: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(证书重定位列表)撤销这段时间内无效的证书。但这不是本问题的范围...

相关内容