【Tableau Server】SSL化してみました

2020.02.13

こんにちは。データアナリティクス事業本部のまつおかです。
今回はTableau Serverとの接続をよりセキュアなものにするためにSSL(Secure Sockets Layer)の設定をしてみましたので、その手順をご紹介したいと思います。

手順と使用環境

SSL化するまでの手順

手順は以下となります。順を追って説明していきます。

1. 秘密鍵(.key)を生成
2. 秘密鍵を用いて証明書署名要求(.csr)を生成
3. 証明書署名要求を用いてサーバー証明書(.crt)を生成
4. 秘密鍵とサーバー証明書を使用して、Tableau ServerをSSL化

使用環境

今回の設定に使用した環境は以下です。

  • Tableau Server 2019.4
  • Google Chrome 80

事前準備

  • Tableau ServerのApacheディレクトリを確認
    今回の環境(Tableau Server2019.4)では以下でした。だいたいこのあたりにあるようです。

    C:\Program Files\Tableau\Tableau Server\packages\apache.20194.19.1105.1444

  • コマンドプロンプトを管理者として実行
    コマンドプロンプトを右クリック > 管理者として実行

  • 環境変数にconfigファイルを設定

    set OPENSSL_CONF = C:\Program Files\Tableau\Tableau Server\packages\apache.20194.19.1105.1444\conf\openssl.cnf

  • Tableau ServerのApacheディレクトリに移動

    cd C:\Program Files\Tableau\Tableau Server\packages\apache.20194.19.1105.1444\bin

Apacheディレクトリや、configファイルのパスはサーバーのバージョンにより異なる場合がありますのでご注意ください。
では実際にやってみましょう!

1. 秘密鍵(.key)を生成

次のコマンドを実行し秘密鍵ファイル(.key)を生成します。(ファイル名はお好きな名前で)

openssl genrsa -out tab_svr_ssl.key 4096

2. 秘密鍵を用いて証明書署名要求(.csr)を生成

上記で生成した秘密鍵(.key)を用いて、証明書の発行を認証局に請求するための証明書要求ファイル(.CSR)ファイルを生成します。
次のコマンドを実行します。(ファイル名はお好きな名前で)

openssl req -new -key tab_svr_ssl.key -out tab_svr_ssl.csr

コマンドを実行するとサーバー識別名情報の入力を求められますので、正確な情報を全て英字で入力してください。

  • Country Name:国名(ISOによる2文字の国名の符号。日本の場合は「JP」)
  • State or Province Name:都道府県名
  • Locality Name :市区町村名
  • Organizational Unit Name :組織名
  • Common Name:サーバーのFQDN
  • Email Address:メールアドレス(空白のままでもOK)
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]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

以下の2つは何も入力せずEnterキーを押します。

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

3. 証明書署名要求を用いてサーバー証明書(.crt)を生成

こちらでは自己署名証明書(通称:オレオレ証明書)の生成方法をご紹介します。
Chromeを使用する場合 SAN(Subject Alternative Names)を含んだ証明書の作成が必要となります。SANの情報が書かれたテキストファイルを使用し、証明書作成時に埋め込みます。
秘密鍵や署名要求ファイルを作成したディレクトリにテキストファイル(今回は「san.txt」としますがファイル名は何でもOK)を作成し、以下の情報を入力し保存します。ドメイン名は環境に合わせ変更してください。

subjectAltName= DNS:xxx.com

次に証明書署名要求(.csr)と秘密鍵(.key)を用いてサーバー証明書(.crt)を生成します。
次のコマンドを実行します。(ファイル名はお好きな名前で)

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

以下のコマンドで内容を確認することができます。

openssl x509 -text -in tab_svr_ssl.crt -noout

CN(Common Name)とSubject Alternative Namesが正しく設定されていることを確認してください。

4 秘密鍵とサーバー証明書を使用して、Tableau ServerをSSL化

秘密鍵ファイル(.key)とサーバー証明書ファイル(.crt)が生成できたので、Tableau ServerにSSLの設定をしていきます。

まずはブラウザでTSM(Tableau Service Manager)を開き、「CONFIGURATION」タブの「Security」>「External SSL」を選択します。

「External web server SSL」の「Enable SSL for server communication」にチェックを入れ、先程生成したサーバー証明書ファイルと秘密鍵ファイルを選択します。

「Save Pending Changes」ボタンをクリックし、ページ上部の「Pending Changes」→「Apply Changes and Restart」をクリックするとサーバーが再起動します。再起動には数分かかります。

これでサーバー側の設定は完了です。

サーバーがSSL化されたことにより、現状ではクライアントからの接続はできなくなっていますので、クライアント側にも先程生成したサーバー証明書ファイルを「信頼されたルート証明機関」としてインポートします。
最後にブラウザからサーバーにアクセスし、正常に接続できればサーバー、クライアントともに設定完了です!

さいごに

Tableau ServerのSSL化手順をご紹介しましたが、今後仕様変更等によっては同じ作成方法ではうまくいかなくなる可能性があります。今回もChromeの仕様変更の影響でSANの設定になかなか気付けず苦労しました。。。
SSLとはなんぞやから始めましたが、サーバーへアクセスする際の情報保護の重要性も再認識することができました。 参考になれば幸いでございます!