cfssl を使って Chrome ブラウザが出す「保護されていない通信」という警告を消す
このドキュメントについて
Virtual URL を使って HTTPS の通信をする場合、Chrome が「保護されていない通信」と警告をしてきます。
暗号化自体はされていますが、信頼されたルート証明機関によるサーバー証明書をつけないと警告を消すことはできません。
このページでは cfssl というツールを使って自己サインの証明書を用意する手番をご紹介します。
- 証明書の作成、Front Agent の起動: Ubuntu 18.04
- Front Agent へのアクセス: Windows 10, Google Chrome 88.0
サーバー証明書とは
HTTPS 通信時にサーバーにつける必要があるサーバー証明書とは「アクセスしている URL が本当に意図した URL なのかどうか」を証明するための暗号化ファイルです。一般には、「信頼されたルート証明機関」である企業(DigiSign, GlobalSign など)から証明書を購入し設置することになります。
ただし、証明書を設置するサーバーがインターネットからアクセスできない、もしくはインターネットの DNS から見つけられない場合は相応の手順が必要となり(メールで責任者確認など)、費用が発生します。
自己サインとは
自己サインというのは、自分自身が「信頼されたルート証明機関」なってサーバー証明書を用意する手法です。
今回は OSS の CFSSL というツールで実施してみます。
補足事項:
Chrome で「信頼できないサイト」という表示がされる場合、以下の場合があるので注意してください。
-
サーバー証明書の期間が長い(約一年以上だと警告)
-
SAN ではなく CN にドメイン名を設定する (CN はみない)
-
Chrome の起動オプションで –host-rules="MAP *t…. として名前解決している場合は、ホスト名が認識されず警告される
⇒この警告があっても、通信できていれば暗号化は行われています。
全体的な流れ
ブラウザを使ってアクセスするのは Front Agent です。 Front Agent に「その URL を持つサーバーである」ことを証明する証明書を持たせることで、Chrome は認証します。

1. 準備
Ubuntu 環境に以下の手順で、cfssl と cfssljson をインストールします。
cd <作業ディレクトリ>
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssl_1.5.0_linux_amd64
sudo cp ./cfssl_1.5.0_linux_amd64 /usr/local/bin/cfssl
sudo chmod +x /usr/local/bin/cfssl
wget https://github.com/cloudflare/cfssl/releases/download/v1.5.0/cfssljson_1.5.0_linux_amd64
sudo cp cfssljson_1.5.0_linux_amd64 /usr/local/bin/cfssljson
sudo chmod +x /usr/local/bin/cfssljson
2. ルート証明書の作成
Ubuntu 環境の任意の場所に作業用ディレクトリを作成し、そこに以下の内容を記載した ca-config.json
というファイルを作成します。
{
"signing": {
"default": {
"expiry": "168h"
},
"profiles": {
"server": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "8760h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
同様に ca-csr.json
というファイルを作成して 、以下の内容を記載します。
{
"CN": "my_rootCA",
"hosts": [
"my_rootCA"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "JP",
"L": "Shiodome",
"O": "FUJITSU LTD.",
"ST": "Tokyo",
"OU": "Tunaclo"
}
]
}
次のコマンドを実行してルート証明書を生成します。
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
実行後、以下のファイルが作成されていることを確認します。
- ca-key.pem
- ca.csr
- ca.pem
ca.pem
が後の手順でクライアントマシンにインポートするルート証明書になります。
3. サーバー証明書の作成
Ubuntu 環境上の作業用ディレクトリに server.json
というファイルを作成して 、以下の内容を記載します。
なお、"CN"
(証明書の Common Name に該当)と "hosts"
(証明書の Subject Alternative Name(SAN) に該当)には、お使いになる Virtual URL のホスト名を指定してください。
(例) Virtual URL が https://portal.somewhere.local:8080
であれば、portal.somewhere.local
または *.somewhere.local
を指定します。
{
"CN": "*.tunaclo.local",
"hosts": [
"*.tunaclo.local"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "JP",
"L": "Shiodome",
"O": "FUJITSU LTD.",
"ST": "Tokyo",
"OU": "Tunaclo"
}
]
}
次のコマンドを実行してサーバー証明書とキーを生成します。
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server.json | cfssljson -bare server
以下のファイルが作成されていることを確認します。
- server-key.pem
- server.csr
- server.pem
server.pem
と server-key.pem
がそれぞれ Front Agent に渡す証明書とキーのファイルになります。
4. 証明書のインポート
先に生成したルート証明書 ca.pem
をクライアントとなる Windows 環境の [信頼されたルート証明機関] にインポートします。
- Ubuntu 環境上で作成したルート証明書ファイル(ca.pem)を Windows マシン転送
- Windows 環境上で、Internet Exproler の [インターネットオプション] -> [コンテンツ] -> [証明書] -> [信頼されたルート証明機関] を開く
- [インポート] ボタンを押す。
- ウィザードが起動するので、インポートするファイルとして ca.pem を指定
5. Front Agent の起動
5.1 Dokcer 版を使う場合
※ 予め docker-compose をインストールしておいてください。
Ubuntu 環境にて、server.pem
と server-key.pem
が置いてある作業用ディレクトリに以下の内容の docker-compose.yaml
を作成します。
version: '3'
services:
tunaclo:
image: tunacloac/frontagent
container_name: myfrontagent
restart: always
environment:
- HTTP_PROXY=${http_proxy}
- HTTPS_PROXY=${http_proxy}
volumes:
- ./:/opt:ro
ports:
- 443:443
command: "front_agent -controller https://api.kuroshio.tunaclo.net -projectID ${PROJECTID} -agentID ${AGENTID} -agentKey ${AGENTKEY} --httpsserver 0.0.0.0:443 --certfile /opt/server.pem --keyfile /opt/server-key.pem"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
以下のコマンドを実行して Front Agent を起動します。
export PROJECTID=<お使いの ProjectID>
export AGENTID=<お使いの AgentID>
export AGENTKEY=<お使いの AgentKey>
docker-compose up -d
5.2 Windows 版 Tunaclo Connect Client を使う場合
Ubuntu 環境上で作成した server.pem
と server-key.pem
を Windows 環境に転送します。
次に、Tunaclo Connect Client の設定ファイル(ポータルからダウンロードした YAML ファイル)を更新します。
certfile のエントリに server.pem
のパスを、keyfile のエントリに server-key.pem
のパスを記載してください。
例:
certfile: C:\Users\myuser\certs\server.pem
keyfile: C:\Users\myuser\certs\server-key.pem
その後、Tunaclo Connect Client を起動します。