3.1. SSL/TLS通信ガイド¶
3.1.1. 概要¶
EdgeとBackend間で行うHTTPとMQTTの通信は、Ansible playbookの設定によりSSL/TLS暗号化を行うかどうかを設定できます。
ここでは、SSL/TLSによる通信の暗号化を行わずにインストールした場合に後から暗号化を有効化する手順を説明します。
3.1.2. BackendのSSL/TLS設定¶
この節では、BackendでSSL/TLS対応を行うための構成例を説明します。
3.1.2.1. 構成¶
BackendではHTTP通信をNginxで処理し、MQTT通信をRabbitMQで処理しますので、次の図のようにHTTPSの暗号と復号をNginxで行い、MQTTSの暗号と復号をRabbitMQで行うように設定します。
3.1.2.2. 設定手順¶
証明書、秘密鍵を配置
ファイルを以下に配置します。配置先のパスは環境に合わせて読み替えてください。
証明書ファイル ファイルパス サーバ証明書 /path/to/server.pem 中間CA証明書 /path/to/cacert.pem サーバ証明書と中間CA証明書を結合したファイル /path/to/cert.pem サーバ鍵 /path/to/cert.key サーバ証明書と中間CA証明書を結合するには次のコマンドを実行します。 ```bash $ cd /path/to/
$ cat /path/to/server.pem /path/to/cacert.pem > /path/to/cert.pem ```
RabbitMQはサーバ証明書、中間CA証明書およびサーバ鍵のオーナーがRabbitMQプロセスの実行ユーザでないとSSL/TLS通信ができません。
そのため、これらのファイルのオーナーをRabbitMQプロセスの実行ユーザである
rabbitmq
に変更します。$ chown rabbitmq:rabbitmq /path/to/server.pem /path/to/cacert.pem /path/to/cert.key
Nginxの設定(HTTPS)
エディタでNginxの設定ファイルを編集します。
bash $ vi /etc/nginx/conf.d/common-proxies.conf
- 変更前
server { listen 80; listen [::]:80 ipv6only=on; ...
変更後
設定値は後述の表に従って、適宜変更してください。
server { listen 443 ssl; listen [::]:443 ipv6only=on ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/cert.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!ADH:!MD5; ssl_verify_client off; ssl_client_certificate /path/to/cacert.pem; ...
項目名 説明 listen
nginxがlistenするIPアドレスとポート番号。SSL通信する場合は ssl
を指定する。ssl_certificate
サーバ証明書のファイルパス。 ssl_certificate_key
サーバ鍵のファイルパス。 ssl_protocols
有効なSSL/TLS通信プロトコル一覧。 ssl_ciphers
有効な暗号スイート。 ssl_verify_client
クライアント認証するか。クライアント認証する場合は on
を指定する。ssl_client_certificate
クライアント証明書のCA証明書のファイルパス。 編集が完了したら、nginxを再起動します。
bash $ service nginx restart
ICE Backend APIの設定 既定の設定では、ICE Backend APIがエッジに通知するファイルダウンロード用のURLがHTTP通信になっているため、これをHTTPS通信用に変更します。
エディタで設定ファイルを編集します。
bash $ vi /opt/nec/pf/ice/config/backendapi1.config.json
- 変更前
{ ... "fileDelivery": { "baseUrl": "http://<ホスト名>/fileserver/", ... }
- 変更後
{ ... "fileDelivery": { "baseUrl": "https://<サーバー証明書のFQDN>/fileserver/", ... }
編集が完了したら、ICE Backend APIを再起動します。
bash $ service ice-backendapi1 restart
RabbitMQの設定(MQTTS)
エディタでRabbitMQの設定ファイルを編集します。
bash $ vi /opt/nec/pf/ice/config/rabbitmq.config
- 変更前
[ {rabbitmq_mqtt, [{tcp_listeners, [1883]}] } ].
- 変更後
[ {ssl, [{versions, ['tlsv1.2', 'tlsv1.1', tlsv1]}]}, {rabbit, [ {ssl_options, [{cacertfile, "/path/to/cacert.pem"}, {certfile, "/path/to/server.pem"}, {keyfile, "/path/to/cert.key"}, {versions, ['tlsv1.2', 'tlsv1.1', tlsv1]}, {verify, verify_peer}, {fail_if_no_peer_cert, true}]} ]}, {rabbitmq_mqtt, [ {tcp_listeners, [1883]}, {ssl_listeners, [8883]} ]} ].
項目名 説明 rabbit.ssl_options.cacertfile
CA証明書のファイルパス rabbit.ssl_options.certfile
サーバ証明書のファイルパス rabbit.ssl_options.keyfile
サーバ鍵のファイルパス rabbit.ssl_options.versions
有効なSSL/TLS通信のバージョン rabbit.ssl_options.verify
クライアント証明書の妥当性検証をするか ( verify_peer
,verify_none
)rabbit.ssl_options.fail_if_no_peer_cert
rabbit.ssl_options.verify
がverify_peer
の場合のみ、クライアント証明書が無い場合に失敗とするか (true
,false
)rabbitmq_mqtt.tcp_listeners
MQTT通信のポート番号 rabbitmq_mqtt.ssl_listeners
MQTTS通信のポート番号 編集が完了したら、RabbitMQを再起動します。
bash $ service rabbitmq-server restart
ファイアウォールの設定
HTTPSとMQTTSのポート許可設定
HTTPS(443)、MQTTS(8883)で通信している場合の設定です。 また、iptables以外のファイアウォールを使用している場合は適宜読み替えてください。 ```bash $ iptables -I INPUT 1 -p tcp –dport 443 -j ACCEPT
$ iptables -I INPUT 1 -p tcp –dport 8883 -j ACCEPT ```
httpとmqttでSSL/TLS通信をしない場合は80ポートと1883ポートを塞いでください。
3.1.3. エッジのSSL/TLS設定¶
3.1.3.1. 設定手順¶
証明書、秘密鍵を配置
以下のファイルを${ICE_HOME}/conf/ディレクトリに配置します。
- クライアント証明書
- 中間CA証明書
- クライアント鍵
エッジ設定ファイル修正
${ICE_HOME}/conf/core_config.jsonの以下の項目をエディタで修正します。
MQTT用項目
mqtt.url
MQTTブローカーのURLを指定します。tls設定をする際は、スキームを’mqtts://’に変更してください。
mqtt.cert
MQTT用のクライアント証明書のファイル名を指定します。
mqtt.ca
MQTT用の信頼する中間CA証明書のリストのファイル名を配列で指定します。
mqtt.key
MQTT用のクライアント秘密鍵のファイル名を指定します。
mqtt.options.rejectUnauthorized
MQTT用の信頼する中間CA証明書のリストに自己証明書を使用する場合は
false
を指定します。
HTTPS用項目
https.cert
HTTPS用のクライアント証明書のファイル名を指定します。
https.ca
HTTPS用の信頼する中間CA証明書のリストのファイル名を配列で指定します。
https.key
HTTPS用のクライアント秘密鍵のファイル名を指定します。
https.options.rejectUnauthorized
MQTT用の信頼する中間CA証明書のリストに自己証明書を使用する場合は
false
を指定します。