頭ン中

学んだことや興味を持ったことなど。

【Android】【iOS】ルート証明書をインストールしてもcertificate_unknown

背景

Burpを利用して普段利用しているスマホアプリの通信を調べて見たかった。

結果

失敗。

メモ

公式手順通りやってAndroidChromeからはhttpsのページ(Google検索)が利用可能にはなっている。 一応iOSでも試してみてSafariから同様にGoogle検索は利用できた。

support.portswigger.net

が、ネイティブアプリからの通信は証明書を認識してくれず。以下のようなメッセージを返される。 TwitterとかGooglePlayとかでエラーになった。

Proxy    The client failed to negotiate an SSL connection to twitter.com:443: Received fatal alert: certificate_unknown

色々検索していると、中間証明書と見なされている場合があるっぽい?

dev.hinaloe.net

もしやこれかと、上記ページ同様の手順を試して見たところ、解決せず。残念。 CA証明書とは認識されているようなのでこれではないっぽい。

f:id:kikuko72:20170724232725p:plain

ここまでやってみて、ダメ元でTwitterで呟いて見たところ、 Firefoxが自アプリ内でルート証明書を管理しているらしいという情報が得られたので試してみる。

f:id:kikuko72:20170724233142j:plain

たしかにFirefoxはブラウザアプリだけど、他のアプリ同様インストールしたものを認識していない様子。 独自に証明書を管理しているアプリだと端末に追加したユーザーの証明書を見てくれない実装になっていることがあるっぽい。

でも、OSの証明書見ない実装ってそんなに普通なのかなー? 何かを見落としている気がする。

webviewを手がかりに検索すると、以下のようなページが。

y-anz-m.blogspot.jp

気になったのは以下の記述。

WebView で https で提供されている URL のサイトにアクセスしようとしたとき、証明書がオレオレ証明書だったり、Android にデフォルトで入っている信頼済証明書機関(trusted certificate authorities)に入っていない場合 SSL のエラーが発生し、処理がキャンセルされ white screen / empty screen (つまり真っ白画面)になります。

webviewはデフォルトのものしか見なくて、ユーザーのインストールしたものは見ないと言っている? あとでもうちょっとこの辺を調べたい。 アプリが実装してないとできないって結論になるかもしれないけど、 それでもいいので、正確な所を知りたい。