2011年02月15日

Android上のブラウザからSSLクライアント認証の必要なサーバへアクセスする方法

はてなブックマークに登録

■ 初めての Android 端末(IS01)のブラウザで困ったこと

KLab では、社員が社外から社内 LAN 上のサーバへ安全にアクセスするために、自社製の SSL-VPN システムである「VPN-Warp」を使っています。これにより、社員はインターネット上の専用の中継サーバへアクセスすることで所定の社内サーバと通信することが可能です。この中継サーバは不正利用を防ぐためにクライアントからの接続要求時に所定の電子証明書の提示を求める「SSL クライアント認証」を行います。KLab の発行した有効な証明書を提示するクライアントからの要求のみがこれを通過できるというわけですね。

さて、筆者は 2010 年末に IS01 を入手し、あれこれ試していたところひとつ困ったことがありました。Web ブラウザが SSL クライアント認証に対応していないため上記の VPN-Warp 中継サーバ経由で社内のサーバへアクセスすることができないのです。スマートフォンに馴染みが薄いためとりあえずの実験用と割りきって確保した端末ではありますが、その点以外は結構気に入っていたため残念に思いました。

■ 「stone」を併用することで解決

先日このブログで Android 用の「stone」一式を公開しましたが、実のところ stone を Android 上で動かしたいと考えたのは、手元の IS01 のブラウザから VPN-Warp 経由で社内サーバへアクセスすることが目的でした。パケットリピータ stone の SSL 対応機能はクライアント認証をサポートしているため、ブラウザと VPN-Warp 中継サーバの間に stone のプロセスを介在させてやれば SSL まわりの処理一式を stone にまかせることができるのです。


stone に クライアント認証対応を含めて SSL 処理を代行させる

実機でこの操作を行った様子を以下に示します。
# 図中の stone コマンドラインは次の内容です

stone -d -q pfx="cert.pfx" -q passfile="pass.txt" \
      relay.klab.org:443/ssl localhost:8888

■ 実は最近の端末のブラウザもクライアント認証未対応?

さて、ブラウザがクライアント認証に対応していないという制約は筆者の持つ IS01 が旧い Android 1.6 ベースであることに起因するものであって Android 2.x 端末ではきっと解消されているのだろうと漠然と想像していたのですが、実際にはそうではないことを最近になって知りました。
この冬の新機種ブームも相まって社内の Android ユーザが増加する中、「外からイントラにアクセスできたよ!」という声が聞こえてこないのです。利用者に事情を尋ねるとやはりブラウザがクライアント認証をハンドルしない様子とのことでした。しばらく Android から離れていたため事情がわからず情報を探してみると、どうやら本件への対応は今後の課題という扱いのようです。

   Android プロジェクト公式フォーラムより
  ・Issue 11231: Provide support for managing CA and client certificates
  ・Issue 8196: Enhancement: Client Certificate Authentication in Browser

ご存知の方はとっくにご存知の話だと思いますがちょっと意外に感じました。世間一般に SSL クライアント認証を活用したサービスがあまり多くないことの影響なのかもしれません。

■ 同じ問題で困っている方へ

本件は Android の近い将来のバージョンでの解決が期待されますが、自分と同じく今現在の制約に困っている方の参考になればとこの記事を書くことにしました。Android 用 stone のダウンロードリンクと導入・実行方法を次の記事に掲載しています。

  ・DSAS開発者の部屋:パケットリピータ「stone」を Android へポーティング

今のところ単体の ELF 実行形式であるため CUI に慣れていないと多少扱いにくいという点と、Android では hosts ファイルの書き換えが一筋縄ではいかない事情もあり接続先によってはブラウザでの localhost 指定が通らない可能性がありますが、本記事を最後まで読み進められた知見と技術力で上手くご利用下さい。なお、stone の詳細については下記サイトの解説記事が参考になるでしょう。

stone 公式サイト:「Simple Repeater 'stone'」


(tanabe)
klab_gijutsu2 at 13:24│Comments(8)TrackBack(0)Android | win

トラックバックURL

この記事へのコメント

1. Posted by hayakawa   2011年04月21日 13:39
5 Androidでクライアント証明書を使って社内Webにアクセスする方法が判らず困っていましたが、この記事のおかげで接続が行えました。ありがとうございます。
ずっと、クライアント証明書に対応したブラウザが開発されるのを待つか、自分でブラウザを作るしかないと考えていました。
2. Posted by tanabe   2011年04月21日 13:52
hayakawaさん、コメントをありがとうございます。記事がお役に立てたようで何より幸いです。Android はまだまだ発展途上ですが、何かあった時にあれこれ解決方法を探っていく楽しみもありますね :-)
3. Posted by shimizu   2011年05月28日 01:03
hayakawa さん同様、クライアント証明書難民です。

iPhone だとやりかたさえわかってしまえば、簡単だったんですけど、
Android は敷居が高いです。

Xperia arc で stone は問題なく動作していますが、証明書の指定が悪いようで、「Bad Request」という応答が帰ってきてしまう状態です。
もう少しいろいろと試してみます。
進展があったら、またコメントさせて頂きます。
4. Posted by tanabe   2011年05月28日 05:30
shimizuさん、コメントをありがとうございます。良い結果をお祈りしています。
5. Posted by shimizu   2011年06月02日 07:42
tababe さん、こんにちわ。

あれから試行錯誤しまして、無事に接続できました。

ただし、コマンドを直接入力しないと
「failed err=9 errno=02 getaddrinfo for localhost serv=8888」
というメッセージが出力され、コネクションが張れません。

緊急時用で常に使うわけではないので、閲覧できるようになっただけで満足です。
6. Posted by tanabe   2011年06月02日 11:03
shimizuさん、コメントをありがとうございます。以前の何が問題だったのか、また、「コマンドを直接入力」とはどういう状況なのかが気になりますが、まずは目的を果たされたようで幸いでした。
7. Posted by hayakawa   2011年08月10日 13:18
5 今までは自作の怪しいアンドロイドアプリを使っていましたが、stoneのアンドロイド版を使わせてもらってます。
8. Posted by tanabe   2011年08月10日 13:33
hayakawa さん、コメントをありがとうございます。GUI 版がお役に立っているようでとても嬉しいです。ぜひご活用下さい^^

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント