Windowsで自己署名証明書を作成方法。有効期間を1年以上(5年や10年)で

最終更新日付: 2020年10月3日

推奨されるものではないですが、一年以上の長期有効期限の自己署名証明書(通称オレオレ証明書)を

  • RDS(リモートデスクトップサービス)や
  • IISのhttps Webサイトで

使用したくなることがります。
LinuxではOpenSSLがあったり、昔のWindowsではselfssl.exeコマンド(IISリソースキット付属)がありましたが、今どきのWindowsでは自己署名証明書を作成する方法はないのでしょうか?

【結論】PowerShellコマンドのNew-SelfSignedCertificateで長期有効期間の自己証明書(オレオレ証明書)を作成できる!

PowerShellに、自己署名証明書(self Signed Certificate)を作成するコマンドがあるんですね!
なので、selfsslコマンドは不要になり、無くなってしまったんですね。

環境・前提条件

今回の記事では

  • Windows Server 2016

の環境で確認しました。
Windows Server 2016のRDS(RD接続ブローカー)へ自己署名証明書を既存の証明書として証明書ストアに追加するためにテスト作成しました。

例えば、有効期限5年のオレオレ証明書を作成してみる

上記で実行したコマンド例を以下に記載します。

New-SelfSignedCertificate -Subject "sub.putise.com" -DnsName "dns.putise.com" -CertStoreLocation "cert:\LocalMachine\My" -KeyAlgorithm RSA -KeyLength 2048 -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(5)

※ 今回は試しに、サブジェクトをsub.putise.com、DNS名をdns.putise.comとしましたが、RDSではサブジェクトまたはDNS名(サブジェクト代替名)にリモートデスクトップ接続時にクライアント側から指定されるFQDN(接続ブローカー名)を指定する必要がある。つまり、サブジェクトとDNS名の両方に接続ブローカーFQDN名を指定すれば良い。

上記コマンドで発行した証明書を確認するには、「Certlm.msc」コマンドを実行し

「証明書 - ローカルコンピュータ」-「個人」-「証明書」内を確認すると、
先ほど作成した長期有効期間の証明書があり確認ができます。

確かに有効期間が5年に延長されていることと
サブジェクト、サブジェクト代替名が設定されていることが確認出来ます。

作成した長期有効期間のオレオレ証明書をエクスポートしてみる。

作成した自己署名証明書を右クリックし、「すべてのタスク」から「エクスポート」します。
以下のように証明書と一緒に秘密キーも出力したpfxファイルを作成します。

※ このエクスポートされたPFXファイルを
今回の目的であるRDSへ取り込めば、RDSのオレオレ証明書による長期有効期限化が実現出来ます。
(IISの場合は、IISの「サーバー証明書」にインポートしてください)

参考:別のオレオレ証明書作成方法、IISマネージャー利用(GUI)

こちらの方法では有効期間の延長方法は実現出来るか不明ですが・・・
オレオレ証明書を作成する別の方法(GUI)もありましたので参考までに紹介します。
こちらの方法はIISマネージャーを利用し、オレオレ証明書を作成します。

以下のように「サーバー証明書」をクリックします。

「自己署名入り証明書の作成」リンクを押します。

証明書のフレンドリ名を記載し、新しい証明書を保存する証明書ストアを指定します。

こちらの作成方法で作成した自己署名証明書は、有効期間を延長できないだけでなく1年です。
サブジェクト名の変更もできず、つけれるのはフレンドリ名だけですね。

なので、実際に証明書を使用するホストで証明書の作成が必須となってきます。

やはり、オレオレ証明書作成方法としては、New-SelfSignedCertificateコマンドの方が融通が利きますね!

Windowsで自己署名証明書を作成方法。有効期間を1年以上(5年や10年)で」への2件のフィードバック

  1. せいじ

    初めまして。
    この度自己署名証明書を作成する必要が出てきたのですが、以下について教えていただけないでしょうか?

    >クライアント側から指定されるFQDN(接続ブローカー名)を指定する必要がある。つまり、サブジェクトとDNS名の両方に接続ブローカーFQDN名を指定すれば良い。

    接続ブローカーFQDNがどういったものか調べても理解できずにいるのですが、
    ADサーバのFQDNを指定すれば良いのでしょうか?それとも、証明書を作成しているサーバ(IIS)を指定するのでしょうか?

    返信
    1. putise 投稿作成者

      >せいじさん

      こちらは自己証明書ではなく、RDS特有の話になってしまいます。
      RDSではクライアントからの通信の流れとしましては、
      ・Webアクセスサーバーにhttps接続した後に
      ・接続ブローカーサーバーにRDP接続します。
      このRDP接続にも証明書が使用されていますので、この部分を自己証明書としたいケースです。
      その場合、クライアントが接続ブローカーに接続するためのFQDN(接続ブローカーの名前)を使って自己証明書を作る必要がある、という話です。

      返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です