«前の日記(2014-10-01) 最新 次の日記(2014-10-16)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2014-10-15 TigerVNC で TLS による暗号化通信をセットアップする

TigerVNC 1.3.1 で通信が暗号化されているか確認する方法

この記事は TigerVNC 1.3.1 時点の情報を記述しています。

TigerVNC は TLS による暗号化通信に対応しているため、暗号化モードで通信すればすべてのトラフィックは暗号化されいくつかの条件付き(後述)でインターネット越しにも安全に使用することができます。

現在の VNC セッションが TLS で通信しているかどうかは F8Connection info... で接続情報を表示することで確認できます。下の画像のように Security method が TLS または x509 で始まっていれば、通信が TLS で暗号化されています。TLS/x509 に続く文字列は None / Vnc / Plain の3種類があり、合わせて以下の6種類のパターンがあります。

  • TLSNone
  • TLSAuth
  • TLSPlain
  • x509None
  • x509Auth
  • x509Plain

tigervnc-tls.png

TLS は「アノニマス TLS モード」といい、すべての通信を暗号化しますが、サーバ&クライアントの検証は行わないため中間者攻撃に対しては安全ではありません。より安全に使うには、別の手段でサーバの正当性を確認する必要があります。またこの中でも TLSNone は認証なしで接続できるモードのため、単に通信が暗号化されているだけで、誰でも接続できてしまうためあまり意味はないでしょう。

x509 は TLS による暗号化に加えて、サーバ証明書&クライアント証明書の検証を行う、TigerVNC がサポートしているうちもっとも安全なモードです。証明書で認証を行うため、HTTPS でクライアント認証を行う場合などと同等の安全性です。

TigerVNC 1.3.1 で暗号化通信を強制する方法

TigerVNC ではサーバとクライアントの両方が TLS をサポートしていれば自動的に TLS を使ったセッションが確立されますが、接続しようとしているサーバが TigerVNC でない場合、クライアントが TigerVNC を使っていても TLS が使われない場合があります。

クライアント側で暗号化をサポートしていないサーバには接続しないという設定にしたい場合は Options...SecurityEncryption から None のチェックを外します。これで暗号化をサポートしていないサーバに接続しようとした場合は接続エラーとなり、暗号化をサポートしたサーバにのみ接続できるようになります。

tigervnc-setting-tls.png

サーバ側で暗号化をサポートしていないクライアントは接続させないという設定にしたい場合は、SecurityTypes オプションを指定します。SecurityTypes は複数指定可能です。NoneVncAuth(※1) は暗号化されないモードなので、これらを含まない形で指定してやれば OK です。

$ vncserver (適当なオプション) -SecurityTypes=TLSVnc

vncserver ではなく Xvnc を直接使う場合も同様です。

$ Xvnc (適当なオプション) -SecurityTypes=TLSVnc

クライアント&サーバ証明書で認証を行う場合は、さらにオプションで証明書ファイルのパスも指定してやります。

$ vncserver (適当なオプション) -SecurityTypes=x509None -x509ca=/path/to/ca -x509crl=/path/to/crl

上記はあくまでも例なので、環境に合わせて適切にオプションを指定してください。

また、これらの設定をした場合はサーバ・クライアント共に TigerVNC でないと接続できなくなる可能性があります。 OS Xの画面共有など、他の VNC クライアントで接続する必要がある場合には注意してください。

※1 VncAuth では認証時のパスワードのみがチャレンジ&レスポンス方式で、キー入力や画面の転送は暗号化されません。