我编写了一个用于安全消息传输的小网络应用程序,以了解有关加密的更多信息,并想向我的朋友展示它并让他们玩一下,所以我将它托管在我的小服务器上,并惊讶地发现 Web Crypto API(我竭尽全力开始工作,因为它的错误消息不是很具体)需要 SSL(有点违背了在浏览器中实现自己的加密方案的目的)!
我已经在该服务器上使用 SSL 运行了另一个 API,但我不想合并它们,而是想问:有没有办法绕过 Web Crypto API 的安全套接字要求,或者是否有另一个库允许我使用在非安全环境中具有相同或相似的功能?
我Insecure origins treated as secure在 Chrome 中使用“”标志用于开发目的,并且我添加了一些网站,例如http://myWebsite:port. 它在 Chrome 中运行得很好。现在我需要在 Firefox 中使用相同的功能,但找不到它。在 Firefox 中可以这样做吗?
我有一个可供客户在 Intranet 中使用的 Web 应用程序。它使用需要安全上下文的功能,例如getUserMedia. 如今,最佳实践是什么?
客户的技术知识很少,而且应用程序可能只是路过的人使用的,所以在浏览器上创建和安装证书颁发机构太麻烦了。尽管在安装过程中要求互联网连接是可以接受的,但不能保证始终有互联网连接。TLS 证书的警告消息是可以接受的(不理想,但可以解释),但自签名证书不能解决问题,因为它们仍然被认为是不安全的上下文。我无法控制 Intranet,并且运行该服务的设备只能通过 IP 访问,无需主机名或本地 DNS 服务器。
有哪些替代方案可以获得尽可能无摩擦的安全环境?
假设下面的页面是从https://127.0.100.1. 该页面作出了XMLHttpRequest 到http://127.0.100.2。这似乎是混合内容:页面通过安全连接加载,资源通过不安全连接加载。浏览器应阻止混合内容。然而,下面的页面工作正常。* 为什么工作:为什么请求没有被阻止?
更新:除了已接受的答案之外,还可以将浏览器配置为阻止此类地址的混合内容。
* Wireshark 确认浏览器未通过安全连接加载资源。
<html>
<body>
<img id="dst"/>
<script>
let xhr = new XMLHttpRequest();
xhr.open('get', 'http://127.0.100.2/img.jpg');
xhr.responseType = 'blob';
xhr.onload = function(){
document.getElementById('dst').src = URL.createObjectURL(xhr.response);
}
xhr.send();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) javascript browser xmlhttprequest mixed-content secure-context
TL;DR:网站通过 HTTPS 提供服务,需要通过未加密的通道 (ws:// url) 访问 WebSockets 服务器。浏览器不喜欢这样。
加密 Websocket 是可能的,但不方便 - 没有可以签署证书的可信机构,因此需要为每个客户端手动安装它。我想把它作为最后的手段。
该网站必须通过 HTTPS 提供服务,并且不能降级为 HTTP。
有没有其他方法可以绕过这个限制?我尝试了内容安全策略,但它不起作用。
我正在使用 HTML5 地理定位功能。我的代码在“本地主机”中运行良好,但在“子域”中出现问题。我的代码如下:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
console.log("Geolocation is not supported by this browser.");
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成一个自签名证书,以便我的本地开发环境使用 HTTPS,但我遇到了一些问题。这样做的原因是我想通过我的本地网络(通过我的本地 IP 192.168.1.155)在我的手机上测试推送通知,并且通知只能通过安全上下文工作。
它似乎只在我去的时候工作localhost:8080,并且在导航到时仍然不安全127.0.0.1:8080。当我导航到127.0.0.1:8080Chrome 的安全页面时说:This site is missing a valid, trusted certificate (net::ERR_CERT_COMMON_NAME_INVALID).
这是我用来生成证书的设置:
请求.cnf:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = 127.0.0.1
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = 127.0.0.1
DNS.3 = 192.168.1.155
Run Code Online (Sandbox Code Playgroud)
openssl req -newkey rsa:2048 -x509 …
ssl ×3
javascript ×2
security ×2
browser ×1
cryptography ×1
encryption ×1
firefox ×1
html ×1
https ×1
node.js ×1
openssl ×1
websocket ×1