简短答案

简短答案

我运行一个 OpenVPN 网关,可通过两个不同的主机名(一个来自外部,一个来自内部)访问。为此,我创建了一个带有主题备用名称字段的证书,其中包含两个主机名。证书的主题 (DN) 具有内部主机名。

当我将该证书用于 HTTPS 时,一切都按预期工作 - 该证书对任一主机名均被视为有效。

但是,使用 OpenVPN 的verify-x509-name选项,除非我指定内部名称(如 DN),否则服务器证书将被拒绝。

有没有办法让 OpenVPN 的主题名称验证以与 Web 浏览器相同的方式工作,即接受任何匹配的主题名称?

答案1

简短答案

DNS 主体备用名称,在客户端模式下,它最有用,可以像浏览器一样验证服务器证书中的名称,但不幸的是(从 2.5 版开始)不支持

长答案

从 2.5 版开始,OpenVPN 有以下三个选项用于验证远程 X.509 证书中包含的名称:

  • $subject使用以下方法验证整个 X.509 主题字段是否符合给定条件--verify-x509-name $subject subject
  • 使用和$name来验证主题的单个 RDN 组件的值是否与给定值相符--verify-x509-name $name name--x509-username-field $fieldname
  • 使用和或验证email主体备用名称或email发行者备用名称。--verify-x509-name $name name--x509-username-field ext:subjectAltName--x509-username-field ext:issuerAltName

默认--x509-username-field值为通用名称CN

验证发行者备用名称相当值得怀疑,因为该字段描述了签署远程证书的 CA 证书。

--verify-x509-name $name name-prefix如果指定了 而不是--verify-x509-name $name name,则可能只匹配前缀,而不是完整 RDN 组件或电子邮件备用名称的精确匹配。

所有选项在服务器模式下均可用,用于验证远程客户端证书中的名称,在客户端模式下也可用,用于验证远程服务器证书中的名称。这些选项在两种模式下的工作方式完全相同。然而,仅email支持备用名称并且调用该选项--x509-username-field这一事实表明,此选项主要用于在服务器端验证客户端证书。

DNS 主体备用名称,在客户端模式下,它最有用,可以像浏览器一样验证服务器证书中的名称,但不幸的是(从 2.5 版开始)不支持

还值得注意的是,备用名称字段(自 2.5 版起)仅支持OpenVPN 的 OpenSSL 后端不使用 mbedTLS

相关内容