在 Windows 10 上使用 PowerShell 为点到站点连接生成并导出证书

点到站点连接使用证书进行身份验证。 本文介绍了如何在 Windows 10 上使用 PowerShell 创建自签名根证书并生成客户端证书。 如果正在寻找点到站点配置步骤(例如,如何上传根证书),请从下面的列表选择一篇关于“配置点到站点”的文章:

必须在运行 Windows 10 的计算机上执行本文中的步骤。 用于生成证书的 PowerShell cmdlet 是 Windows 10 操作系统的一部分,并且在其他版本的 Windows 上不起作用。 只需 Windows 10 计算机即可生成证书。 生成证书后,可上传证书,或在任何支持的客户端操作系统上安装该证书。

如果无权访问 Windows 10 计算机,则可使用 MakeCert 生成证书。 使用任一方法生成的证书均可安装在支持的所有客户端操作系统上。

创建自签名根证书

使用 New-SelfSignedCertificate cmdlet 创建自签名根证书。 有关参数的其他信息,请参阅 New-SelfSignedCertificate

  1. 在运行 Windows 10 的计算机上,使用提升的特权打开 Windows PowerShell 控制台。
  2. 使用以下示例创建自签名根证书。 以下示例创建名为“P2SRootCert”、自动安装在“Certificates-Current User\Personal\Certificates”中的自签名根证书。 打开 certmgr.msc 或“管理用户证书”即可查看该证书。

    $cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature `
    -Subject "CN=P2SRootCert" -KeyExportPolicy Exportable `
    -HashAlgorithm sha256 -KeyLength 2048 `
    -CertStoreLocation "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
    

导出公钥 (.cer)

点到站点连接要求将证书公钥(不是私钥).cer 文件上传到 Azure。 可借助以下步骤导出自签名根证书的 .cer 文件:

  1. 若要获取证书 .cer 文件,请打开“管理用户证书”。 找到自签名根证书(通常位于“Certificates - Current User\Personal\Certificates”中),然后右键单击。 单击“所有任务”,然后单击“导出”。 此操作将打开“证书导出向导”。
  2. 在向导中,单击“下一步”。 选择“否,不导出私钥”,然后单击“下一步”。
  3. 在“导出文件格式”页上,选择“Base-64 编码的 X.509 (.CER)”,然后单击“下一步”。
  4. 在“要导出的文件”中,“浏览”到要将证书导出的目标位置。 在“文件名”中,为证书文件命名。 然后单击“下一步”。
  5. 单击“完成”导出证书。 会看到“导出成功”。 单击“确定”关闭向导。

exported.cer 文件必须上传到 Azure。 请参阅配置点到站点连接获取相关说明。 若要添加其他受信任的根证书,请参阅文章的此部分

导出自签名根证书和用于存储它的公钥(可选)

可能想要导出自签名根证书并将它存储在安全位置。 如果需要,可以稍后在另一台计算机上安装此自签名证书,并生成更多客户端证书,或导出另一个 .cer 文件。 如果要将自签名根证书导出为 .pfx,请选择该根证书,并使用导出客户端证书中所述的步骤导出。

生成客户端证书

在使用点到站点连接连接到 VNet 的每台客户端计算机上,必须安装客户端证书。 可以从自签名根证书生成客户端证书,导出并安装该客户端证书。 如果不安装客户端证书,身份验证会失败。

以下步骤引导完成从自签名根证书生成客户端证书的过程。 可以从相同根证书生成多个客户端证书。 使用以下步骤生成客户端证书时,客户端证书自动安装在用于生成该证书的计算机上。 如果想要在另一台客户端计算机上安装客户端证书,可以导出该证书。

这些示例使用 New-SelfSignedCertificate cmdlet 生成有效期为一年的客户端证书。 有关参数的其他信息(例如为客户端证书设置其他有效期),请参阅 New-SelfSignedCertificate

示例 1

此示例使用上一部分中声明的“$cert”变量。 如果创建自签名根证书后关闭了 PowerShell 控制台,或者要在新的 PowerShell 控制台会话中创建其他客户端证书,请使用示例 2 中的步骤。

修改并运行示例以生成客户端证书。 如果在未经修改的情况下直接运行以下示例,会生成名为“P2SChildCert”的客户端证书。 如果想要为子证书指定其他名称,请修改 CN 值。 运行此示例时,请不要更改 TextExtension。 生成的客户端证书自动安装在计算机上的“Certificates - Current User\Personal\Certificates”中。

New-SelfSignedCertificate -Type Custom -KeySpec Signature `
-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
-HashAlgorithm sha256 -KeyLength 2048 `
-CertStoreLocation "Cert:\CurrentUser\My" `
-Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")

示例 2

若要创建其他客户端证书,或者不想要使用创建自签名根证书时所用的同一个 PowerShell 会话,请使用以下步骤:

  1. 识别安装在计算机上的自签名根证书。 此 cmdlet 返回计算机上安装的证书列表。

    Get-ChildItem -Path "Cert:\CurrentUser\My"
    
  2. 从返回的列表中找到使用者名称,并将该名称旁边的指纹复制到文本文件中。 以下示例显示了两个证书。 CN 名称是要从中生成子证书的自签名根证书的名称。 在本例中,该根证书为“P2SRootCert”。

    Thumbprint                                Subject
    
    AED812AD883826FF76B4D1D5A77B3C08EFA79F3F  CN=P2SChildCert4
    7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655  CN=P2SRootCert
    
  3. 使用上一步骤中获取的指纹为根证书声明变量。 将 THUMBPRINT 替换为要从中生成子证书的根证书的指纹。

    $cert = Get-ChildItem -Path "Cert:\CurrentUser\My\THUMBPRINT"
    

    例如,使用上一步骤中 P2SRootCert 的指纹,该变量将如下所示:

    $cert = Get-ChildItem -Path "Cert:\CurrentUser\My\7181AA8C1B4D34EEDB2F3D3BEC5839F3FE52D655"
    
  4. 修改并运行示例以生成客户端证书。 如果在未经修改的情况下直接运行以下示例,会生成名为“P2SChildCert”的客户端证书。 如果想要为子证书指定其他名称,请修改 CN 值。 运行此示例时,请不要更改 TextExtension。 生成的客户端证书自动安装在计算机上的“Certificates - Current User\Personal\Certificates”中。

    New-SelfSignedCertificate -Type Custom -KeySpec Signature `
    -Subject "CN=P2SChildCert" -KeyExportPolicy Exportable `
    -HashAlgorithm sha256 -KeyLength 2048 `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -Signer $cert -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
    

导出客户端证书

生成客户端证书时,该证书会自动安装在用于生成它的计算机上。 如果想要在另一台客户端计算机上安装客户端证书,需要导出生成的客户端证书。

  1. 若要导出客户端证书,请打开“管理用户证书”。 生成的客户端证书默认位于“Certificates - Current User\Personal\Certificates”中。 右键单击要导出的客户端证书,单击“所有任务”,然后单击“导出”打开“证书导出向导”。
  2. 在向导中,单击“下一步”,选择“是,导出私钥”,然后单击“下一步”。
  3. 在“导出文件格式”页上,保留选择默认值。 请务必选中“包括证书路径中的所有证书(如果可能)”。 选择此项也会导出成功身份验证所需的根证书信息。 然后单击“下一步”。
  4. 在“安全性”页上,必须保护私钥。 如果选择使用密码,请务必记下或牢记为此证书设置的密码。 然后单击“下一步”。
  5. 在“要导出的文件”中,“浏览”到要将证书导出的目标位置。 在“文件名”中,为证书文件命名。 然后单击“下一步”。
  6. 单击“完成”导出证书。

安装已导出的客户端证书

如果想要从另一台客户端计算机(而不是用于生成客户端证书的计算机)创建 P2S 连接,需要安装客户端证书。 安装客户端证书时,需要使用导出客户端证书时创建的密码。

  1. 找到 .pfx 文件并将其复制到客户端计算机。 在客户端计算机上,双击 .pfx 文件以进行安装。 将“存储位置”保留为“当前用户”,然后单击“下一步”。
  2. 在“要导入的文件”页上,不要进行任何更改。 单击“下一步”。
  3. 在“私钥保护”页上,输入证书的密码,或验证安全主体是否正确,然后单击“下一步”。
  4. 在“证书存储”页上,保留默认位置,然后单击“下一步”。
  5. 单击“完成”。 在证书安装的“安全警告”上,单击“”。 可随时单击“是”,因为证书已生成。 现已成功导入证书。

后续步骤

继续使用点到站点配置。