我有用于测试的开发人员服务器。它们具有SSL自签名证书,使我们可以通过HTTPS测试Web应用程序,但带有明显的警告,表明证书不可验证。
很好,但是我有一个服务人员,该服务人员抛出了错误 navigator.serviceWorker.register
SecurityError:无法注册ServiceWorker:提取脚本时发生SSL证书错误。
如何将Service Worker与具有自签名证书的Intranet测试服务器一起使用?
我有用于测试的开发人员服务器。它们具有SSL自签名证书,使我们可以通过HTTPS测试Web应用程序,但带有明显的警告,表明证书不可验证。
很好,但是我有一个服务人员,该服务人员抛出了错误 navigator.serviceWorker.register
SecurityError:无法注册ServiceWorker:提取脚本时发生SSL证书错误。
如何将Service Worker与具有自签名证书的Intranet测试服务器一起使用?
Answers:
作为使用自签名证书的替代方法,您可以启动Chrome或Firefox,使其假装某些域是安全的。例如,在Mac上使用Chrome,您可以使用以下命令启动它:
/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-...
--allow-insecure-localhost
本地开发时,该标志也很有用
上面接受的答案对我不起作用。我在@ 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
ignore-certificate-errors
在chrome:// flags中找不到该标志。知道为什么?
对我而言,使用最新的Chrome浏览器v.79。以下在OS X上有效。
创建新证书- 仅在您的默认证书已过期(如果自您的apache安装以来已经过了很长时间)时才需要。
使用letsencrypt.org中的以下代码段为本地主机创建新证书
openssl req -x509 -out server.crt -keyout server.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
通过将创建的.crt和.key放置/usr/local/etc/httpd
在您的证书可能位于的任何位置,以启用新创建的证书。
server.key / server.crt应该是证书的默认名称,但是如果您进行了更改,最好检查一下位于/usr/local/etc/httpd/extra/httpd-ssl.conf
我身上的配置
以下几行是有意义的:
SSLCertificateFile "/usr/local/etc/httpd/server.crt"
SSLCertificateKeyFile "/usr/local/etc/httpd/server.key"
然后重新启动服务器
使您的计算机信任您的自签名证书
打开 https:// localhost时,单击URL左侧的挂锁图标。 在上述面板上,选择“ certificates”,然后将打开右侧的窗口。
选择localhost,然后在“详细信息”上方的大图标上,将其拖到您的桌面上。
您应该以诸如localhost.cer
桌面上的文件结尾。
双击此文件或右键单击->使用“钥匙串”访问权限打开
选择类别“所有项目”,并且名称为“本地主机”的证书应显示在右侧面板上。
双击右侧面板上的“ 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浏览器并非以这些设置开头,因此可以克服此特定的DomException以便在本地将SSL与Service Worker一起使用。
此人还提供了一些有关此事的故事作为见解:https : //deanhume.com/testing-service-workers-locally-with-self-signed-certificates/
对我而言,忽略证书或为移动设备设置不安全的来源标志不起作用。
但是,portforwarding可以解决问题。无论其是否使用证书签名并通过SSL进行通信,都允许服务工作者在localhost上运行,因此,基本上,您可以让移动设备认为它在localhost上运行,但实际上是将其转发到服务器计算机上的真实localhost。这可以通过以下两种方法中的每一种来实现:
对于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
可以在此链接上找到更多信息