Android端末をVPNサーバーとして利用する 証明書低セキュリティ問題解決編

Android端末をVPNサーバーとして利用する 総まとめ 完全版

Android端末をVPNサーバーとして利用する 総まとめ

証明書のセキュリティが低いためにiOSクライアントでOpenVPNを利用できない問題に悩まされ続けていましたがその悩みも今日終止符が打たれます。

Advertisement

GCPでOpenVPNの構築中

GCPでOpenVPNを利用する 下調べ編

iOSでOpenVPNを利用できないと若干不便なので解決策が見えないAndroidサーバーは一旦置いておいてGCP無料枠でOpenVPNを動かそうと考えて構築しています。

証明書低セキュリティ問題の解決策発見

GCPでOpenVPNを利用する 証明書作成編

GCPで動かすために色々やっていた中で知ったことですが、OpenVPNを利用する場合には証明書を発行する必要があります。

ではなぜAndroidサーバーで作る必要がなかったかといえばおそらくServers Ultimate側で自動でやってくれていたからでしょう。実際に証明書自体はあります。

今まで低セキュリティと怒られていた原因はServers Ultimateが自動で発行するために利用している証明書発行ツールが古いかなにかで低セキュリティなものを自動発行しているからだと考えられます。

なお証明書は自分で発行することができます。また外で発行してファイルを持ってくることも出来ます。つまりわかりますね?

自分で証明書を発行してAndroidサーバーに利用させる

ということで自分で証明書を発行してAndroidサーバーに持っていき使わせます。

基本的には上の記事に書いてあるとおりに証明書発行をやれば良いのですが、一応こちらにも手順をすべて書いておきます。

ちなみにLinuxを操作したりと色々面倒なのでそこは覚悟してください。

Advertisement

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を自分で生成したものに置き換えます。

Advertisement

あとは総まとめにかかれている手順どおりにやれば繋がるはずです。公式クライアントでもPC版でも・・・