🐵

Android Emulator/iOS simulatorからhttpsなローカル環境に接続する

2020/10/28に公開

ローカル開発環境の https 化 にインスパイアされました

iOS simulatorは、本物のドメイン(私の場合はlocalhost.tomiyan.net)を利用し127.0.0.1をAレコードとしてDNSに登録し、DNS認証で証明書を取得すれば問題ない

Android Emulatorを乗り越える

Android Emulatorのネットワーク127.0.0.1だとエミュレートしたデバイスのループバック インターフェースにアクセスしてしまうのでこのままではうまくいかない

ホスト ループバック インターフェースへの特殊エイリアス(開発マシンの 127.0.0.1 など) のIPアドレスは 10.0.2.2 なのである

  • DNSにlocalhost.tomiyan.netのAレコードとして10.0.2.2を登録する
  • Let`s EncryptなどでDNS認証で証明書を取得する
  • ホストのhosts ファイルに127.0.0.1 localhost.tomiyan.netを追記する
    • Android EmulatorはホストのDNS設定を参照するが、hostsは参照しない

これでAndroid EmulatorでもiOS simulatorでもアクセスすることが可能になる

元記事のhostsをいじらない趣旨に沿って環境をつくる

先程の方法は元記事に反する方法だったので別の方法(未検証)

  • DNSにlocalhost.tomiyan.netのAレコードとして127.0.0.1を登録する
  • Let`s EncryptなどでDNS認証で証明書を取得する
  • ホストにDNSサーバを立て、localhost.tomiyan.netのAレコードとして10.0.2.2を登録する
  • Android Emulator起動時に-dns-server <serverList>オプションをつけて起動する

Let`s EncryptのDNS検証、ワイルドカード証明書のメモ

certbot certonly \
  --manual \
  -d localhost.example.com \
  -d "*.localhost.example.com" \
  --preferred-challenges dns-01 \
  -m example@example.com \
  --config-dir ~/example/ssl/config \
  --work-dir ~/example/ssl/work \
  --logs-dir ~/example/ssl/logs \
  --manual-public-ip-logging-ok 

Discussion