4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コマンドで Web サービス用の 自己署名証明書 を発行する手順

Last updated at Posted at 2024-03-31

はじめに

AD CS などの認証局を使わずに、コマンドで ルート証明書 と サーバー証明書 を作成する手順です。

テスト目的で、簡単に 自己署名証明書(いわゆる オレオレ証明書)を作成できるので、便利です。

Web サービスで利用するためには、作成した2種類の証明書をそれぞれ配備する必要があります。

  • ルート証明書 = クライアント PC に配置する
  • サーバー証明書 = IIS などの Web サーバーに配置する

証明書を作成したあとに、各ホストに配備するために、一旦 エクスポートして、ローカルコンピューター のストアにインポートするまでの一連の手順を用意してみました。

この手順で作成した証明書を使って、以下の記事で紹介している VPN (SSTP) や IIS の接続で問題なく利用できることも確認済みです。

以下の記事は、公的証明書 をバインドしていますが、自己署名証明書 でも利用できるのです。

手順

1. ルート証明書 の作成

以下のコマンドで、ルート証明書 を作成します。
Subject 欄の "SstpRootCert" は、任意の名前に変更しても大丈夫です。
NotAfterAddMonths の (24) は、証明書の有効期限を 24ヵ月後に設定しています。
ここを可変させることで、有効期限を調整できます。

あとは、PowerShell(管理者)ウィンドウを開いて、貼り付け&実行 してください。

貼り付けるコマンド

$params = @{
    Type = 'Custom'
    Subject = 'CN=SstpRootCert'
    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
$cert

実行結果
image.png

注意
上記のウィンドウは、閉じずに 次の章へ進んでください。
変数($cert)に保存された値を 次のコマンドで引き継いで利用しているためです。

2. サーバー証明書 の作成

以下のコマンドで、サーバー証明書 を作成します。
Subject 欄 と DnsName 欄 の "vpnnogu.japaneast.cloudapp.azure.com" は、任意の名前に変更してください。サーバーへ接続する際の URL などを指定してください。
NotAfterAddMonths の (24) は、証明書の有効期限を 24ヵ月後に設定しています。
ここを可変させることで、有効期限を調整できます。

貼り付けるコマンド

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

実行結果
image.png

3. 作成された証明書の確認

この作業で、作成された証明書を目視確認します。

  1. スタートボタンを右クリックして、ファイル名を指定して実行 を選択します。
    image.png
     
  2. certmgr.msc と入力して、OK を押します。
    image.png
     
  3. 下図のとおり、個人 の証明書ストア を開くと、作成された証明書を確認できます。
  • 緑色 = ルート証明書
  • 水色 = サーバー証明書

image.png

作成された証明書を、ログオン中の ユーザーのみ で利用する場合は、これで 完了 です。

サーバーの機能などで利用する場合は、ローカルコンピューター のストアに配置されている必要があるため、次章以降の手順で 証明書の場所を移動します。

4. サーバー証明書 の エクスポート

作成された証明書は、ローカルユーザーのストアに存在しているため、ローカルコンピューターのストアや、他のサーバーで利用するために、必ず 一旦 エクスポートが必要です。

  1. 作成された サーバー証明書 を右クリックして すべてのタスク から エクスポート を選択します。
    image.png
     
  2. 以下の画面では、そのまま 次へ をクリックします。
    image.png
     
  3. 以下の画面では、必ず "はい、秘密キーをエクスポートします" を選択して 次へ を押します。
    image.png
     
  4. 以下の画面では、そのまま 次へ をクリックします。
    image.png
     
  5. パスワード欄にチェックを入れて、パスワードを入力します。そのあと 次へ をクリックします。
    image.png
     
  6. "参照" ボタンを押して、任意のファイル名を指定して、② のように表示されたことを確認したら、③ "次へ" を押します。
    image.png
    ① を押した際に表示される画面
    image.png
     
  7. 以下の画面が表示されれば OK です。完了 をクリックします。
    image.png
     
  8. 以下の画面が表示されたら OK を押して終了します。
    image.png

5. サーバー証明書を ローカルコンピューター へ インポート する

前章でエクスポートしたファイルを選択して、ローカルコンピューターへインポートします。
別の Web サーバー等にインポートする場合は、エクスポートした pfx ファイルを コピーしてから コピー先のコンピューター上で実行します。

  1. pfx ファイルを右クリックして PFX のインストール を選択します。
    image.png
     
  2. 以下の画面では、必ず ローカルコンピューター を選択して 次へ をクリックします。
    image.png
     
  3. 以下の画面では、そのまま 次へ をクリックします。
    image.png
     
  4. 以下の画面では、エクスポート時に指定した パスワード を入力して 次へ をクリックします。
    image.png
     
  5. 以下の画面では、"証明書の種類に基づいて、自動的に証明書ストアを選択する" が選択されている事を確認して 次へ をクリックします。
    image.png
     
  6. 以下の画面がでれば OK です。完了 をクリックします。
    image.png
     
  7. 以下の画面が表示されたら OK を押して終了します。
    image.png

6. 結果確認

  1. スタートボタンを右クリックして、ファイル名を指定して実行 を選択します。
    image.png
     
  2. certlm.msc と入力して、OK を押します。
    image.png
     
  3. 以下の通り、信頼されたルート証明機関 の証明書ストアを開き、インポートした ルート証明書 があることを確認します。
    image.png
     
  4. 以下の通り、個人 の証明書ストアを開き、インポートした サーバー証明書 があることを確認します。
    image.png
     
  5. サーバー証明書 をダブルクリックして 証明のパス タブを開きます。下図のように ルート証明書 と サーバー証明書 が 階層構造で表示され、この証明書は問題ありません になっていることを確認します。OK を押して終了します。
    image.png

以上の作業で、テスト用に作成した 自己署名証明書を ローカルコンピュータ のストアに保存できました。

このあと、Web サービス側で Web サイトと サーバー証明書とをバインドを行うことで、サーバー証明書 が実際に機能するようになります。

7. クライアントへの配布用に ルート証明書 をエクスポートする

  1. 信頼されたルート証明機関 の証明書ストアにある ルート証明書 を右クリックして すべてのタスク から エクスポート を選択します。
    image.png
     
  2. 以下の画面では 次へ をクリックします。
    image.png
     
  3. 以下の画面では Basse 64 encoded X.509 (.CER) を選択して 次へ をクリックします。
    image.png
     
  4. "参照" ボタンを押して、任意のファイル名を指定して、② のように表示されたことを確認したら、③ "次へ" を押します。
    image.png
    ① を押した際に表示される画面
    image.png
     
  5. 以下の画面がでれば OK です。完了 をクリックします。
    image.png
     
  6. 以下の画面が表示されたら OK を押して終了します。
    image.png
     
  7. 以下の通り、エクスポートされたファイルを クライアント PC へコピーして 利用してください。
    image.png

8. クライアントへ ルート証明書 をインポートする

  1. クライアントへコピーされた ルート証明書 をダブルクリックします。
    image.png
     
  2. 以下の画面で 証明書のインストール をクリックします。
    image.png
     
  3. 保存場所ローカル コンピューター を選択して 次へ をクリックします。
    image.png
     
  4. 参照 ボタンを押したあと、信頼されたルート証明機関 を選択して、最後に 次へ をクリックします。
    image.png
     
  5. 以下の画面が表示されたら 完了 を押して終了します。
    image.png
     
  6. ファイル名を指定して実行 から、Certlm.msc を起動し、信頼されたルート証明機関 の 証明書ストア上に、ルート証明書 がインポートされたことを確認します。
    image.png

以上で、クライアントへ ルート証明書 のインポートが完了しました。

ルート証明書がインポートされた PC から、サーバー証明書 のある Web サービス へアクセスし、正常に サーバーにアクセスできることを確認してください。

参考

この記事の作成にあたっては、以下の公開情報を参考にしています。
公開情報の内容は、ルート証明書 と クライアント証明書 を作成する手順になっていますが、これを元に サーバー証明書 を作成する内容に改変していますが、違いは 以下の場所だけです。

サーバー証明書
TextExtension = @(
'2.5.29.37={text}1.3.6.1.5.5.7.3.1')

クライアント証明書
TextExtension = @(
'2.5.29.37={text}1.3.6.1.5.5.7.3.2')

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?