PowerShell を使用したポイント対サイトの証明書の生成とエクスポート

ポイント対サイト接続では、認証に証明書を使用します。 この記事では、Windows 10 以降または Windows Server 2016 (またはそれ以降) で PowerShell を使用した、自己署名ルート証明書の作成方法とクライアント証明書の生成方法について説明します。

証明書の生成に使用する PowerShell コマンドレットは、オペレーティング システムの一部であり、その他のバージョンの Windows では機能しません。 ホスト オペレーティング システムは、証明書の生成にのみ使用されます。 証明書が生成されたら、それらをアップロードしたり、サポートされる任意のクライアント オペレーティング システムにインストールしたりできます。

オペレーティング システムの要件を満たすコンピューターがない場合は、MakeCert を使用して証明書を生成できます。 どちらの方法で生成した証明書も、サポートされている任意のクライアント オペレーティング システムにインストールできます。

自己署名ルート証明書の作成

New-SelfSignedCertificate コマンドレットを使用して、自己署名ルート証明書を作成します。 追加のパラメーターについては、「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 コマンドレットを使用して、クライアント証明書を生成しています。

例 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. コンピューターにインストールされている自己署名ルート証明書を特定します。 次のコマンドレットは、コンピューターにインストールされている証明書の一覧を返します。

    Get-ChildItem -Path "Cert:\CurrentUser\My"
    
  2. 返された一覧でサブジェクト名を探し、その横にある拇印をテキスト ファイルにコピーします。 次の例では、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 ファイルを取得するには、[ユーザー証明書の管理] を開きます。

    自己署名ルート証明書を探して右クリックします (通常は "Certificates - Current User\Personal\Certificates" にあります)。 [すべてのタスク] ->[エクスポート] の順にクリックします。 証明書のエクスポート ウィザードが開きます。

    "Current User\Personal\Certificates" に証明書が見つからない場合は、誤って "Certificates - Current User" ではなく "Certificates - Local Computer" を開いている可能性があります。

    [証明書] ウィンドウを示すスクリーンショット。[すべてのタスク] の [エクスポート] が選択されています。

  2. ウィザードで [次へ] をクリックします。

  3. [いいえ、秘密キーをエクスポートしません] を選択して、 [次へ] をクリックします。

    [秘密キーをエクスポートしません] を示すスクリーンショット。

  4. [エクスポート ファイルの形式] ページで [Base-64 encoded 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 接続で VNet に接続するすべてのクライアントは、ローカルにクライアント証明書がインストールされている必要があります。 クライアント証明書をインストールするには、ポイント対サイト接続用のクライアント証明書のインストールに関するページを参照してください。

次のステップ

引き続きポイント対サイト構成を使用します。