LoginSignup
4
6

More than 5 years have passed since last update.

Let's Encrpytで発行した証明書をPowerShellリモート接続のHTTPS接続にも使ってみる

Last updated at Posted at 2017-03-10

以前にLet's Encryptで発行した証明書をRemote Desktopの証明書にも割り当ててみるという話を書いたのですが、Let's Encrpytの証明書をPowerShellリモート接続でも使うことができたので、メモとして残しておきます。

PowerShellリモート接続とは何か?

PowerShell からリモートのサーバを操作できる機能です。

用意するもの

  • Let's Encrypt で発行した SSL/TLS 証明書のインストール(ここでは手順は説明しません)
  • 証明書のフィンガープリント

(Let's Encryptでなくとも、商用の証明書でもOKですが。)

作業手順

PowerShellリモート接続の受け側を設定する。

基本的には受け側のサーバで Enable-PSRemoting するだけです。

ただし、Amazon Web Services のインスタンスでこれを設定する場合には、これだけではうまく行きません。これについては d-hisame さんのはてなダイヤリーの下記エントリをご参照いただくと参考になります。
http://d.hatena.ne.jp/a-hisame/20131101/1383332166

私の手元には、この件の手順のログが残っていないので、後日補足しようかと考えています。

証明書のフィンガープリントを確認する

受け側の機材の PowerShell で "dir cert:\LocalMachine\My" を実行します。ここで出てきた ThumbPrint と FQDNホスト名を使います。

PS C:\Users\hoge> dir cert:\LocalMachine\My


    ディレクトリ: Microsoft.PowerShell.Security\Certificate::LocalMachine\My


Thumbprint                                Subject
----------                                -------
0123456789ABCDEF0123456789ABCDEF01234567  CN=ssl.example.com

winrm create を実行して、HTTPS のリスナを作る

winrm create をこんなふうに実行します。

winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="[サーバのFQDN]";CertificateThumbprint="[ThumbPrint]";Port="5986"}'

なお、winrm create -? で表示されるヘルプには @{ ... } がシングルクオートで囲まれておらず、そのヘルプの通りに実行すると絶対にエラーになります。

というわけで、実行例はこちら。

PS C:\Users\hoge> winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="ssl.example.com";CertificateThumbprint="0123456789ABCDEF0123456789ABCDEF01234567";Port="5986"}'

ResourceCreated
    Address = http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
    ReferenceParameters
        ResourceURI = http://schemas.microsoft.com/wbem/wsman/1/config/listener
        SelectorSet
            Selector: Address = *, Transport = HTTPS

PS C:\Users\hoge>

クライアント側から Enter-PSSession -UseSSL で接続してみる

こんなカンジでクライアント側から接続してみます。

PS C:\Users\local> Enter-PSSession -ComputerName [FQDNホスト名] -Credential [ユーザ名] -UseSSL

[ssl.example.com]: PS C:\Users\hoge\Documents> 

接続できない場合は各種パケットフィルタ(Windowsファイヤウォール、ネットワーク機器、クラウドサービスのセキュリティグループの設定など)を確認し、5986/TCP が開いていることを確かめてください。

なお、PowerShell ISE で「リモート PowerShell のタブの新規作成」では私の環境ではHTTPS接続できていません。PowerShell ISE をお使いの場合でも Enter-PSSession -UseSSL して頂く必要があるかもしれません。

しかし、そもそも HTTPS での PowerShell リモート接続は必要なのか?

最後の最後でこんなことを書くのもどうかと思いますが、HTTPS での PowerShell リモート接続の意味や目的を正しく理解することが大事です。

というのも、マイクロソフトの下記URLに掲載の記事によると「使用されているトランスポート プロトコル (HTTP または HTTPS) に関係なく、PowerShell リモート処理では、常にすべての通信が、初期認証後に、セッションごとの AES256 対称キーを使用して暗号化されます。」と書かれています。だから暗号化が目的ならば HTTPS での接続は必須ではありません。

つまり、こういうことです。

  • 接続は HTTP で行っても暗号化されている。
  • しかし HTTPS 接続することで、接続先サーバが正しいサーバであり、Man-in-the-Middleではない、安全な接続がたしかに行われていることを検証できる
4
6
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
6