前々回でWindows Azure Toolkit for Windows Phone 7 について少し触れましたが、Windows Phone 7とWindows Azure上の通信をセキュアにするのにHTTPS通信を行っています。
で、SSL/TLSなHTTPS通信では証明書を用いて暗号化や復号を行いますが、この時使用する証明書は正しいものでなくてはなりません。(なくてはないってことはないですが)
正しい証明書というのはざっくりどんなものかと言えば
- 正しく証明された認証局(CA)から発行された証明書であること
- CAが発行した証明書に記載されてるコモンネームと接続先が一致していること
- 証明書の有効期限が切れていないこと
である必要があります。(細かい点は省きます)
証明書が正しくない場合、ブラウザ等であれば警告が表示されると思います。
(認識できない認証局から発行された証明書です等)
ブラウザの場合は利用者が意識して「警告を無視して接続する」などのオプションを選択し、通信を開始することが出来ます。
※通信の暗号化そのものは証明書(秘密鍵と公開鍵)があればできるので
警告が出る理由ですが、証明書が不正ということは上記の条件に合致しないということで、例えば思っているサイトと接続しているサイトが異なる場合や、怪しげなCAから発行された証明書が返されたりした場合が考えられます。
こういう用途って、フィッシングサイトとかで使われるケースがありますよね。
なのでそのサイトが正しく認証局から証明されて、間違いないことを利用者が把握するというのは大事なわけです。
ブラウザの場合は利用者がいろいろな情報を見て判断することができますが、アプリの場合はそうはいかないので、SSL/TLS通信時に証明書のエラーが出ないように環境を用意してあげるのが大事になります。
通常、ベリサイン等のRootCAから発行された証明書であればだいたい問題ないですし、接続しようとしてるサイトと証明書は一致するはず(申請時にそのようにしているはず)なので、基本的にあまり気にする必要が無いと思います。
でも開発時はそんな費用かけてしないですよね。(URLも変わるかもしれませんし)
ということで、WATK4WP7でも自己署名でやってるわけです。
前置きが長くなりました。
まず、Windows Phone 7で認識している(あらかじめ登録されている)RootCAの証明書はこのMSDNの通りとなっています。
Windows Phone 7.1が出るころにはまた変わってるかもしれないです。(実際COMODOの問題があったときにアップデートがあったようですし)
さて上記以外のCAから発行された証明書は、そもそも発行したCAが認識できないので⊂ミ⊃^ω^)アウアウです。
なので自己署名した証明書(.cer)をインストールさせて、利用者が(端末が)ちゃんと把握してるCAですよというふうにしてるわけですね。
ITPro向けのWindows Phone 7ガイドには、証明書のインストール方法はInternet Explorer上で*.cerにアクセスする方法とメールの添付ファイルにをつけることでインストールを行う方法が記載されています。
それぞれ証明書を開くとインストーラが起動するようです。
※Windows Phone 7の証明書のインストーラは*.cer 、 *.p7b 、*.pfx ファイルに対応してるようです
というわけで、SSL/TLSな通信を行う際は証明書の扱いに注意しましょうというお話でした。
おまけ
Windows Phone 7(実機なのでNoDo)のInternet Explorerで警告のでるHTTPSなサイトにアクセスすると、PCと同じように警告が表示されます。
Continue to Website を選択すれば普通にアクセスできます。
※一度許可しちゃうと次から聞かれないんですが…
要望?
- Internet ExplorerでHTTPSなサイトにアクセスした際、証明書の内容やサイトの情報を確認する術がないです。
- またインストール済みの証明書を確認する手段がないですね。(こっちは端末をセキュアにするためなのかも)
1つ目はフィッシングを避けたりする上でも重要なので是非対応して頂きたいところ。2つ目はAPIは非公開でしょうから、WP7側で確認する手段を提供してほしいですね。(知らないだけであるのかな?)
WP7.1でIEの部分は改善してほしいですね…

ピンバック: にーまるどっとこむ。 » スマートフォンの広告等の情報収集モジュールの通信をフィルタリングしよう(4)Windows Phoneのhttpsの通信をスニファーする ※Windows Phoneのhttps通信の機能には