如何为 Chrome 中的不安全来源启用 crypto.subtle?

How to enable crypto.subtle for unsecure origins in Chrome?

在 Chrome 60 中,他们添加了一个 功能 禁用 non-TLS 连接的 crypto.subtle。出于安全原因,我们的产品需要 运行 本地服务器并将一些安全的远程连接转发到 localhost。因为 localhost 在技术上不是命名域,我们不能使用 TLS——有效地使 crypto.subtle 在 Chrome(和 chromium-based 浏览器如 Opera)中不可用,并迫使我们使用安全性较低的垫片,例如 asmCrypto.js。有没有办法告诉 Chrome 通过 headers 启用 crypto.subtle?有什么方法可以在我们可以告诉用户的设置中禁用新的功能(最坏的情况)?

您应该创建一个 CNAME 或 hosts 条目,将有效域指向 127.0.0.1,然后为该域获取(可能是自签名的)证书。

In Chrome 60, they added a feature that disables crypto.subtle for non-TLS connections

不完全是,自第一个受支持的版本(chrome 32?)

以来,crypto.subtle 已针对非安全来源禁用

但是 localhost 被认为是安全来源 https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features

“Secure origins” are origins that match at least one of the following (scheme, host, port) patterns:

  • (https, *, *)

  • (wss, *, *)

  • (*, localhost, *)

  • (*, 127/8, *)

  • (*, ::1/128, *)

  • (file, *, —)

  • (chrome-extension, *, —)

所以你应该可以在 http://localhost.

上使用Web Cryptographi Api

您的网站是否使用 HTTPS?可能是您遇到了混合使用 HTTPS 和 HTTP 的问题。 Chrome 将阻止与本地主机的 HTTP 连接。然后您可以为 127.0.0.1 生成一个自签名证书并使用 HTTPS 启动您的本地服务器(类似于@SLaks 的回答,但您不需要 hosts 条目)