您是否可以使用具有自签名证书的服务工作者?

Kei*_*ith 47 ssl https self-signed service-worker

我有用于测试的开发人员服务器.它们具有SSL自签名证书,允许我们通过HTTPS测试Web应用程序,但有明显的警告证明证书不可验证.

这没关系,但是我有一个服务工作者会抛出一个错误 navigator.serviceWorker.register

SecurityError:无法注册ServiceWorker:获取脚本时发生SSL证书错误.

如何将Service Worker与具有自签名证书的Intranet测试服务器一起使用?

Chu*_*uck 28

作为使用自签名证书的替代方法,您可以启动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`标志也很有用 (10认同)
  • 我尝试了这样的操作,但仍然遇到相同的错误: ./chrome --unsafely-treat-insecure-origin-as-secure=http://192.168.120.49:3000 。我也尝试指定 dir 。请帮忙 (2认同)
  • 那么答案是“否”吗?不允许使用自签名证书? (2认同)
  • @phil294,如果可以显式安装证书,应该没问题。我正在开发一个只能在本地网络上使用的网页。这些设备可以由我准备,并由普通用户使用。这些设备甚至不应该有互联网连接。在这种情况下,证书颁发机构如何提供帮助?我应该能够安装我想要的任何证书。 (2认同)

Pas*_*äki 10

对我来说,我正在使用最新的 Chrome v.79。以下适用于 OS X。

创建新证书- 仅需要 如果您的默认证书已过期,如果自您的 apache 安装以来已经很长时间,则可能是这种情况。

使用来自letsencrypt.org的以下代码段为 localhost 创建新证书

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")
Run Code Online (Sandbox Code Playgroud)

通过将创建的 .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"
Run Code Online (Sandbox Code Playgroud)

然后重启服务器

让您的计算机信任您的自签名证书

单击 URL 左侧的挂锁图标,同时打开 https://localhostChrome 证书面板 在上述面板上,选择“证书”,右侧的窗口将打开。

选择 localhost,然后在“详细信息”上方的较大图标上,将图标拖到您的桌面。

您应该最终得到文件,例如localhost.cer在您的桌面上。

双击此文件或右键单击 -> 使用钥匙串访问权限打开

选择类别“所有项目”,右侧面板上应显示名称为“localhost”的证书。

所有项目

双击右侧面板上的“localhost”,应打开以下窗口

窗户

展开“信任”并在“使用此证书时”下选择“始终信任”

关闭窗口。现在应该信任这个证书。


Les*_*baa 7

对于本地开发,我们使用自签名证书。克服与 OSX 本地开发相关的问题。我们做了以下工作:

  • 创建您的证书并提供它
  • 导航到 https 网址
  • 打开开发工具>安全>查看证书
  • 将证书图标拖到桌面并双击它,这将打开钥匙串访问。
  • 拖动证书图标登录,打开登录并双击证书(应以开发域或类似名称命名)打开信任下拉菜单并选择始终信任。返回您的应用程序,关闭窗口并使用 https 重新打开,您现在应该为您的开发域设置了“假”https。


AJC*_*AJC 7

上面接受的答案对我不起作用。我在@ stef52所建议的问题中添加了--ignore-certificate-errors这个问题,它与Service Worker注册有关,并且有效

chrome.exe --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost/
Run Code Online (Sandbox Code Playgroud)

或对于MAC用户

 ./Google\ Chrome --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=https://localhost
Run Code Online (Sandbox Code Playgroud)

  • 在 chrome://flags 中找不到“ignore-certificate-errors”标志。知道为什么? (2认同)

Tho*_*sle 5

Pasi Matalam\xc3\xa4ki 和 Lesbaa 的答案是最正确的。我将解释原因并讨论这些概念。

\n

是的,您也许能够以忽略开发中站点的证书错误的模式启动 chrome - 即使您今天可以做到这一点,我的钱说将来会改变。因此,2021 年我不会走这条路。

\n

问题的关键在于,浏览器面临着一项非常艰巨的任务:将 PWA 和 serviceworkers 的力量交到开发人员手中,同时又要让这些东西远离黑帽黑客——或者至少使其切实可行某人不可能设置所有浏览器都信任并运行的恶意 PWA。

\n

当你从这个角度思考问题时,正确的解决方案就很明显了。您需要一个开发环境,为您的 PWA 提供浏览器信任的证书。

\n

我想说的是,作为一名开发人员和数十年的基础设施专业人士,这也难倒了我。但它不应该有。

\n

我看到很多评论说你不需要公共 IP 和 SSL 证书来进行基本的 Web 开发。我同意。但公平地说,开发 PWA 和 Service Worker 并不是基本的 Web 开发——正如我之前所说,它是必须得到保护的强大 Web 开发。

\n

此外,您不需要公共 IP,也不需要购买证书 - 不适用于单独的开发人员或公司中的企业开发商店。

\n

无论如何,您都必须获得浏览器信任的 CA 生成的证书。在公司内部网络和开发内部应用程序的背景下,您的基础设施团队很可能已经拥有公司所有内部 PC 信任的 CA,因此您将获得浏览器的完全锁定。您只需要了解如何获取由他们生成的证书,然后该证书就是您与您的http服务器或任何您用来提供服务的东西一起使用的证书。

\n

对于不在公司中的开发人员,您只需创建自己的 CA,然后使用该 CA 生成证书。以下是有关执行此操作的许多良好指南之一:https://www.ibm.com/docs/en/runbook-automation ?topic=certificate-generate-root-ca-key

\n

然而,接下来您必须做一件重要的事情 - 您必须将该 CA 安装到您的操作系统中,以便您的操作系统将其视为受信任的第三方 CA。如何在 Windows 和 MacOS 上执行此操作:https ://smallbusiness.chron.com/make-computer-trust-certificate-authority-57649.html

\n

在 Linux 上,这里有一个很好的线程,介绍如何在一种流行的风格上执行此操作:https://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu

\n

请注意,您可能不必这样做,但我还将使用 CA 生成的证书安装到了我的主机上。可能没有必要。

\n

您可能会遇到问题,因为您用来生成 CA/CRT 输出的工具的格式与操作系统期望的格式不同。如果您发现这是您的情况,有很多文章可以告诉您如何将证书转换为各种格式。

\n

现在,一些读者可能会想“但是我如何让它适用于我的整个团队等”。答案是,你真的不能。除非您的团队位于公司网络上,所有 PC 均受管理并且已设置为信任公司 CA 等。因此,如果这是您的用例,只需找到拥有内部 SSL 服务的基础设施团队并拥有讨论。

\n

虽然这看起来似乎是 PITA 必须经历所有这些,但请再次考虑一下,如果您能够以某种方式让其他 PC 信任您的证书,那将是多么危险。

\n

好消息是,当开发完成并进行部署时,您最终会得到一个公共 IP 和与该 IP 相关的证书等。所以这实际上只是一个开发环境问题。

\n

好吧,我想如果您的应用程序位于公司网络上并且只能在内部访问,则不会。在这种情况下,您只需从同一基础设施团队获得生产证书即可。

\n