使用 PowerShell 針對使用者 VPN 連線產生並匯出憑證

透過使用者 VPN (點對站) 設定,可要求使用憑證進行驗證。 本文說明如何使用 Windows 10 (或更新版本),或 Windows Server 2016 (或更新版本) 中的 PowerShell 來建立自我簽署的根憑證,以及產生用戶端憑證。

用於產生憑證的 PowerShell Cmdlet 是作業系統的一部分,在其他 Windows 版本上無法運作。 主機作業系統僅用於產生憑證。 產生憑證之後,您即可上傳憑證或將其安裝在任何支援的用戶端作業系統上。

如果您沒有符合作業系統需求的電腦,您可以使用 MakeCert 來產生憑證。 使用任一種方法所產生的憑證均可安裝在任何支援的用戶端作業系統上。

建立自我簽署根憑證

您可以使用 New-SelfSignedCertificate Cmdlet 來建立自我簽署的根憑證。 如需其他的參數資訊,請參閱 New-SelfSignedCertificate

  1. 在執行 Windows 10 或更新版本,或 Windows Server 2016 的電腦上,以較高的權限開啟 Windows PowerShell 主控台。

  2. 建立自我簽署根憑證。 下列範例會建立名為 'P2SRootCert' 的自我簽署根憑證,此憑證會自動安裝在 'Certificates-Current User\Personal\Certificates' 中。 您可以開啟 certmgr.msc 或 [管理使用者憑證] 來檢視憑證。

    使用此範例之前,請先進行任何必要的修改。 'NotAfter' 參數是選擇性的。 根據預設,如果沒有此參數,憑證會在 1 年內到期。

    $params = @{
        Type = 'Custom'
        Subject = 'CN=P2SRootCert'
        KeySpec = 'Signature'
        KeyExportPolicy = 'Exportable'
        KeyUsage = 'CertSign'
        KeyUsageProperty = 'Sign'
        KeyLength = 2048
        HashAlgorithm = 'sha256'
        NotAfter = (Get-Date).AddMonths(24)
        CertStoreLocation = 'Cert:\CurrentUser\My'
    }
    $cert = New-SelfSignedCertificate @params
    
  3. 讓 PowerShell 主控台保持開啟狀態,然後繼續執行接下來的步骤以產生用戶端憑證。

產生用戶端憑證

使用點對站連線至 VNet 的每個用戶端電腦都必須安裝用戶端憑證。 您可以從自我簽署根憑證產生用戶端憑證,然後匯出及安裝用戶端憑證。 如果未安裝用戶端憑證,則驗證會失敗。

下列步驟將逐步引導您完成從自我簽署的根憑證產生用戶端憑證。 您可以從相同根憑證產生多個用戶端憑證。 當您使用下列步驟產生用戶端憑證時,用戶端憑證會自動安裝在您用來產生憑證的電腦上。 如果您想要在另一部用戶端電腦上安裝用戶端憑證,請匯出憑證。

這些範例會使用 New-SelfSignedCertificate Cmdlet 來產生用戶端憑證。

範例 1 - PowerShell 主控台工作階段仍然開啟

如果您在建立自我簽署根憑證後沒有關閉 PowerShell 主控台,請使用此範例。 此範例會從上一節的內容繼續,並使用宣告的 '$cert' 變數。 如果您在建立自我簽署根憑證之後關閉 PowerShell 主控台,或是在新的 PowerShell 主控台工作階段中建立其他用戶端憑證,請使用範例 2 中的步驟。

修改並執行範例以產生用戶端憑證。 如果您執行下列範例,但未加以修改,結果會是名為 'P2SChildCert' 的用戶端憑證。 如果您要將子憑證命名為其他名稱,請修改 CN 值。 執行這個範例時,請勿變更 TextExtension。 您產生的用戶端憑證會自動安裝在您電腦的 'Certificates - Current User\Personal\Certificates' 中。


   $params = @{
       Type = 'Custom'
       Subject = 'CN=P2SChildCert'
       DnsName = 'P2SChildCert'
       KeySpec = 'Signature'
       KeyExportPolicy = 'Exportable'
       KeyLength = 2048
       HashAlgorithm = 'sha256'
       NotAfter = (Get-Date).AddMonths(18)
       CertStoreLocation = 'Cert:\CurrentUser\My'
       Signer = $cert
       TextExtension = @(
        '2.5.29.37={text}1.3.6.1.5.5.7.3.2')
   }
   New-SelfSignedCertificate @params

範例 2 - 新增 PowerShell 主控台工作階段

如果您要建立其他用戶端憑證,或者不是使用您用來建立自我簽署根憑證的相同 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' 中。

    $params = @{
        Type = 'Custom'
        Subject = 'CN=P2SChildCert'
        DnsName = 'P2SChildCert1'
        KeySpec = 'Signature'
        KeyExportPolicy = 'Exportable'
        KeyLength = 2048
        HashAlgorithm = 'sha256'
        NotAfter = (Get-Date).AddMonths(18)
        CertStoreLocation = 'Cert:\CurrentUser\My'
        Signer = $cert
        TextExtension = @(
         '2.5.29.37={text}1.3.6.1.5.5.7.3.2')
    }
    New-SelfSignedCertificate @params
    

匯出根憑證公開金鑰 (.cer)

建立自我簽署根憑證之後,請匯出根憑證公開金鑰 .cer 檔案 (不是私密金鑰)。 您稍後會將檔案中包含的必要憑證資料上傳至 Azure。 下列步驟協助您匯出自我簽署根憑證的 .cer 檔案,並擷取必要的憑證資料。

  1. 若要取得憑證 .cer 檔案,請開啟 [管理使用者憑證]。

    找出自我簽署的根憑證,通常位於 [憑證 - 目前的使用者\個人\憑證] 中,然後按一下滑鼠右鍵。 按一下 [所有工作] -> [匯出]。 這會開啟 [憑證匯出精靈]

    如果您在 [目前的使用者\個人\憑證] 下找不到憑證,有可能是意外開啟 [憑證 - 本機電腦],而非 [憑證 - 目前使用者]。

    螢幕擷取畫面顯示 [憑證] 視窗,已依序選取 [所有工作] 及 [匯出]。

  2. 在精靈中,按 [下一步]

  3. 選取 [否,不要匯出私密金鑰],然後按 [下一步]

    螢幕擷取畫面顯示不要匯出私密金鑰。

  4. 在 [匯出檔案格式] 頁面上,選取 [Base-64 編碼 X.509 (.CER)],然後按 [下一步]

    螢幕擷取畫面顯示匯出 Base-64 編碼。

  5. 針對 [要匯出的檔案],[瀏覽] 至您要匯出憑證的位置。 針對 [檔案名稱] ,請為憑證檔案命名。 然後按 [下一步] 。

  6. 按一下 [完成] 匯出憑證。

  7. 您會看到「匯出成功」的確認訊息。

  8. 前往憑證匯出的位置,並使用文字編輯器開啟憑證,例如記事本。 如果您以必要的 Base-64 編碼 X.509 (.CER) 格式匯出憑證,則會看到類似下列範例的文字。 以藍色醒目提示的區段包含您複製並上傳至 Azure 的資訊。

    螢幕擷取畫面顯示記事本中開啟 CER 檔案,並醒目提示憑證資料。

    如果您的檔案看起來不像範例,這通常表示您未使用 Base-64 編碼 X.509 (.CER) 格式匯出檔案。 此外,如果您使用記事本以外的文字編輯器,則要知道某些編輯器可能在幕後引進非預期的格式。 這可能會在此憑證中的文字上傳至 Azure 時產生問題。

匯出自我簽署根憑證和私密金鑰來儲存它 (選擇性)

您可能想要匯出自我簽署的根憑證,並將它安全地儲存作為備份。 如有需要,您可以稍後在另一部電腦上安裝這個自我簽署憑證,然後產生更多用戶端憑證。 若要將自我簽署的根憑證匯出為 .pfx,請選取根憑證,然後使用與匯出用戶端憑證所述的相同步驟來匯出。

匯出用戶端憑證

當您產生用戶端憑證時,它會自動安裝於您用來產生它的電腦上。 如果您要在另一部用戶端電腦上安裝用戶端憑證,則必須先匯出用戶端憑證。

  1. 若要匯出用戶端憑證,請開啟 [管理使用者憑證]。 根據預設,您產生的用戶端憑證位於 'Certificates - Current User\Personal\Certificates'。 在您想要匯出的用戶端憑證上按一下滑鼠右鍵,然後依序按一下 [所有工作]、[匯出],以開啟 [憑證匯出精靈]。

    螢幕擷取畫面顯示 [憑證] 視窗,已選取 [所有工作] 和 [匯出]。

  2. 在 [憑證匯出精靈] 中,按 [下一步] 繼續作業。

  3. 選取 [是,匯出私密金鑰],然後按 [下一步]

    螢幕擷取畫面顯示已選取 [是,匯出私密金鑰]。

  4. 在 [匯出檔案格式] 頁面上,保留選取預設值。 務必選取 [如果可能的話,包含憑證路徑中的所有憑證]。 此設定會額外匯出成功的用戶端驗證所需的根憑證資訊。 若缺少這項資訊,用戶端驗證即會因為用戶端沒有信任的根憑證而失敗。 然後按 [下一步] 。

    匯出檔案格式頁面的螢幕擷取畫面。

  5. 在 [安全性] 頁面上,您必須保護私密金鑰。 如果您選取要使用密碼,請務必記錄或牢記您為此憑證設定的密碼。 然後按 [下一步] 。

    螢幕擷取畫面顯示輸入並確認密碼。

  6. 在 [要匯出的檔案] 中,[瀏覽] 到您要匯出憑證的位置。 針對 [檔案名稱] ,請為憑證檔案命名。 然後按 [下一步] 。

  7. 按一下 [完成] 匯出憑證。

安裝匯出的用戶端憑證

透過 P2S 連線連接的每個用戶端都需要以本機方式安裝用戶端憑證。 如需安裝憑證的步驟,請參閱安裝用戶端憑證

下一步

繼續進行使用者 VPN 連線的虛擬 WAN 步驟