# コマンドおよびファイル転送サーバーにSSLを使用するようにTalend JobServerを設定する

SSLトランスポートの設定、Keystoreのセットアップ、暗号スイートの管理によって、Talend JobServerの通信チャンネルを暗号化および保護します。

## 手順

1. jobserver/agent/conf/TalendJobServer.propertiesファイルでSSLを有効にします。
   ```
   org.talend.remote.jobserver.server.TalendJobServer.USE_SSL=true
   ```
2. 引き続きjobserver/agent/conf/TalendJobServer.propertiesファイルで、サーバーのKeystoreとTruststoreの設定を指定します。
   ```
   org.talend.remote.server.ssl.keyStore=<path_to_jobserver_keystore>
   org.talend.remote.server.ssl.keyStorePassword=<jobserver_keystore_password>
   org.talend.remote.server.ssl.trustStore=<path_to_jobserver_truststore>
   org.talend.remote.server.ssl.trustStorePassword=<jobserver_truststore_password>
   org.talend.remote.server.ssl.enabled.protocols=TLSv1.2,TLSv1.3
   org.talend.remote.server.ssl.authenticate=<true or false>
   ```

   情報メモ注: KeystoreとTruststoreについて:
   * サーバーKeystoreとクライアントTruststore: サーバーKeystoreは、サーバーのプライベートキーと証明書チェーンを保持しています。クライアントがサーバーのIDを検証できるよう、クライアントのTruststoreには、サーバーの署名付き証明書(keytool -exportを使ってサーバーKeystoreからエクスポートされたもの)、またはサーバーの証明書に署名した認証局(CA)証明書が含まれている必要があります。

     実行時に、クライアントのTLS(トランスポートレイヤーセキュリティ)スタックがサーバーの証明書を信頼できるかどうかを検証します。これを行うには、中間証明書を経由し、Truststoreで既に信頼されている証明書を見つけるまでサーバーの証明書チェーンを辿ります。この検証に失敗した場合、セキュアな接続(ハンドシェイク)は中断されます。つまり、クライアントはサーバーの証明書とTrustoreのエントリーが一致したときのみ接続することになります。

     クライアント側に指定されたTrustoreがない場合、クライアントは$JAVA\_HOME/lib/security/cacertsにあるJVMのデフォルトのTruststoreを使用します。これは、クライアント側のorg.talend.remote.client.ssl.disablePeerTrustプロパティのデフォルトがfalseになっているためです。

   * サーバーTruststoreとクライアントKeystore: サーバーTruststoreは証明書ベースのクライアント認証で使用され、それによってサーバー によるクライアントKeystoreのID検証が確実になります。

     * org.talend.remote.server.ssl.authenticateプロパティがTrueに設定されている場合、Talend JobServerクライアント(Talend Administration CenterとTalend Studio)は、クライアントの証明書がTalend JobServer Truststore内のエントリーと一致する証明書チェーンを保持しているKeystoreを定義する必要があります。
     * サーバー側でorg.talend.remote.server.ssl.authenticate=falseの場合、クライアント認証は無効になり、クライアントKeystoreは何の効果も持たなくなります。
3. クライアントのKeystoreとTruststoreの設定を指定します。
   ```
   -Dorg.talend.remote.client.ssl.keyStore=<path_to_client_keystore>
   -Dorg.talend.remote.client.ssl.keyStorePassword=<client_keystore_password>
   -Dorg.talend.remote.client.ssl.trustStore=<path_to_client_truststore>
   -Dorg.talend.remote.client.ssl.trustStorePassword=<client_truststore_password>
   -Dorg.talend.remote.client.ssl.enabled.protocols=TLSv1.2,TLSv1.3
   -Dorg.talend.remote.client.ssl.disablePeerTrust=false
   ```
   * Talend Studioの場合は、studio/Talend-Studio-linux-gtk-x86\_64.iniまたはstudio/Talend-Studio-gtk-aarch64.iniでこれらのシステムプロパティを 指定することをお勧めします。

   * Talend Administration CenterでJAVA\_OPTS仕様を拡張するためには、tac/apache-tomcat/bin/setenv.shを使用できます:

     ```
     export JAVA_OPTS="$JAVA_OPTS -Xmx2048m -Dfile.encoding=UTF-8 -Dorg.talend.remote.client.ssl.keyStore=..."
     ```
4. SSL暗号スイートを管理します(オプション）。

   SSL暗号はセキュアな通信を確立するために使用される暗号化アルゴリズムです。一部の暗号スイートは他の暗号よりセキュリティのレベルが低いので、有効または無効にする暗号を指定したい場合もあります。

   SSL暗号スイートの管理には、ポジティブリストかネガティブリストのいずれかを使用できます:
   * 特定の暗号スイートを無効にします:&lt;root&gt;/conf/TalendJobServer.propertiesファイルに、無効にする暗号のリストを追加します:
     ```
     org.talend.remote.jobserver.server.TalendJobServer.DISABLED_CIPHER_SUITES=TLS_RSA_WITH_NULL_MD5,SSL_RSA_WITH_RC4_128_MD5,...
     ```
   * 特定の暗号スイート(ポジティブリスト)を有効にします:
     * サーバー:org.talend.remote.server.ssl.enabled.cipher.suitesプロパティを使って、暗号の排他的ポジティブリストを定義します:
       ```
       org.talend.remote.server.ssl.enabled.cipher.suites=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,...
       ```
     * クライアント:org.talend.remote.client.ssl.enabled.cipher.suitesプロパティを使って、暗号の排他的ポジティブリストを定義します:
       ```
       -Dorg.talend.remote.client.ssl.enabled.cipher.suites=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,...
       ```

     上の例で示した暗号スイートは、あくまでもデモンストレーションのためのものです。どの暗号スイートが組織のセキュリティ要件に適合するかについては、常にセキュリティチームに相談してください。

     Keytoolユーティリティを使えば、Talend JobServerを実行中であるマシンとそのクライアントのオペレーティングシステムでサポートされている暗号スイートを特定できます。次のコマンドを実行します:
     ```
     keytool -showinfo -tls
     ```

     次のように、サポートされている暗号スイートのリストが出力に表示されます:
     ```
     Enabled Protocols
     -----------------
     TLSv1.3
     TLSv1.2

     Enabled Cipher Suites
     ---------------------
     TLS_AES_256_GCM_SHA384
     TLS_AES_128_GCM_SHA256
     TLS_CHACHA20_POLY1305_SHA256
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
     TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
     ...
     <!-- Skipped for brevity -->
     ...
     TLS_RSA_WITH_AES_128_CBC_SHA
     TLS_EMPTY_RENEGOTIATION_INFO_SCSV
     ```

## タスクの結果

以上で、SSLが有効化され、KeystoreとTruststoreの設定が行われ、暗号スイートが正常に管理されます。