EDM の 暗号化通信のセットアップ (管理サーバー)

管理サーバーにおける、暗号化通信のセットアップを行います。

本手順によるセットアップ後、システム構成の全体構成図に記載のポート番号の通り、コンポーネント間の通信が変更されます。 また、暗号化通信の際、下表にある証明書等のファイルを使用します。

コンポーネント名 ファイルパス ファイルの種類
Nebula /opt/tomcat/8060/conf/server_keystore.jks キーストア
CAP /opt/nec/pf/ice/msgrouter_core/conf/server_keystore.jks キーストア
Nginx /etc/nginx/conf.d/<svcert> サーバー証明書
/etc/nginx/conf.d/<svkey> サーバー秘密鍵

管理サーバーで、下記手順にしたがってセットアップを行います。

事前準備

  1. 以下のファイルを、任意のディレクトリに配置します。

    • 管理サーバーの秘密鍵 (以下、ファイル名を <svkey> とする)
    • 管理サーバーの証明書 (以下、ファイル名を <svcert> とする)
    • CA証明書 (以下、ファイル名を <cacert> とする)
  2. キーストアファイルのパスワードを決めておきます。

以下、このパスワードを <keystore_password> とします。

  1. 以下のコマンドを実行し、キーストアファイルを生成します。

    # keytool -import -alias root -keystore server_keystore.jks -file <cacert>
    キーストアのパスワードを入力してください:  ( <keystore_password> を入力 )
    新規パスワードを再入力してください:   ( <keystore_password> を入力 )
    ...
    この証明書を信頼しますか。 [いいえ]:  ( はい を入力 )
    
    # openssl pkcs12 -export -inkey <svkey> -in <svcert> -name edm -out keystore.pkcs12 -certfile <cacert>
    Enter Export Password: ( <keystore_password> を入力 )
    Verifying - Enter Export Password: ( <keystore_password> を入力 )
    
    # keytool -importkeystore -srckeystore keystore.pkcs12 -destkeystore server_keystore.jks -srcstoretype pkcs12 -deststoretype jks
    キーストアkeystore.pkcs12をserver_keystore.jksにインポートしています...
    出力先キーストアのパスワードを入力してください:   ( <keystore_password> を入力 )
    ソース・キーストアのパスワードを入力してください: ( <keystore_password> を入力 )
    別名edmのエントリのインポートに成功しました。
    インポート・コマンドが完了しました: 1件のエントリのインポートが成功しました。0件のエントリのインポートが失敗したか取り消されました
    
  2. 以下のコマンドを実行し、CAPとNginxのディレクトリにファイルを格納します。

    # cp ./server_keystore.jks /opt/nec/pf/ice/msgrouter_core/conf/
    # cp ./server_keystore.jks /opt/tomcat/8060/conf/
    # cp ./<svcert> /etc/nginx/conf.d/
    # cp ./<svkey> /etc/nginx/conf.d/
    

CAP の暗号化

  1. 以下を実行します。

    # cd /opt/nec/pf/ice/msgrouter_core/conf/
    # cp core_config.json core_config.json.bak
    
  2. 以下を実行します。

    # vi core_config.json
    

    mqtt.urlの値を、以下のように変更して上書き保存します。

    {
        "mqtt": {
            "url": "mqtt+nio+ssl://0.0.0.0:8883",
            (省略)
    }
    
  3. 以下を実行します。

    # diff core_config.json core_config.json.bak
    

    出力結果が以下のようになることを確認します。

    <         "url": "mqtt+nio+ssl://0.0.0.0:8883",
    ---
    >         "url": "mqtt+nio://0.0.0.0:1883",
    
  4. 以下を実行します。

    # mkdir -p /root/backup_for_encrypting/ice_message_router
    # cd /usr/lib/systemd/system/
    # cp ice-message-router.service /root/backup_for_encrypting/ice_message_router/ice-message-router.service.bak
    
  5. 以下を実行します。

    # vi ice-message-router.service
    

    ExecStartの値を、以下のように変更して上書き保存します。

    ...
    ExecStart=/usr/bin/java -classpath '/opt/nec/pf/ice/msgrouter_core/lib/*' -Dlog4j.configurationFile=/opt/nec/pf/ice/msgrouter_core/conf/log4j2.xml -Djava.security.auth.login.config=/opt/nec/pf/ice/msgrouter_core/conf/login.config -Djavax.net.ssl.keyStore=/opt/nec/pf/ice/msgrouter_core/conf/server_keystore.jks -Djavax.net.ssl.keyStorePassword=<keystore_password> -Djavax.net.ssl.keyStoreType=jks -Djavax.net.ssl.trustStore=/opt/nec/pf/ice/msgrouter_core/conf/server_keystore.jks -Djavax.net.ssl.trustStorePassword=<keystore_password> -Djavax.net.ssl.trustStoreType=jks com.nec.connexive.ice.router.Launcher
    ...
    
  6. 以下を実行します。

    # diff ice-message-router.service /root/backup_for_encrypting/ice_message_router/ice-message-router.service.bak
    

    出力結果が以下のようになることを確認します。

    < ExecStart=/usr/bin/java -classpath '/opt/nec/pf/ice/msgrouter_core/lib/*' -Dlog4j.configurationFile=/opt/nec/pf/ice/msgrouter_core/conf/log4j2.xml -Djava.security.auth.login.config=/opt/nec/pf/ice/msgrouter_core/conf/login.config -Djavax.net.ssl.keyStore=/opt/nec/pf/ice/msgrouter_core/conf/server_keystore.jks -Djavax.net.ssl.keyStorePassword=<keystore_password> -Djavax.net.ssl.keyStoreType=jks -Djavax.net.ssl.trustStore=/opt/nec/pf/ice/msgrouter_core/conf/server_keystore.jks -Djavax.net.ssl.trustStorePassword=<keystore_password> -Djavax.net.ssl.trustStoreType=jks com.nec.connexive.ice.router.Launcher
    ---
    > ExecStart=/usr/bin/java -classpath '/opt/nec/pf/ice/msgrouter_core/lib/*' -Dlog4j.configurationFile=/opt/nec/pf/ice/msgrouter_core/conf/log4j2.xml -Djava.security.auth.login.config=/opt/nec/pf/ice/msgrouter_core/conf/login.config com.nec.connexive.ice.router.Launcher
    
  7. サービスを再起動します。

# systemctl daemon-reload
# systemctl restart ice-message-router

Nginx の暗号化

  1. 以下を実行します。

    # cd /opt/nec/pf/ice/config/
    # cp -p backendapi1.config.json backendapi1.config.json.back
    
  2. 以下を実行します。

    # vi backendapi1.config.json
    

    fileDelivery.baseUrl を、以下のように変更します。管理サーバーのIPアドレスはサーバー証明書作成時に指定したコモンネームに合わせて変更します。

    "fileDelivery": {
        "baseUrl":"https://<管理サーバーのIPアドレス>/fileserver/",
    
  3. 以下を実行します。

    # diff backendapi1.config.json backendapi1.config.json.back
    

    出力結果が以下のようになることを確認します。

    <     "baseUrl":"https://<管理サーバーのIPアドレス>/fileserver/",
    ---
    >     "baseUrl":"http://<管理サーバーのIPアドレス>:80/fileserver/",
    
  4. 以下を実行します。

    # cd /etc/nginx/conf.d/
    # cp default.conf default.conf.back
    
  5. 以下を実行します。

    # vi default.conf
    
    1. ssl_certificate, ssl_certificate_key の設定を、以下のように変更します。

          ssl_certificate /etc/nginx/conf.d/<svcert>;
          ssl_certificate_key /etc/nginx/conf.d/<svkey>;
      
    2. 下記の行まで移動します。

          # SSE PUSHサーバー
          location /ssepush/ {
              proxy_pass http://ssepush_servers/ssepush/;
              proxy_buffering off;
              proxy_cache off;
              proxy_redirect http:// https://;
              proxy_http_version 1.1;
              proxy_set_header Host $host;
              proxy_set_header Connection "";
              proxy_connect_timeout 5m;
              proxy_read_timeout 5m;
              proxy_send_timeout 5m;
          }
      

      その下の行に、以下を追記します。

          # ICE File Server
          location /fileserver/ {
              proxy_buffering off;
              proxy_request_buffering on;
              proxy_pass http://ice_fileserver/;
      
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
          }
      
    3. 最下行まで移動し、以下を追記します。

      # ICE File Server
      upstream ice_fileserver {
          server 127.0.0.1:22402;
      }
      
  6. 以下を実行します。

    # diff default.conf default.conf.back
    

    出力結果が以下のようになることを確認します。

    <     ssl_certificate /etc/nginx/conf.d/<svcert>;
    <     ssl_certificate_key /etc/nginx/conf.d/<svkey>;
    ---
    >     ssl_certificate /etc/pki/tls/certs/server.crt;
    >     ssl_certificate_key /etc/pki/tls/certs/server.key;
    
    < 
    <     # ICE File Server
    <     location /fileserver/ {
    <         proxy_buffering off;
    <         proxy_request_buffering on;
    <         proxy_pass http://ice_fileserver/;
    < 
    <         proxy_http_version 1.1;
    <         proxy_set_header Upgrade $http_upgrade;
    <         proxy_set_header Connection "upgrade";
    <     }
    
    < }
    < 
    < # ICE File Server
    < upstream ice_fileserver {
    <     server 127.0.0.1:22402;
    
  7. 以下を実行します。

    # cd /opt/tomcat/8060/conf/
    # cp -p server.xml server.xml.back
    
  8. 以下を実行します。

    # vi server.xml
    

    下記のコメントがある行まで移動します。

        <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
            This connector uses the NIO implementation. The default
            SSLImplementation will depend on the presence of the APR/native
            library and the useOpenSSL attribute of the
            AprLifecycleListener.
            Either JSSE or OpenSSL style configuration may be used regardless of
            the SSLImplementation selected. JSSE style configuration is used below.
        -->
    

    その下の行に、以下を追記します。

        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                maxThreads="300" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
                keyAlias="edm" keystorePass="<keystore_password>" keystoreFile="/opt/tomcat/8060/conf/server_keystore.jks" keystoreType="JKS" />
    
  9. 以下を実行します。

    # diff server.xml server.xml.back
    

    出力結果が以下のようになることを確認します。

    <     <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    <                maxThreads="300" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
    <                keyAlias="edm" keystorePass="<keystore_password>" keystoreFile="/opt/tomcat/8060/conf/server_keystore.jks" keystoreType="JKS" />
    
  10. 以下を実行します。

    # mkdir -p /root/backup_for_encrypting/tomcat_8060/webapps
    # cd /opt/tomcat/8060/webapps/<テナントIDの値>/
    # cp -p config /root/backup_for_encrypting/tomcat_8060/webapps/config.bak
    
  11. 以下を実行します。

    # vi config
    

    baseUri の値を、以下のように変更します。管理サーバーのIPアドレスはサーバー証明書作成時に指定したコモンネームに合わせて変更します。

    module.exports = {(省略) "baseUri": "https://<管理サーバーのIPアドレス>:8443/api/",(省略)}}
    
  12. 以下を実行します。

    # diff config /root/backup_for_encrypting/tomcat_8060/webapps/config.bak
    

    出力結果が以下のようになることを確認します。

    < module.exports = {(省略) "baseUri": "https://<管理サーバーのIPアドレス>:8443/api/",(省略)}}
    ---
    > module.exports = {(省略) "baseUri": "http://<管理サーバーのIPアドレス>:8060/api/",(省略)}}
    
  13. 以下を実行します。

    # systemctl restart ice-message-router
    # systemctl restart tomcat_8060
    # systemctl restart tomcat_8430
    # systemctl restart nginx
    
    # systemctl status ice-message-router
    (`Active: active (running)`になっていることを確認)
    # systemctl status tomcat_8060
    (`Active: active (running)`になっていることを確認)
    # systemctl status tomcat_8430
    (`Active: active (running)`になっていることを確認)
    # systemctl status nginx
    (`Active: active (running)`になっていることを確認)
    
  14. 以下を実行し、ポートの開放・閉鎖を行います。

    # firewall-cmd --add-port=8443/tcp --zone=public --permanent
    # firewall-cmd --remove-port=80/tcp --zone=public --permanent
    # firewall-cmd --remove-port=8060/tcp --zone=public --permanent
    # firewall-cmd --remove-port=1883/tcp --zone=public --permanent
    # firewall-cmd --reload
    
  15. 以下を実行します。

    # firewall-cmd --list-all
    

    実行結果にあるports の行について、以下を確認します。

    • 8443/tcp が表示されること
    • 80/tcp が表示されないこと
    • 8060/tcp が表示されないこと
    • 1883/tcp が表示されないこと

動作確認

  1. 「EDM の 暗号化通信のセットアップ (エッジ機器)」に沿ってセットアップが終わっていることを確認します。

  2. https://<管理サーバーのIPアドレス>:8443/<テナントIDの値>/ にブラウザからアクセスします。管理サーバーのIPアドレスはサーバー証明書作成時に指定したコモンネームに合わせて変更します。

  3. 管理画面にログインします。認証情報は、/root/EDM2/edm_manager/tools/Tenant-Add/group_vars/all.yml ファイルを参照してください。

    • メールアドレス:NEBULA_EDMSYSTEM_USER_EMAIL の値
    • パスワード:NEBULA_EDMSYSTEM_USER_PASSWORD の値
  4. 画面左側にあるサイドナビゲーションより、「配布 > タスク」を選択します。

  5. すべてのタスクにチェックを入れてから、ゴミ箱アイコンを押下し、タスクを削除します。

  6. 画面左側にあるサイドナビゲーションより、「配布 > パッケージ」を選択します。

  7. すべてのパッケージにチェックを入れてから、ゴミ箱アイコンを押下し、パッケージを削除します。

  8. 「2-3. システムの動作確認」の記載にしたがって、動作確認を行います。