テストに使用する開発者サーバーがあります。 SSL自己署名証明書を使用しているため、HTTPSを介してWebアプリケーションをテストできますが、証明書が検証不可能であるという顕著な警告が表示されます。
それは問題ありませんが、navigator.serviceWorker.register
でエラーをスローするService Workerがあります
SecurityError:ServiceWorkerの登録に失敗しました:スクリプトの取得中にSSL証明書エラーが発生しました。
自己署名証明書を持つイントラネットテストサーバーでService Workerを使用するにはどうすればよいですか?
自己署名証明書を使用する代わりに、特定のドメインが安全であるかのようにChromeまたはFirefoxを起動できます。たとえば、Chrome Macでは、次を使用して起動できます。
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ --user-data-dir=/tmp/foo --unsafely-treat-insecure-Origin-as-secure=http://www.your.site
サービスワーカーは http://www.your.site から作業する必要があります。
詳細については、こちらをご覧ください。 HTTP経由でサービスワーカーをテストするためのオプション
編集:変更--unsafety-...
から--unsafely-...
上記の受け入れられた答えは私にとってはうまくいきませんでした。この質問に対して@ stef52で示唆されているように、--ignore-certificate-errorsを追加しました Service Worker登録のエラー
chrome.exe --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-Origin-as-secure=https://localhost/
MACユーザーの場合
./Google\ Chrome --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-Origin-as-secure=https://localhost
ローカル開発では、自己署名証明書を使用します。 OSXのローカル開発に関連する問題を克服するため。次のことを行いました。
この答えは、いくつかのチャックのポイントを繰り返しています。
特定のDomExceptionが特定のアドレスポートでローカルで発生した場合、ローカルマシンのWebリソースにアクセスするときに、これらの最新バージョンのブラウザー起動のいずれかが役立ちました。
open -a Opera.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-Origin-as-secure=https://localhost:8111
open -a Brave\ Browser.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-Origin-as-secure=https://localhost:8111
open -a Google\ Chrome.app --args --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-Origin-as-secure=https://localhost:8111
Chromiumブラウザはこれらの設定で起動しなかったため、ローカルでService WorkerでSSLを使用するためのこの特定のDomExceptionを克服できました。
この人は、この問題についてもストーリーとしていくつかの洞察を提供しました: https://deanhume.com/testing-service-workers-locally-with-self-signed-certificates/
私にとって、証明書を無視したり、モバイルデバイスの安全でないOriginフラグを設定したりすることはできませんでした。
ただし、ポートフォワーディングがうまくいきました。 Service Workerは、証明書で署名され、SSLを介して通信する場合でも、localhostで実行できます。したがって、基本的には、モバイルデバイスがlocalhostで実行されていると思わせますが、実際にはサーバーマシン上の実際のlocalhostに転送します。これは、次の2つの方法のそれぞれによって実現できます。