春雨日記 about me tags

安かったので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()にしたところうまく動くようです.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    public void engineLoad(
        InputStream stream,
        char[] password)
        throws IOException
    {
        if (stream == null)     // just initialising
        {
            return;
        }
        if (password == null)
        {
            throw new NullPointerException("No password supplied for PKCS#12 KeyStore.");
        }
        BufferedInputStream bufIn = new BufferedInputStream(stream);
        bufIn.mark(10);

多分これが実装なのですが,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は赤じゃ無いですが.