はじめに
「UniFiNetworkApplication」を稼働させている状況で、WebページにアクセスするとGoogleが毎回警告を表示してくるのが面倒だと感じ、また証明書についての知識も身につけたいと思い、SSL通信の実装に挑戦することにしました。ただし、この通信はプライベートネットワーク内で完結するため、自己署名証明書を利用しています。
環境
CA(認証局)
OS:WindowsServer2019
ActiveDirectory証明書サービスインストール済み
※ActiveDirectoryとして利用しています。
UniFiNetworkApplicationサーバ(以下、UniFiサーバ)
OS:WindowsServer2019
UniFiNetworkApplicationをサービスとして実行済み
※サービスとして実行する方法はこちらで紹介しています。
ブラウザ
GoogleChrome
前提条件
- ここではWindows Serverの機能であるActive Directory証明書サービスを利用しています。事前にインストールと設定を完了させるか、別の証明書発行サービスを利用して代替してください。
- UniFiサーバは事前にドメイン参加しているものとします。
- 各サーバは固定のIPアドレスが割り振られていること。
- DNSによる名前解決が出来ること。もしくはhotsファイルで名前解決が出来ること。
- CAの役割をさせるサーバの証明書をブラウザにCAの証明書が「信頼できるルート証明機関」にインポートされていること。
手順
KeyStore Explorerのダウンロード・セットアップ
https://keystore-explorer.orgでkeystore explorerをダウンロードします。
ダウンロードが出来たら、UniFiNetworkApplicationが稼働しているサーバにインストールします。
keystoreについて
UniFiNetworkApplicationはkeystoreというファイルに証明書を保存しています。
普通の方法では中身を確認することが出来ないため、Javaのコマンドを使って証明書を上書きするか、KeyStore Explorerを使ってGUIで操作する必要があります。
証明書の発行
ファイル名を指定して実行で「certlm.msc」と入力しても出てきます。
証明書の管理コンソール(certlm.msc)が出てきます。
証明書の管理コンソール(certlm.msc)を開いたら、「証明書 - ローカルコンピューター > 個人 > 証明書」と進み、証明書の一覧を表示します。
証明書の一覧で右クリックをして、表示されるメニューから「すべてのタスク(K) > 新しい証明書の要求(R)...」を選択します。
ドメイン参加しているので、「ActiveDirectory 登録ポリシー」を選択して「次へ(N)」をクリックします。
もしドメイン参加していない場合はユーザーが構成することになるので、下記になるんですかね。今回の環境ではこちらは解説出来ません。
証明書の登録画面が出ます。
先ほど作成したUniFiNetworkWebServiceのテンプレートが出てきていますが、情報が不足しているので詳細の隣にある矢印をクリックして、プロパティを選択します。
証明書のプロパティインターフェースが出てくるため、必要な情報を入れていきます。
必要なサブジェクト名は下記くらいですかね。
- 共通名(コモンネーム)
- 国名(なくてもいいですが最低限...)
上記以外にも地域、都道府県などありますが、無くても何とかなります。
別名の欄は個別で設定を入れてもらえればいいですが、おすすめは下記の3点です。
- DNS
- IPアドレス(v4)
- URL
秘密キーのタブへ移り、キーのオプションで秘密キーをエクスポート出来るようにしておきましょう。
必要な設定を入れ終わったら、「OK」をクリックし、チェックボックスにチェックを入れて「登録(E)」をクリックします。
問題なく証明書が登録されたら下図のように成功と表示されます。
「完了(F)」をクリックします。
完了をクリックしたら証明書の登録画面が消え、証明書の管理コンソールの「証明書 - ローカルコンピューター > 個人 > 証明書」の中に先ほど作った証明書がインストールされています。
証明書のエクスポート
前のステップで作成した証明書を選択し、右クリックをして「すべてのタスク(K) > エクスポート(E)」をクリックします。
証明書のエクスポートウィザードが表示されるので「次へ(N)」をクリックします。
秘密キーをエクスポートするか聞かれるので「はい」のラジオボタンをクリックして「次へ(N)」をクリックします。
エクスポートの形式を聞かれます。
選択の余地はありませんが「.PFX」で出力されるようにして「次へ(N)」をクリックします。
秘密キーを保護するためにセキュリティを選択します。
無難にパスワード入れていきます。また、暗号化方式で「TripleDES-SHA1」が選択されていますが、「AES256-SHA256」に変更して「次へ(N)」をクリックします。
一応、Wikiも調べたらTripleDESは推奨されないみたいですね。
TripleDES wiki
エクスポートする場所とファイル名が聞かれますので、適当な場所に設定します。
今回はデスクトップに「example」という名前で保存します。
設定が出来たら「次へ(N)」をクリックします。
ウィザードが完了したという画面が出たら「完了(E)」をクリックします。
「正しくエクスポートされました。」と表示されるので「OK」をクリックします。
保存された場所(今回はデスクトップ)を見るとちゃんとエクスポートされているのが確認できます。
サービス停止
注意
この操作を行うとUniFiNetworkApplicationのサービスが停止し、 Webブラウザからアクセスが出来なくなります。
無線通信には影響出ませんが留意しておいてください。
「ファイル名を指定して実行」で「services.msc」と検索してください。
サービス管理コンソールが出てくるので、UniFiNetworkApplicationを探します。
keystoreのバックアップ
KeyStore Explorerで操作をする前にバックアップを取得します。
keystoreの保存されているディレクトリに移動します。
keystoreの保存場所
keystoreは通常インストールしたUserディレクトリ内に「Ubiquiti UniFi」というディレクトリが作成され、その中に存在するため、「C:\User$user\Ubiquiti UniFi\data」 に保存されます。
私の環境では\Program Filesにサービスとしてインストールしているため、下記のディレクトリパスになります。
「C:\Program Files\Ubiquiti UniFi\data」
\Program Filesにサービスをインストールする方法は下記の記事を参照してください。
keystoreをコピーして名前を変更します。
keystore.bakでもkeystore.originでも何でもいいです。
これでバックアップも完了です。
証明書をkeystoreにインポートする
keystoreをKeyStore Explorerで開く
「Open an exsting KeyStore」をクリックします。
ダイアログボックスが出てくるので、先ほど確認した場所のkeystoreファイルを選択して「開く」をクリックします。
※デフォルトのファイルタイプは「KeyStore File」になっているので「すべてのファイル」に変更します。
keystoreを開く際にパスワードを求められます。
UniFiNetworkApplicationのkeystoreのデフォルトパスワードは下記になります。
aircontrolenterprise
無事開けると既存のunifi証明書が保存されているのが確認できます。
既存の証明書を削除する
Entry Name「unifi」を選択し、右クリックをするとメニューが表示されます。
その中の「Delete」を選択します。
keystoreに証明書をインポートする
ツールバーの「Import Key Pair」をクリックします。
Key Pair Typeを聞かれるので「PKCS #12」を選択し、「OK」をクリックします。
ファイルの場所と開封するためのパスワードを聞かれるので、作成した証明書ファイル(この記事ではexample.pfx)を選択し、パスワードを入力します。
パスワードは.PFXファイルをエクスポートするときに設定したパスワードを入力します。
入力が完了したら「Import」をクリックします。
Entry Aliasを聞かれるので、デフォルトのunifiを設定します。
新しくKey Pairのパスワードを設定することになりますが、ここはUniFiNetworkApplicationのデフォルトパスワードを設定します。
aircontrolenterprise
「OK」をクリックするとKey Pairのインポートが成功した表示が出て、一覧に証明書がインポートされます。
設定の保存
これを実施しないと設定が反映されないので注意してください。
最後に設定を保存します。
ツールバーのSaveアイコンをクリックして保存します。
サービス開始
サービスを開始します。
サービス停止と同じく「services.msc」を開いて、UniFiNetworkApplicationのサービスを開始します。
確認
最後にWebブラウザからページにアクセスして確認をします。
下記のURLをブラウザに入力してみます。
https://<任意のFQDN or IPアドレス>:8443/manage/
下記の様にログイン画面が出てくればサービスの開始は正常に行われています。
下記の様に表示されていれば正常にSSL通信が実装できています。
おわりに
今回は(あまり意味はないですが)SSL通信をUniFiNetworkApplicationのサービスを例に実装してみました。
毎回Googleから
と言われるのも面倒ですからね。
もし興味がある方は実装してみてください。