PWAとして認識させるには、LocalhostかHTTPS接続が必要。
IndexedDBとか使うのに結局HTTPS接続が必要になるので、HTTPS接続できるように設定する。
最近は、OpenSSL使わなくても簡単に証明書作れるアプリmkcertがあるので、こちらを使う。
インストール手順は公式のREADME.md参照。mkcert <ホスト名orIP>
で作成できる。
PWA のインストールを LAN 内で完結させたかった - Qiitaを参考に、"localhost"にしてみたが、IP直打ちと変わらなかったので、IP直打ちの証明書にした。
Javaの環境の場合は、pemを直接読んでもらえないので、"Java KeyStore"にする必要がある。
まず、mkcert
にオプションで-pkcs12
をつける。
こうすることで、.p12
ファイルができる。
このとき、パスワードが画面に出るので記憶しておくこと。
次に、.p12
ファイルを.jks
に変換する。
mkcertで作った証明書をJKSに変換 - uochanを参考にした。.p12
ファイルのパスと、パスワードを指定して実行できるバッチを作った。
@echo off
set keytool="path\to\jdk\bin\keytool.exe"
%keytool% -importkeystore -srckeystore %1 -srcstoretype PKCS12 -srcstorepass %2 -destkeystore keystore.jks -deststoretype JKS -deststorepass password -destkeypass password
shadow-cljsでこのjks
を使うには、shadow-cljs.edn
に、以下を追加。
{:builds {:app ...}
+:ssl {:keystore "path/to/keystore.jks"
+ :password "your password"}
}
オレオレ認証局で作った証明書を信頼してもらうために、root証明書のインストールが必要。
root証明書のありかは、$ mkcert -CAROOT
で表示される。
何かしらの方法で、このファイルを実機に転送。
Androidの場合、設定アプリから"セキュリティとプライバシー">"セキュリティの詳細設定">"暗号化と認証情報">"証明書のインストール"でインストールできる。
最初に動かすとき、調べながら設定して、手順をメモってなかったので、記録する羽目に。
次からはこまめに手順をログしておこうと思った。