開発環境の Tableau Server をSSL化する

2023.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

検証用に Tableau Server をたてることが多々あるのですが、その際に通信を暗号化する際の手順をまとめておきたく記事としました。こちらで記載する手順については、過去にも同様のエントリが投稿されていますので、あわせてご参照ください。

【Tableau Server】SSL化してみました | DevelopersIO
Tableau Serverに対するSSL設定を行う | DevelopersIO

前提条件

  • AWS 上に構成
  • Tableau Server on Windows 2022.3.5
    • 下記にインストール
      D:\Tableau\Tableau Server
  • Windows Server 2019
  • サーバー証明書への署名
    • 認証局の秘密鍵で署名を行ったものを使用するのが一般的ですが、ここでは検証用なので自身で作成した秘密鍵で署名を行うこととします。

EC2 への Tableau Server のインストール手順は、下記をご参照ください。

EC2にTableau Serverをインストールする | DevelopersIO

手順

公式ドキュメントを参照しつつ、下記の手順で行います。

  1. 秘密鍵の作成
  2. 証明書署名要求(CSR)の作成
  3. SSL証明書の作成
    ※自身の秘密鍵で署名
  4. Tableau Server の設定有効化
  5. クライアント側の設定

SSL 証明書 - キーと CSR の生成 | Tableau Server on Windows ヘルプ

以降の作業は、Tableau Server をインストールしたサーバーに、管理者でログインし作業を行うこととしています。


1.秘密鍵の作成

Tableau Server は OpenSSL が含まれる Apache から構成されています。そのため、本記事のバージョンの場合、下記にopenssl.exe が格納されています。

※Tableau Server のインストール先は追加したDドライブとしています。

D:\Tableau\Tableau Server\packages\apache.20223.23.0316.1214\bin

OpenSSL は、証明書を生成するためにマスター構成ファイル (openssl.cnf) を必要とします。また、OPENSSL_CONF環境変数を設定することで、OpenSSLが使用する設定ファイルを指定できます。

openssl-env | OpenSSL

正しい構成ファイルを使用していることを保証するために、下記のコマンドを実行し、あらかじめ参照される設定ファイルを指定しておきます。設定された環境変数は、set コマンドで確認できます。

set OPENSSL_CONF=D:\Tableau\Tableau Server\packages\apache.20223.23.0316.1214\conf\openssl.cnf

※パスについて
D: 部分は、Tableauサーバーのインストール先により異なります。
apache.20223.23.0316.1214 は、インストールした Tableau Server のバージョンにより異なる可能性があります。

openssl.exe の格納先に移動します。

d:
cd D:\Tableau\Tableau Server\packages\apache.20223.23.0316.1214\bin

※Dドライブにインストールしているので、先にd: の記述が必要。

次のコマンドで秘密鍵を生成します。

openssl.exe genrsa -out server.key 4096

なお、ドキュメントに記載があるようにビット長の値に注意します。

注: このコマンドは、キーに 4096 ビット長を使用します。短いビット長で暗号化されている通信は安全性が低いため、2048 ビット以上のビット長を選択する必要があります。値が提供されない場合は、512 ビットが使用されます。

ここでは、server.keyという名称で作成したので、コマンドで実行後、同フォルダにこの名称で秘密鍵が作成されています。


2.証明書要求(CSR)の生成

下記のコマンドで、証明書要求(CSR:Certificate Signing Request)を作成します。(server.csr という名称で作成)

openssl.exe req -new -key server.key -out server.csr

コマンドを実行すると、下記のように証明の対象を識別するための情報の入力を求められます。一般的には、認証局へ提出するための情報として入力が必要ですが、今回は自身で作成した秘密鍵でサーバー証明書に署名を行うため、Common Name以外はすべてスキップしました。

Common Name には、Tableau Server に到達するのに使用されるサーバーのFQDNとしてec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com を入力しました。

※環境変数 OPENSSL_CONF が設定されていない場合、このコマンド実行時に、No such file or directory などのエラーとなる可能性があります。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

3.SSL証明書の作成

通常であれば先の手順で作成した証明書署名要求 (server.csr)をに対して、認証局の秘密鍵で署名を行いますが、ここでは検証用に用いるのみなので、自身の秘密鍵(server.key)で署名を行います。

また、Tableau Server に Chrome 経由でアクセスしたいので、SAN(Subject Alternative Name)を加えたSSL証明書を発行します。
※Chrome 58 以降、証明書のSAN(Subject Alternative Name)に記載されているドメイン名によって検証する仕様となったため。詳細は下記をご参照ください。

SAN付きの自己証明書作成してブラウザアクセス時の自己証明書の警告を消したい | DevelopersIO

そのため、上記と同じフォルダに、下記の内容でsan.txt を作成しておき、後の手順でSAN を追加できるようにしておきます。

subjectAltName = DNS:ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com, IP:XX.XX.XX.XX

署名には、openssl x509コマンドを使用します。SAN を追加するために -extfile san.txt  を指定しています。なお、この場合、証明書の有効期限は365日となります。

openssl x509 -req -days 365 -signkey server.key < server.csr > server.crt -extfile san.txt

コマンド実行後、同フォルダに、証明書であるCRTファイル(ここでは、server.crt)が作成されます。

作成した内容は、下記のコマンドで確認できます。

openssl x509 -text -noout -in server.crt

証明書のX509v3 Subject Alternative Name:DNS:ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com, IP Address:XX.XX.XX.XX のように、san.txt に記入した内容が反映されていれば問題ないです。


4.Tableau Server の設定有効化

秘密鍵とサーバー証明書を作成したら、Tableau Server での設定を行います。

Tableau Services Manager のメニューから「構成 > セキュリティ」を開き、「外部 SSL」タブを選択します。

「サーバー通信へのSSLの有効化」にチェックを入れ、下記の通り、ファイルを選択します。

  • SSL 証明書ファイル
    • SSL証明書(server.crt
  • SSL 証明書のキー ファイル
    • 秘密鍵(server.key

ファイル選択後「保留中の変更を保存」を押下します。設定の反映には、Tableau Server の再起動が必要となります。


5.クライアント側の設定

Tableau Server をインストールしたサーバー側で作成したサーバー証明書(server.crt)をクライアントPCにインストールします。ここで、このサーバー証明書をルート認証局 (CA)が署名したものと認識させることで、このクライアントにとって、問題のない証明書とします。

※この証明書がインストールされていないクライアントからは信頼されていない証明書のままです。

server.crt をダブルクリックすると下記のウィンドウが開くので、「証明書のインストール」を押下します。

「現在のユーザー」を選択している状態で「次へ」を押下します。

「証明書ストア」で「信頼されたルート証明機関」を選択します。

次の画面で「完了」を選択します。

セキュリティ警告が表示された場合「はい」を選択します。

以上の手順で証明書のインポートは完了です。

この状態で Chromeブラウザ経由で Tableau Server にアクセスすると、警告なくアクセスできます。

同様に Tableau Desktop からもサインイン・パブリッシュ可能です。

接続できない場合

下記の可能性が考えられるので、ご確認ください。

  • Windows Server の場合
    • Windowsファイアウォールでポート 443 への通信が遮断されている
  • AWSで構築している場合
    • セキュリティグループでポート 443 へのインバウンド通信が遮断されている

さいごに

検証用の Tableau Server SSL化の手順でした。正式な証明書であっても、基本的に手順は同様です。この場合、ルート認証局が署名を行います。
こちらの内容が何かの参考になりましたら幸いです。