Android端末をVPNサーバーとして利用する 証明書低セキュリティ問題解決編
- 2019.11.12
- Android
- Android, Android端末をVPNサーバーとして利用する, Linux, OpenVPN, Servers Ultimate, Ubuntu, VPN, Windows, WSL, サーバー, スマートフォン, ソフトウェア, ネットワーク, まとめ
証明書のセキュリティが低いためにiOSクライアントでOpenVPNを利用できない問題に悩まされ続けていましたがその悩みも今日終止符が打たれます。
- 1. GCPでOpenVPNの構築中
- 2. 証明書低セキュリティ問題の解決策発見
- 3. 自分で証明書を発行してAndroidサーバーに利用させる
- 4. Windows Subsystem for Linuxの利用
- 5. Windows Subsystem for Linuxの有効化
- 6. Microsoft StoreからUbuntuのインストール
- 7. Ubuntuの起動
- 8. インストール可能なパッケージの一覧更新
- 9. easy-rsaのインストール
- 10. ディレクトリの移動
- 11. varsの編集
- 12. 認証局の作成
- 13. サーバー証明書の作成
- 14. DH鍵の生成
- 15. クライアント証明書の作成
- 16. 生成した証明書の取り出し
- 17. Servers UltimateのOpenVPNで利用されるファイルのディレクトリ
- 18. 証明書をAndroidサーバーへ移動
- 19. DH鍵のリネーム
- 20. 証明書をクライアント設定ファイルフォルダーへ移動
GCPでOpenVPNの構築中
iOSでOpenVPNを利用できないと若干不便なので解決策が見えないAndroidサーバーは一旦置いておいてGCP無料枠でOpenVPNを動かそうと考えて構築しています。
証明書低セキュリティ問題の解決策発見
GCPで動かすために色々やっていた中で知ったことですが、OpenVPNを利用する場合には証明書を発行する必要があります。
ではなぜAndroidサーバーで作る必要がなかったかといえばおそらくServers Ultimate側で自動でやってくれていたからでしょう。実際に証明書自体はあります。
今まで低セキュリティと怒られていた原因はServers Ultimateが自動で発行するために利用している証明書発行ツールが古いかなにかで低セキュリティなものを自動発行しているからだと考えられます。
なお証明書は自分で発行することができます。また外で発行してファイルを持ってくることも出来ます。つまりわかりますね?
自分で証明書を発行してAndroidサーバーに利用させる
ということで自分で証明書を発行してAndroidサーバーに持っていき使わせます。
基本的には上の記事に書いてあるとおりに証明書発行をやれば良いのですが、一応こちらにも手順をすべて書いておきます。
ちなみにLinuxを操作したりと色々面倒なのでそこは覚悟してください。
Windows Subsystem for Linuxの利用
Windows10ではWindows上でLinuxを利用することができるすごい機能があります。
これから証明書の類を生成していくのですが、CentOS 8ではまだ未対応なのかeasy-rsaというツールが使えないうえ、今後証明書生成をしていくことがあるような気がするのでローカルの環境で生成したいと思います。
すでに仮想環境やらなんやらでLinuxの環境がある方は良いのですが、私は無いので(とはいっても簡単に作れますが)Windows Subsystem for Linuxを利用します。
Windows Subsystem for Linuxの有効化
コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化からWindows Subsystem for Linuxを探して有効にしてください。自動でファイルのダウンロードやらインストールやらをやってくれます。
完了したら再起動してください。再起動しないと利用できません。
Microsoft StoreからUbuntuのインストール
Microsoft Storeなんて今までの人生で一回も利用したことがありませんでしたが、WSLを利用する場合はMicrosoft StoreからUbuntuをインストールしなくてはなりません。
検索からWSLと検索し、Ubuntuをインストールします。
他のディストリビューションでも良いような気がしますが、ここは素直にUbuntuにしておきます。
Ubuntuの起動
起動すると初回インストールがあるので待ちましょう。
インストールが完了するとUbuntuで利用するユーザー名とパスワードを作成します。
何でも良いので忘れない適当なものを作りましょう。ただしユーザー名の頭に大文字を使えないなど制約があります。
また、パスワード入力時は”*”もなにも出てきません。
インストール可能なパッケージの一覧更新
コマンドプロンプトやらなんやらを起動して”ubuntu”と入力することでWSLを利用することが出来ます。
sudo su
パスワードを入力して管理者権限にして、
apt-get update
これを実行してください。
インストール可能なパッケージの一覧が更新されます。
easy-rsaのインストール
apt-get install easy-rsa
OKならばYを入力してインストールしましょう。
ディレクトリの移動
cd /usr/share/easy-rsa
とコマンド入力し、easy-rsaのあるディレクトリに移動します。
varsの編集
編集しないとエラーが出るので編集しておきます。
vim vars
で開き、
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
をコメントアウト、
export KEY_CONFIG=/usr/share/easy-rsa/openssl-1.0.0.cnf
を追加します。
認証局の作成
. ./vars
環境変数の設定、
./clean-all
なんか、
./build-ca
で認証局を作ります。秘密鍵とか公開鍵とか色々作成されます。
色々なことを聞かれますが、適当でも大丈夫です。
サーバー証明書の作成
./build-key-server server
秘密鍵と公開鍵が作られます。同じく適当でも大丈夫です。
challenge passwordは何も入力しないでください。
Sign the certificate? と聞かれるのでyで署名します。
またなんか聞かれるのでyでOKです。多分。
DH鍵の生成
鍵交換のなんかすごいやつらしいです。
./build-dh
これで作成します。
クライアント証明書の作成
./build-key client
で作ります。同じく適当でも大丈夫です。
challenge passwordは何も入力しないでください。
Sign the certificate? と聞かれるのでyで署名します。
またなんか聞かれるのでyでOKです。多分。
生成した証明書の取り出し
Explorerから”\\wsl$”にアクセスすると簡単にファイルにアクセスすることが出来ます。
\\wsl$\Ubuntu\usr\share\easy-rsa\keys
に色々作ったものがあります。
ca.crt、client.crt、client.key、dh2048.pem、server.crt、server.keyをどこかわかりやすいところに移動しておきましょう。
Servers UltimateのOpenVPNで利用されるファイルのディレクトリ
Android端末の/data/data/com.icecoldapps.serversultimate.packa/vpnが利用されるファイルの保存先です。
keysに証明書の類があるのがわかりますね?
証明書をAndroidサーバーへ移動
今必死に作った証明書を利用するAndroid端末に移動させます。
何かしらの方法でAndroidに証明書を持ってきて/data/data/com.icecoldapps.serversultimate.packa/vpn/keysにca.crt、dh2048.pem、server.crt、server.keyを移動させます。
なお、自動生成された証明書は必要なくなりますが、うまくいかなかったときに面倒なので削除せずにリネームして残しておくことをおすすめします。
DH鍵のリネーム
dh2048.pemになっていると思いますが、Servers Ultimateが生成しているDH鍵のファイル名はdh1024.pemになっているのでリネームしてください。
証明書をクライアント設定ファイルフォルダーへ移動
接続するために必要なクライアント接続ファイルをServers Ultimateから受け取っていると思います。
中にあるca.crtとclient.crtとclient.keyを自分で生成したものに置き換えます。
あとは総まとめにかかれている手順どおりにやれば繋がるはずです。公式クライアントでもPC版でも・・・
-
前の記事
Aliexpressで独身の日セールなので色々買いました 2019.11.11
-
次の記事
フォトパネル02をHDMIディスプレイにする 完結編 2019.11.13