Locked History Actions

ノート/TLS接続

TLS 接続

このページでは、TLS 接続を有効にした xrdp をセットアップする方法について解説します。

対象バージョン

2017年12月現在、最新リリースの xrdp v0.9.5 で TLS が正式サポートされています。

インストールされている xrdp のバージョンがわからない場合は /etc/xrdp/xrdp.ini に以下のような記述があるか確認することでも、TLS 対応しているかの目安になります。

# security layer can be 'tls', 'rdp' or 'negotiate'
# for client compatible layer
security_layer=tls
# X.509 certificate and private key
# openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
certificate=
key_file=

対象環境

本ページの内容は以下の環境でテストしましたが、他の環境でもほぼ同様です。

設定方法

TLS 証明書の作成

まず最初に xrdp で使用する秘密鍵と証明書を作成する必要があります。Let's Encrypt や他の認証局に署名してもらった証明書がある場合は、それを使用することができます。 正式な証明書を使用しない場合は、自己署名証明書(オレオレ証明書)を作成して使用することになります。

詳しい作成方法は本ページでは説明しないので、以下のページなどを参照して作成してください。

とりあえずお手軽に作成したい場合は、以下のコマンドで作成することができます。

$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -sha256 -nodes -out cert.pem -days 365 -subj "/CN=$(hostname)"

上手くいくと cert.pemkey.pem という2つのファイルができます。書き込み先のディレクトリのパーミッションに応じて sudo 経由で実行するなり、適切に実行してください。

TLS 証明書の配置

前のステップで作成した cert.pemkey.pem を /etc/xrdp に置きます。正式な証明書を持っている場合は、ファイル名は必ずしもこの通りになっていなくても大丈夫ですが、秘密鍵が key.pem 証明書が cert.pem というファイル名になっている前提で説明します。

コマンド実行例:

$ sudo cp cert.pem key.pem /etc/xrdp

次に、配置した証明書の場所を xrdp.ini 内の certificate, key_file に設定します。sudoedit コマンドなどを使用して xrdp.ini を書き換えます。

$ sudoedit /etc/xrdp/xrdp.ini

差分はこんな感じです。certificate, key_file のデフォルト値はそれぞれ /etc/xrdp/cert.pem, /etc/xrdp/key.pem なので空欄にしたままでも同じなのですが、説明のために明示的に書いています。証明書と秘密鍵のファイル名が異なる場合は、実際の環境に合ったものを指定してください。また、SSLv3 を使用しない設定もここで追加しています。

--- xrdp.ini.sample     2016-12-27 09:21:37.616647000 +0900
+++ xrdp.ini.new        2016-12-27 09:27:18.484140000 +0900
@@ -23,12 +23,12 @@
 crypt_level=high
 ; X.509 certificate and private key
 ; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
-certificate=
-key_file=
+certificate=/usr/local/etc/dehydrated/certs/icepick.vmeta.jp/cert.pem
+key_file=/usr/local/etc/dehydrated/certs/icepick.vmeta.jp/privkey.pem
 ; specify whether SSLv3 should be disabled
-#disableSSLv3=true
+disableSSLv3=true
 ; set TLS cipher suites
-#tls_ciphers=HIGH
+tls_ciphers=HIGH

 ; Section name to use for automatic login if the client sends username
 ; and password. If empty, the domain name sent by the client is used.

セキュリティレイヤの設定

xrdp v0.9.5 ではデフォルトで TLS 接続が有効な設定になっていますが、もし security_layer=rdp という設定になっている場合は negotiate もしくは tls に書き換えます。

これは RDP 接続の暗号化方法の指定で、rdp を指定した場合は従来の RC4 による暗号化、tls を指定した場合は TLS による暗号化、negociate を指定した場合は、クライアントが対応している方法を自動的に判別します。

今回はより安全な接続をセットアップするため、従来の RC4 を使用せず TLS のみを使用するよう security_layer=tls としておきます。