OS: Android 7.0
OpenVPN Connect 3.0.5
Windows10にOpenVPNクライアントの設定を施したら続いてAndroid端末でもOpenVPNで接続したいものである。Androidクライアント用に証明書と秘密鍵を誂える。
$ cd easy-rsa-3.0.5/easyrsa3/ $ ./easyrsa build-client-full android (snip) Enter PEM pass phrase: Verifying - Enter PEM pass phrase: (snip) Enter pass phrase for /home/guro/src/openvpn/easy-rsa-3.0.5/easyrsa3/pki/private/ca.key:
設定ファイルも準備しておく。
$ vi android.ovpn client dev tun proto udp remote www7390uo.sakura.ne.jp 1194 ca ca.crt cert android.crt key android.key tls-auth ta.key 1 cipher AES-256-GCM remote-cert-tls server compress lz4-v2 auth-nocache nobind
これらのファイルをAndroid端末へ首尾よくコピーする。
$ sudo scp /etc/openvpn/ca.crt /etc/openvpn/ta.key pki/issued/android.crt pki/private/android.key android.ovpn guro@192.168.0.150:/mnt/file
次はAndroid端末を手にしてOpenVPNさんが作り上げた「OpenVPN Connect – Fast & Safe SSL VPN Client」をインストールする。
OpenVPN Connectを起動。
「OVPN Profile Connect with .ovpn file」をタップ。
端末にコピーした設定ファイルを選択し、「IMPORT」をタップ。
設定内容に誤りが無ければ「Profile successfully imported」である。あとはプロファイル名を好きに付けてから「ADD」をタップする。都合の悪い設定があればここで具体的なエラー内容が示されるようになっていた。
「Save Private Key Password」にチェックをつけると秘密鍵のパスフレーズを入力する箇所が現れる。OpenVPNサーバへ接続する都度、パスフレーズを入力するのが差し支えあるならここで入力しておくと宜しい。
追加したプロファイルをタップすると接続が開始される。右上にある困り顔の一反木綿みたようなピクトグラムはログを表示するためのものであった。
秘密鍵のパスフレーズを保存するよう設定していなければ毎回ここで入力画面が顔を出す。
初回接続時だけ接続要求のメッセージが表示される。ソースを信頼できる場合にのみOKをタップする。
滞りなく接続が完了するとこういう具合に画面が切り替わる。
ところがUbuntu Server 12.04に構築したOpenVPNサーバであると、接続の際に「The certificate is signed with an unacceptable key (eg bad curve, RSA too short)」というようなエラーメッセージが出て処理が終いになってしまった。
接続のログをひとしべひとしべ確認してゆくと認証局の鍵が512bitで作成されているようであるが、此れが為にエラーが出ているような雰囲気を感ずる。easyrsaのスクリプトを編集して2048bitで作成されるよう試みたがうまい具合に処理されなかったのでOpenVPNサーバのOpenSSLを1.0.1から1.0.2に刷新したところ問題が解決した。
OpenSSLのサイトには1.0.1はもはやサポートされないので使ってはならぬとある。その場しのぎの対策としてクライアント側の設定ファイルに
tls-cipher "DEFAULT:@SECLEVEL=0"
を追加してしのいでいたが、安全を考えると心持ちの良い解決方法ではないのでやはりOpenSSLをアップデートするのがよさそうである。