我想要转移到新的证书颁发机构,并允许旧客户端在重叠时间内连接 VPN。我可以不运行单独的 OpenVPN 实例来做到这一点吗?
我发现我可以拥有多个 CA 证书配置capath
选项但这样一来,服务器端仍然会收到错误:
VERIFY ERROR: depth=0, error=unable to get local issuer certificate:
似乎除了多个 CA 证书之外,我还需要支持多个服务器(颁发者)证书,因为选项extra-certs
不太适合这个。我不想使用两个不同的证书颁发机构签署一份服务器证书。
如何在 OpenVPN 中支持来自两个不同证书颁发机构的证书的客户端?
答案1
客户端验证
您可以在配置中链接到文件ca <file path>
,也可以<ca></ca>
在配置文件中直接将证书嵌入标签中。在这两种选择中,都可以有多个证书(包括 CA 证书)。
通常你有这样的结构:
-----BEGIN CERTIFICATE-----
... base64 encoded CA cert ...
-----END CERTIFICATE-----
您可以轻松获得两个 CA 证书,其中一个证书将直接跟随另一个证书:
-----BEGIN CERTIFICATE-----
... base64 encoded CA cert ...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... base64 encoded CA cert ...
-----END CERTIFICATE-----
两者均将被接受以供客户验证。
服务器验证
如果您要更改客户端的 CA,那么问题就是服务器证书怎么办。
- 服务器证书由“第三方” CA 签名
这对服务器证书没有影响,因此预计不会出现问题。
- 服务器证书和客户端证书由同一个 CA 签名
这可能有点棘手,因为服务器可能只有一个证书。一旦您切换到新的 CA,“旧”客户端将不会将其视为受信任的证书。如果您有自己的 CA,您可以进行交叉签名(至少是暂时的),并使用cert
选项(如“客户端验证”部分中的附加证书)与客户端“共享”此 CA 证书,这样他们就会将其视为受信任的证书。
如果您无法进行交叉签名或您只是不想这样做,“旧”客户端仍然可以使用自己的密钥/证书进行身份验证,但他们必须切换 CA 证书(用于证明远程端信任的证书)。由于证书可以公开共享(密钥必须保持安全),您可以发布新证书,客户端甚至可以以“不安全”的方式/无需 VPN 连接下载它。