ユーザーのブラウザとフロントエージェント間の通信を暗号化する


このドキュメントについて

Tunaclo AC において、フロントエージェントとユーザー端末間で https 通信を行うための方法について説明します。

Web 通信で https プロトコル(SSL : Secure Socket Layer)を利用する目的には、以下の2つがあります。

  • 通信の暗号化
  • 偽のサーバへの接続防止

通信の暗号化は、ブラウザが動作する PC と Web サーバー間の通信を暗号化することで、盗聴を防止することが目的です。 もう一つの目的は、接続したサーバーが元々ユーザーが接続を意図したサーバーであるか否かを確認することです。

SSL を利用した通信では、サーバー側から公開鍵技術を利用した証明書が送られるため、ユーザー側のブラウザでその証明書をユーザーが確認することにより、偽のサーバーに接続していないかを確認できます。

system architecture
本手順書は以下の環境で動作確認しています。

  • Front Agent : Windows 版(Windows10), コンテナ版(Ubuntu 18.04)
  • Front Agent にアクセスするユーザー環境 : Windows 10, Google Chrome 92.0

1. ポータルでの https の指定

Tunaclo AC で提供しているフロントエージェントは自己サイン証明書を同封しているため、https を用いた暗号化通信は簡単に実現できます。 Tunaclo AC のポータルにログインし、「ルート詳細画面ページ」内の「サービス詳細」の「Virtual URL」に https を指定すればフロントエージェントとブラウザ間の通信は https で暗号化できます。

Virtual URL の設定については以下のページをご参照ください。

ルート管理

サービス管理

ただし、Agent のバイナリに同封されている証明書は Agent 毎に認証局から取得したものではないため、https の接続先がユーザーが望んだサーバか否かを確認する目的では利用できず、ブラウザでアクセスすると「保護されていない通信」と警告画面が表示されます。

接続先の確認を行う(警告画面が表示されない)ためには、ユーザーの皆様が個別に証明書を入手していただき、その証明書をエージェントに登録する必要があります。こちらについては後ほど説明します。

2. ブラウザにおける証明書の確認

Agent のバイナリに付属している自己サイン証明書を用いてブラウザアクセス時に警告画面が出た際に、強制的にアクセスした場合、ブラウザの URL 表示欄は下のように「保護されていない接続」となります。

証明書を表示させると下図のように「証明書(無効)」(赤線囲み部分)となります。

cert alert window

一方、正式な証明書を用いた https 接続の場合、下のように「証明書(有効)」(赤線囲み部分)と表示されます。

normal access window

3. 証明書の種類と入手

先に説明したように、エージェントに同封された証明書を利用した場合、ブラウザでアクセスするまでにいろいろな警告が表示されます。 そのため、警告を消す方法として、正式な証明書を取得する方法と、セキュリティ的に問題は残るものの、自分が認証局となる方法の2種類を紹介します。

3.1. 証明書の種類と役割

認証局から取得する SSL の証明書には、以下の3種類があります。

  • 実在証明拡張型(EV)
  • 実在証明型(OV)
  • ドメイン認証(DV)

実在証明拡張型(EV)

証明書を申請する法人の「登記事項証明書」を申請書類に添えて認証局に申請、認証局は帝国データバンク等の第三者機関の情報で法人の存在と、申請した担当者が在籍していることを確認します。 さらに、第3者機関が把握している代表電話に認証局が電話して、法人が証明書を取得する意思が本当にあるかを確認するなど、厳密な審査が行われます。

実在証明型(OV)

主要な認証局で公開されている手順は概ね共通ですが、EV との違いは申請した担当者の在籍証明を第三者機関の情報で行うか否かになります。

ドメイン認証(DV)

ドメイン認証(DV)は認証局に証明書を申請した人や法人は審査せず、申請されたホストが存在するか否かだけを確認します。確認の手法は、申請されたドメインが WHO IS サーバに登録されていることと、ホスト名が DNS で検索可能であることです。また、申請するホストが登録されている DNS のサーバに特殊な設定をしておき、あるコマンドを実行するだけで証明書が取得できるサービスを提供している認証局も存在します。 そのため、EV や OV は法人しか取得できませんでしたが、DV は個人でも取得できます。

また、DV 証明書は Web ブラウザでアクセスした URL のうちホスト名の部分が DNS(Domain Name Service)に登録されている正しいホストであることを保証するものです。このことから、証明書の内容と URL のホストが同一であれば、偽の DNS サーバにより、不正なホストに誘導されたり、http の通信を中間者攻撃で盗み見られたりしていないことを確認できます。

3.2. 無料で正式な証明書を入手する方法

一般的に、証明書の取得には費用、時間、手間が必要になります。しかし、有効期限が短く、機能が限られているDV証明書を無料で発行する認証局 (Let’s encrypt や ZeroSSL) も存在しています。また、それら認証局は WHO IS サーバと DNS サーバの設定ができていれば、ダウンロードしたコマンドを実行するだけで正式な DV 証明書を発行します。

3.3. 自己サイン証明書の有効化

一方、ソフトウェアの開発やシステムのテストなどの目的で、正式な証明書を認証局から取得せず、ブラウザの警告だけを消すことができれば良いという場合、以下の手順でブラウザの警告を消すことができます。

  • 自分が認証局になる(認証局用証明書を作成する)
  • 自分が作った認証局用証明書をクライアント PC(Windows)にインストールする
  • エージェント用に証明書を作成する
  • エージェント用の証明書に自分で作った認証局の権限で署名する

4. 作成した証明書の利用方法

フロントエージェントとの間の通信に https を利用する場合、先程の手順で作成した証明書を 使うようフロントエージェントを設定する必要があります。 これを実現するには、フロントエージェントの設定を ユーザが手動で修正する必要があります。そのため、ポータルで経路の定義は済んでおり、 バックエージェントも起動できている状態を先に用意しておきます。

4.1. Windows 用エージェントの場合

ここでは、Windows 環境でフロントエージェントを動作させる場合について説明します。

Windows 版フロントエージェント用設定のダウンロード

エージェントの設定ファイルは、ポータルの経路定義画面からダウンロードすることができるため、先にポータルにログインし、https を利用する経路の設定画面をブラウザで表示させておきます。

次に、ブラウザで表示させている経路情報の「 Client detail 」の部分を探します。最後に、「 Download config file 」をクリックすることで、フロントエージェント用の設定ファイルをダウンロードできます。

詳細は以下のページをご参照ください。

設定ファイル(config.yaml)のダウンロード

ダウンロードしたファイルの内容は以下のような形式になっているはずです。

agentName: "エージェント名"
agentMode: "frontAgent"
agentID: "エージェントID(文字列)"
agentKey: "エージェントキー(文字列)"
projectID: "プロジェクトID"
controller: "https://api.kuroshio.tunaclo.net"
httpsservers: 
  - "0.0.0.0:ポート番号"

これを、下の例のように「 certfile 」と「 keyfile 」の行を 追加(ファイル名をフルパスで記述)するとともに、生成した証明書をそのディレクトリにコピーします。

agentName: "エージェント名"
agentMode: "frontAgent"
agentID: "エージェントID(文字列)"
agentKey: "エージェントキー(文字列)"
projectID: "プロジェクトID"
controller: "https://api.kuroshio.tunaclo.net"
certfile: c:\tmp\front.crt
keyfile: c:\tmp\front.key
httpsservers: 
  - "0.0.0.0:ポート番号"

この後の手順はエージェント制御用のアプリに Tunaclo Agent Service Tool を使うか、Tunaclo Connect Client を使うかで異なります。

Tunaclo Agent Service Tool の場合

Tunaclo Agent Service Tool(Tunaclo AST) の場合、コマンドラインでの操作が必要になります。

Tunaclo Agent Service Tool のコマンドラインでの操作は以下のページをご参照ください。

Agent サービスの管理・操作

ここでは、ダウンロードして編集したフロントエージェント用の設定ファイルが c:\tmp にあるものと想定します。

まず、フロントエージェントをサービスとして登録します。

C:\tmp> tunaclo-ast create --config .\編集した設定ファイル名 --startType auto
Agent service ast-example was successfully created
C:\tmp> 

次に、登録したサービスを表示して、エージェント名部分をメモ(copy & paste)しておきます。

C:\tmp> tunaclo-ast list

Successfully get agent service list:
agentName          : エージェント名
agentMode          : frontAgent
agentStatus        : Stopped
agentConfigPath    : C:\ProgramData\Fujitsu\TunacloAC\agent-services\エージェント名\config.yaml
agentLogDir        : C:\ProgramData\Fujitsu\TunacloAC\agent-services\エージェント名
servicetName       : サービス名
serviceStatus      : Stopped
serviceStartType   : Automatic
logLevel           : info
maxLogSize         : 20971520
logBackups         : 2
C:\tmp> 

フロントエージェントを起動します。

C:\tmp> tunaclo-ast start --name エージェント名
Agent service エージェント名 was successfully started
C:\tmp> 

最後に、エージェントが動作しているか否かを確認します。

C:\tmp> tunaclo-ast list

Successfully get agent service list:
agentName          : エージェント名
agentMode          : frontAgent
agentStatus        : Running
agentConfigPath    : C:\ProgramData\Fujitsu\TunacloAC\agent-services\エージェント名\config.yaml
agentLogDir        : C:\ProgramData\Fujitsu\TunacloAC\agent-services\エージェント名
servicetName       : サービス名
serviceStatus      : Running
serviceStartType   : Automatic
logLevel           : info
maxLogSize         : 20971520
logBackups         : 2
C:\tmp> 

上のような出力で「 agentStatus 」と「 serviceStatus 」が「 Running 」なら正常に動作しています。

Tunaclo Connect Client の場合

まず、Tunaclo Connect Client を起動します。

次に、「設定ファイル」の入力欄をクリックすることで、設定ファイルを選択するウィンドウが開くため、先に手で編集した設定ファイルを選択してください。

最後に、「起動」ボタンをクリックすることで、フロントエージェントを動作させます。

状態が「 Running 」なら正常に動作しています。

Tunaclo Connect Client の詳細は以下のページをご参照ください。

Tunaclo Connect Client

4.2. Linuxコンテナ版エージェントの場合

Tunaclo AC では、Linux コンテナ版のエージェントを提供していますが、Ubuntu 18.04上のホストでエージェント用コンテナを用いる場合で説明します。

Linuxコンテナ版エージェント の詳細は以下のページをご参照ください。

コンテナ版 Agent

準備

本手順では、docker-compose コマンドを利用します。ただし、標準的なインストール状態では docker-compose コマンドはインストールされていないため、まず docker-compose コマンドをインストールします。

$ sudo apt install docker-compose

次に、事前に作成しておいた証明書ファイル(server.pem と server-key.pem)を作業用に作成したディレクトリにコピーしておきます。

コンテナ用定義ファイルの作成

次に、先程証明書を配置したディレクトリで、コンテナ版フロントエージェント実行用の定義ファイルを作成します。

このファイルに必要な情報は、Tunaclo AC ポータルのルート詳細画面からコピーできます。

適当なテキストファイル(ここでは、docker.txt とします)を作成し、ポータルの画面からコピーしたコンテナ版エージェント用の定義情報を ペーストします。このテキストファイルの中身は以下のような構成になっているはずです。

docker run -d --restart=unless-stopped --log-opt max-size=20m --log-opt max-file=5 --name エージェントの名前 -p ポート番号の2個組 tunacloac/frontagent:v1.4.0 front_agent -controller https://api.kuroshio.tunaclo.net -projectID プロジェクトIDの文字列 -agentID エージェントIDの文字列 -agentKey エージェントキーの文字列 -httpsserver "アドレス情報" 

同じディレクトリに docker-compose.yaml という名前の空のファイルを作成し、下の文字列をコピー&ペーストします。

version: '3'

services:
  tunaclo:
    image: tunacloac/frontagent
    container_name:  ${AGENTNAME}
    restart: always
    environment:
    - HTTP_PROXY=${http_proxy}
    - HTTPS_PROXY=${http_proxy}
    volumes:
      - ./:/opt:ro
    ports:
    - ${PORT_PAIR}
    command: "front_agent -controller https://api.kuroshio.tunaclo.net -projectID ${PROJECTID} -agentID ${AGENTID} -agentKey ${AGENTKEY}  --httpsserver ${ADDRESS_INFO} --certfile /opt/server.pem --keyfile /opt/server-key.pem"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

shell スクリプトによるフロントエージェントの実行

先程、エージェント用定義ファイル(docker-compose.yaml)を作成したのと同じディレクトリでコンテナ実行用の shell スクリプト(仮に run.sh とする)を作成して、実行可能にしておきます。

$ touch run.sh
$ chmod +x run.sh

run.sh の中身は下の文字列をコピー&ペーストした上で、6つの環境変数の定義部分を docker.txt の 値で書き換えます。

#!/bin/sh

export PROJECTID=プロジェクトIDの文字列
export AGENTID=エージェントIDの文字列
export AGENTKEY=エージェントキーの文字列
export AGENTNAME=エージェント名
export ADDRESS_INFO=アドレス情報
export PORT_PAIR=ポート番号の2個組

docker-compose up -d

このスクリプトを root 権限で実行すれば、この作業用ディレクトリに置いた証明書を用いる フロントエージェントがコンテナとして動作します。

前へ
次へ