Можете ли вы использовать сервисного работника с самозаверяющим сертификатом?
У меня есть сервер разработчика, который используется для тестирования. У них есть самоподписанные сертификаты SSL, которые позволяют нам тестировать веб-приложение через HTTPS, но с выдающимися предупреждениями о том, что сертификаты не поддаются проверке.
Это хорошо, но у меня есть Service Worker, который выдает ошибку с помощью navigator.serviceWorker.register
SecurityError: не удалось зарегистрировать ServiceWorker: при извлечении script произошла ошибка сертификата SSL.
Как использовать Service Worker с сервером тестирования интрасети, который имеет самозаверяющий сертификат?
Ответы
Ответ 1
В качестве альтернативы использованию самоподписанных сертификатов вы можете запускать 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-...
Ответ 2
Принятый ответ выше не работал для меня. Я добавил ошибки -ignore-certificate-errors к этому, как было предложено @stef52 для этого вопроса. Ошибка с регистрацией 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
Ответ 3
Для локального развития мы используем самоподписанные сертификаты. Чтобы преодолеть проблемы, связанные с локальным разработчиком OSX. Мы сделали следующее:
- Создайте свой сертификат и выполните его.
- Перейдите к URL-адресу https
- Откройте инструмент "Инструменты" > "Безопасность" > "Просмотреть сертификат"
- перетащите значок сертификата на рабочий стол и дважды щелкните по нему, это откроет доступ к цепочке ключей.
- перетащите значок сертификата для входа в систему, откройте вход в систему и дважды щелкните по сертификату (его следует назвать с доменом dev или аналогичным)
откройте раскрывающееся меню "Траст" и выберите "Всегда доверять". Вернитесь в свое приложение, закройте окно и заново откройте https, теперь у вас должен быть https "faux" для вашего домена dev.
Ответ 4
Этот ответ повторяет некоторые пункты Чака.
Если это конкретное исключение DomException произошло локально на каком-либо адресном порту, при доступе к веб-ресурсу на локальном компьютере может помочь одна из этих последних версий запусков браузера:
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 не запускался с этими настройками, чтобы позволить преодолеть это особое исключение DomException для использования SSL с работником службы локально.
Этот человек представил некоторые идеи в качестве истории, а также по этому вопросу: https://deanhume.com/testing-service-workers-locally-with-self-signed-certificates/
Ответ 5
Для меня игнорирование сертификатов или установка флага небезопасного происхождения для мобильного устройства не работали.
Однако, portforwarding сделал свое дело. Работникам службы разрешается работать на локальном хосте, независимо от того, подписано ли оно сертификатом и взаимодействует ли через SSL, поэтому в основном вы позволяете своему мобильному устройству думать, что оно работает на локальном хосте, но на самом деле вы перенаправляете его на реальный локальный хост на сервере. Это может быть достигнуто с помощью каждого из этих двух методов:
Ответ 6
Для тех, кто получает ошибку No such file or directory
после попытки ответа @Chucks, попробуйте ниже,
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:1123
Более подробную информацию можно найти по этой ссылке