2022/03/27

[RN] 自作証明書をクライアントで使いたい

Android で、aarで組み込んだライブラリの方で HTTPS サーバが起動していて、アプリはその HTTPS サーバに接続してリクエストするような作りになっているとしよう。
その HTTPS サーバは公開しないけど、なんかあったら嫌なので自分で作った証明書を使っている。
さて、そこにどうやってアクセスすると良いのだろうか?

 

最初は「JavaScript self signed」などで検索していたのだが、よく出てくるのが「reject unauthorizedオプションを無効にする」というやつだった。
どう見ても、認証を無視する設定だと思う。開発中はまだよいかもしれんが、今回はしょっちゅう証明書を作り直すわけでもないから認証する方で実装しておきたい。

ようやく出てきたのがこちら。

javascript - nodejs - error self signed certificate in certificate chain - Stack Overflow
https://stackoverflow.com/questions/45088006/nodejs-error-self-signed-certificate-in-certificate-chain

'ca' などというオプションがあるのね。
しかしこれ、 require で 'https' とかやってるし、React Native では使えない気がする。


そう、今回は React Native でやりたいのだ。
React Native は Node.js ではないので同じことができるとは限らない。

Networking · React Native
https://reactnative.dev/docs/network

fetch() は聞いたことがある。
Mozzila の MDN 参照と言うことは node-fetch ではなく標準な fetch() なのだろう。
ということはファイルシステムなんかは使えないと思う。

[Android]How to fetch() from https server with self-signed certificate · Issue #6995 · facebook/react-native
https://github.com/facebook/react-native/issues/6995

うーーーん・・・・・・・・・。

これは Native 側に実装して呼び出すようにした方が簡単だし確実そうだなぁ。