安かったのでHuawei MediaPad T2 Proこと606HWを買いました.
10インチというサイズは初めてだったのですが,録画視聴には最適なんじゃないかと.
しかしいつも通りクライアント証明書をインストールしてもEPGStationに接続できない…
原因
完全に解明出来ていないのですが,ブラウザにAndroidが返す証明書が壊れてるんじゃ無いかと思います.
Nginx側ログ
2022/01/29 01:12:29 [crit] 85392#85392: *78957 SSL_do_handshake() failed (SSL: error:0407E088:rsa routines:RSA_verify_PKCS1_PSS_mgf1:salt length check failed error:1417B07B:SSL routines:tls_process_cert_verify:bad signature) while SSL handshaking, client: 見せられないよ, server: [::]:443
タブレット表示
こんな表示初めて見ました.
スクショは無いですが,Chromeだと同様の表示の隣にerr_ssl_decrypt_error_alert
と出ていました.
nginxの表示の通りゴミデータか途中で切れてるとかだと思います.
解決策
Androidのシステムが信頼出来ない事がわかったのでWebViewにファイルから証明書を読んで送ってもらうことにします.
GitHubで良いサンプルを見つけたので,それを見ながらResourcesから読み込むように改造したものがコチラ
https://git.haru3.me/haru/ClientWebView
res/raw
にclient.pfxとかで置いとけばそれを使って認証してくれます.
ただし相手先をなりふり構わず送っているので信頼出来るサイト以外で使わないこと.
今回はEPGStationでしか使わず,他のサイトに飛んでいくことはないだろうという実装になっています,
あと,JavaのドキュメントによるとKeyStore.load
のpasswordはnullでもいいらしいんですが実際やってみるとNo password supplied for PKCS#12 KeyStore.
と言われて動きませんでした.
パスワードが空の場合"".toCharArray()
にしたところうまく動くようです.
|
|
多分これが実装なのですが,nullだと即落ちするようになってるし当然ですね. https://android.googlesource.com/platform/external/bouncycastle/+/d001700/bcprov/src/main/java/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java
動作するとこんな感じ.無事クライアント認証が使えるようになりました.なお,最新版ではタイトルバーを消しているのでもっと広くなっています.
おわりに
これ何が原因なんですかね.前もってたd-02H(海外ROMで同じくAndroid6.0.1)だと使えた気がするんですが…
しかしSnapdragon 616のパワーなのかd-02Hよりも快適に動いています.これで4千円なんだからすばらしいですな.
なお,ソフバンの赤ロムタブレットはめちゃめちゃ安く,MediaPad M3 Liteこと701HWなんか3500円ぐらいからあります.安すぎない.
8インチじゃなかったら性能も606HWより高いしこっち買ってるんですけどね.まあこの606HWは赤じゃ無いですが.