为 P2S 证书身份验证连接配置 OpenVPN Connect 3.x 客户端 - Windows

如果将点到站点 (P2S) VPN 网关配置为使用 OpenVPN 和证书身份验证,则可以使用 OpenVPN 客户端连接到虚拟网络。 本文将指导你完成配置 OpenVPN Connect 客户端 3.x 并连接到虚拟网络的步骤OpenVPN 2.x 客户端和 OpenVPN Connect 3.x 客户端之间存在一些配置差异。 本文重点介绍 OpenVPN Connect 3.x 客户端。

开始之前

在开始客户端配置步骤之前,请验证是否正在阅读正确的 VPN 客户端配置文章。 下表提供了 VPN 网关点到站点 VPN 客户端可用的配置文章。 步骤因身份验证类型、隧道类型和客户端 OS 而有所不同。

身份验证 隧道类型 客户端 OS VPN 客户端
证书
IKEv2、SSTP Windows 本机 VPN 客户端
IKEv2 macOS 本机 VPN 客户端
IKEv2 Linux strongSwan
OpenVPN Windows Azure VPN 客户端
OpenVPN 客户端版本 2.x
OpenVPN 客户端版本 3.x
OpenVPN macOS OpenVPN 客户端
OpenVPN Linux Azure VPN 客户端
OpenVPN 客户端
Microsoft Entra ID
OpenVPN Windows Azure VPN 客户端

注意

OpenVPN 客户端是独立管理的,不受 Microsoft 的控制。 这意味着 Microsoft 不会监督其代码、内部版本、路线图或法律方面。 如果客户遇到 OpenVPN 客户端的任何 bug 或问题,应直接与 OpenVPN Inc. 支持部门联系。 本文中的准则“按原样”提供,未经由 OpenVPN Inc. 验证。这些准则要辅助的目标客户已经熟悉该客户端并且希望使用该客户端连接到点到站点 VPN 设置中的 Azure VPN 网关。

先决条件

本文假定你已执行以下先决条件:

连接要求

若要使用证书身份验证通过 OpenVPN Connect 3.x 客户端连接到 Azure,每个连接客户端计算机都需要以下项:

  • 必须在每台客户端计算机上安装和配置 OpenVPN Connect 客户端软件。
  • 客户端计算机必须有本地安装的客户端证书。
  • 如果证书链包含中间证书,请首先参阅中间证书部分,以验证是否已设置 P2S VPN 网关配置来支持此证书链。 3.x 客户端的证书身份验证行为不同于以前的版本,你可以在客户端配置文件中指定中间证书。

Workflow

本文的工作流如下:

  1. 生成并安装客户端证书(如果尚未这样做)。
  2. 查看生成的 VPN 客户端配置文件包中包含的 VPN 客户端配置文件。
  3. 配置 OpenVPN Connect 客户端。
  4. 连接到 Azure。

生成并安装客户端证书

对于证书身份验证,必须在每台客户端计算机上安装客户端证书。 要使用的客户端证书必须使用私钥导出,并且必须包含证书路径中的所有证书。 此外,对于某些配置,还需要安装根证书信息。

在许多情况下,可以通过双击直接在客户端计算机上安装客户端证书。 但是,对于某些 OpenVPN 客户端配置,可能需要从客户端证书中提取信息才能完成配置。

  • 有关使用证书的信息,请参阅点到站点:生成证书
  • 要查看已安装的客户端证书,请打开“管理用户证书”。 客户端证书安装在“Current User\Personal\Certificates”中。

安装客户端证书

每个计算机需要一个客户端证书才能执行身份验证。 如果本地计算机上尚未安装客户端证书,可以使用以下步骤安装该证书:

  1. 找到客户端证书。 有关客户端证书的详细信息,请参阅安装客户端证书
  2. 安装客户端证书。 通常,可以通过双击证书文件并提供密码(如果需要)来执行此操作。

查看配置文件

VPN 客户端配置文件配置包包含特定文件夹。 文件夹中的文件包含在客户端计算机上配置 VPN 客户端配置文件所需的设置。 它们包含的文件和设置特定于 VPN 网关,以及你的 VPN 网关配置为使用的身份验证和隧道的类型。

找到并解压缩生成的 VPN 客户端配置文件配置包。 对于证书身份验证和 OpenVPN,应会看到 OpenVPN 文件夹。 如果未看到该文件夹,请验证以下项:

  • 验证 VPN 网关是否已配置为使用 OpenVPN 隧道类型。
  • 如果使用 Microsoft Entra ID 身份验证,则可能没有 OpenVPN 文件夹。 请参阅 Microsoft Entra ID 配置文章。

配置客户端

  1. 从官方 OpenVPN 网站下载并安装 OpenVPN 客户端(版本 3.x)。

  2. 找到生成并下载到计算机的 VPN 客户端配置文件配置包。 解压缩该包。 转到 OpenVPN 文件夹,使用记事本打开 vpnconfig.ovpn 配置文件。

  3. 接下来,找到创建的子证书。 如果没有该证书,请使用以下链接之一来执行导出证书的步骤。 在下一部分需要用到该证书信息。

  4. 在子证书中,从 .pfx 中提取私钥和 base64 指纹。 有多种方法可实现此操作。 其中一种方法是在计算机上使用 OpenSSL。 profileinfo.txt 文件包含 CA 和客户端证书的私钥与指纹。 请务必使用客户端证书的指纹。

    openssl pkcs12 -in "filename.pfx" -nodes -out "profileinfo.txt"
    
  5. 切换到在记事本中打开的 vpnconfig.ovpn 文件。 填充 <cert></cert> 之间的部分,并获取 $CLIENT_CERTIFICATE$ROOT_CERTIFICATE 的值,如以下示例所示。

       # P2S client certificate
       # please fill this field with a PEM formatted cert
       <cert>
       $CLIENT_CERTIFICATE
       $ROOT_CERTIFICATE
       </cert>
    
    • 在记事本中打开上一步骤的 profileinfo.txt。 可通过查看 subject= 行来识别每个证书。 例如,如果子证书称为 P2SChildCert,则客户端证书将位于 subject=CN = P2SChildCert 属性之后。
    • 对于链中的每个证书,复制文本“-----BEGIN CERTIFICATE-----”与“-----END CERTIFICATE-----”之间的文本(包括这两行)。
  6. 在记事本中打开 profileinfo.txt。 若要获取私钥,请选择并复制“-----BEGIN PRIVATE KEY-----”与“-----END PRIVATE KEY-----”之间的文本(包括这两行)。

  7. 返回到记事本中的 vpnconfig.ovpn 文件,并找到此节。 粘贴私钥,替换 <key></key> 之间的所有内容。

    # P2S client root certificate private key
    # please fill this field with a PEM formatted key
    <key>
    $PRIVATEKEY
    </key>
    
  8. 注释掉“log openvpn.log”行。 如果未注释掉,OpenVPN 客户端将报告日志不再是受支持的选项。 有关如何注释掉日志行的示例,请参阅用户配置文件示例。 注释掉日志行后,仍可以通过 OpenVPN 客户端接口访问日志。 若要访问,请单击客户端 UI 右上角的日志图标。 Azure 建议客户查看 OpenVPN 连接文档以获取日志文件位置,因为日志记录由 OpenVPN 客户端控制。

  9. 请勿更改任何其他字段。 使用客户端输入中的已填充的配置连接到 VPN。

  10. 在 OpenVPN 客户端中导入 vpnconfig.ovpn 文件。

  11. 右键单击系统托盘中的 OpenVPN 图标,然后单击“连接”。

用户配置文件示例

以下示例演示 3.x OpenVPN Connect 客户端的用户配置文件。 此示例演示注释掉日志文件和添加“ping-restart 0”选项以防止由于没有将流量发送到客户端而定期重新连接。

client
remote <vpnGatewayname>.ln.vpn.chinacloudapi.cn 443
verify-x509-name <IdGateway>.ln.vpn.chinacloudapi.cn name
remote-cert-tls server

dev tun
proto tcp
resolv-retry infinite
nobind

auth SHA256
cipher AES-256-GCM
persist-key
persist-tun

tls-timeout 30
tls-version-min 1.2
key-direction 1

#log openvpn.log
#inactive 0
ping-restart 0 
verb 3

# P2S CA root certificate
<ca>
-----BEGIN CERTIFICATE-----
……
……..
……..
……..

-----END CERTIFICATE-----
</ca>

# Pre Shared Key
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
……..
……..
……..

-----END OpenVPN Static key V1-----
</tls-auth>

# P2S client certificate
# Please fill this field with a PEM formatted client certificate
# Alternatively, configure 'cert PATH_TO_CLIENT_CERT' to use input from a PEM certificate file.
<cert>
-----BEGIN CERTIFICATE-----
……..
……..
……..
-----END CERTIFICATE-----
</cert>

# P2S client certificate private key
# Please fill this field with a PEM formatted private key of the client certificate.
# Alternatively, configure 'key PATH_TO_CLIENT_KEY' to use input from a PEM key file.
<key>
-----BEGIN PRIVATE KEY-----
……..
……..
……..
-----END PRIVATE KEY-----
</key>

中间证书

如果证书链包含中间证书,则必须将中间证书上传到 Azure VPN 网关。 无论选择从哪个 VPN 客户端进行连接,这都是使用的首选方法。 在以前的版本中,可以在用户配置文件中指定中间证书。 OpenVPN Connect 客户端版本 3.x 中不再支持此功能。

使用中间证书时,必须在上传根证书之后上传中间证书。

点到站点配置的中间证书。

重新连接

如果由于没有流量发送到客户端而导致定期重新连接,可以将“ping-restart 0”选项添加到配置文件,以防止断开连接导致重新连接。 OpenVPN Connect 文档对此进行了如下所示的描述:“--ping-restart n 类似于 --ping-exit,但在 n 秒过后触发 SIGUSR1 重启,而不接收来自远程的 ping 或其他数据包。”

有关如何添加此选项的示例,请参阅用户配置文件示例

后续步骤

继续进行任何其他服务器或连接设置。 请参阅点到站点配置步骤