使用https FCM时出现SSL错误

9
我已经按照FCM文档实现了Web推送通知。如果我设置url为'http://xxx',一切都很好,没有出现错误。但是,当我将url设置为'https://xxx..'时,我遇到了错误:

"Failed to register a ServiceWorker: An SSL certificate error occurred when fetching the script." code: "messaging/failed-serviceworker-registration" "Messaging: 我们无法注册默认的服务工作者。在获取脚本时发生了SSL证书错误,导致注册服务工作者失败。(messaging/failed-serviceworker-registration)."

请问有人能告诉我如何修复这个错误吗?

有人能解释这个问题吗? - firework
........................ - firework
你能标记一下trollkotze给出的答案吗?它是有效的。 - Patrick Odum
2个回答

16

在本地开发环境中想要测试服务工作者(Service Workers),没有正确的SSL证书是一个普遍问题。这不是特定于Firebase消息,而是一般适用于Service Workers。

当使用Google Chrome时,下面是我找到的解决方案:使用自签名证书本地测试服务工作者

不幸的是,我还不知道如何在其他浏览器中解决此问题,但可能有类似的方法。

对于Chrome,您需要启动一个新的Chrome实例,并使用一些标志告诉它忽略本地来源的SSL证书错误:

在Linux(和可能是Mac)中:

google-chrome --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://127.0.0.1 --user-data-dir=/tmp/foo

这里的https://127.0.0.1是您应用程序(和服务工作者)在本地托管的位置。如果在非标准的HTTPS端口443上提供应用程序,例如在端口3000上通过HTTPS提供应用程序,您可能需要调整此位置以使用适当的端口,例如https://127.0.0.1:3000--user-data-dir=/tmp/foo是必要的,如果已有Chrome实例正在运行,则可以启动一个新实例并带有新用户配置文件。

在Windows中(取决于您的chrome.exe在哪里):

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:1123

同样地,您可能需要调整端口。


3
Windows命令对我来说并没有完全起作用,但是这个可以:"C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost:8443 --user-data-dir=C:\tmp(特别是额外的--user-data-dir标志)。 - Steven King
新的异常:此浏览器不支持使用Firebase SDK所需的API(messaging/unsupported-browser)。 - mufazmi

1
更简单的方法,适用于我: 只需在Chrome浏览器中粘贴chrome://flags/#allow-insecure-localhost,并启用该设置,该设置大致为“允许从本地主机加载的资源使用无效证书”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接