hyperledger-fabric - Fabric(超级账本)资源管理器:由于 safari 上的内容安全策略而拒绝连接 wss
问题描述
我有一个问题/问题:我通过 Kubernetes 部署 Hyperledger Explorer(连接到我的 Fabric 网络)并通过入口连接到它的 ui。在除 safari 之外的任何浏览器上,我对资源管理器都没有问题,但在 Safari 上,登录后,我在浏览器的控制台中有一个空白页面和以下错误:
[Error] Refused to connect to wss://[MYURL] because it appears in neither the connect-src directive nor the default-src directive of the Content Security Policy. (x2)
你知道这是资源管理器的问题还是我的入口配置的问题?这是某种cors问题吗?
这是我的入口配置。我试图修改注释,删除一些,但没有运气。
ingress:
enabled: true
annotations:
external-dns.alpha.kubernetes.io/hostname: MYURL
external-dns.alpha.kubernetes.io/target: MYURL
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Apollo-Tracing
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
path: /
servicePort: ui
hosts:
- MYURL
解决方案
显然这是一个野生动物园错误:
https://bugs.webkit.org/show_bug.cgi?id=201591
根据 CSP 规范第 6.6.2.6 段,第 4 点
self
匹配,第二个匹配>条件(https://w3c.github.io/webappsec-csp/#match-url-to-source->expression):“'self'”,如果满足以下一个或多个条件,则返回“Matches”:
2.origin的host和url的host相同,origin的端口和url的端口或者是相同的或者是各自方案的默认端口,并且满足以下一个或多个条件:
- url 的方案是“https”或“wss ”
- origin的方案是“http”,url的方案是“http”或“ws”
这似乎在 Safari 中无法正常工作,在 Safari 中,我有一个服务工作者的“connect-src 'self'” CSP,但服务工作者拒绝连接到同一主机和端口上的 Web 套接字,记录错误
拒绝连接到 wss://SOMEHOST/ws,因为它没有出现在内容安全策略的 connect-src 指令中。
Chromium 有同样的问题,大约在一年前修复:https ://bugs.chromium.org/p/chromium/issues/detail?id=815142
相关 W3C CSP 问题:https ://github.com/w3c/webappsec-csp/issues/7
推荐阅读
- mysql - MS 服务器到 Mysql 链接服务器选项与 Web API
- python-3.x - 正则表达式:删除带有大写字母的单词
- apache-kafka - Kafka 消费者测试和报告的指标
- python - django 静态文件 - 404
- compiler-errors - rtorrent 编译错误:错误:#include 需要“文件名”或
- python - 没有返回的递归函数不断循环?
- python - 将 PyTorch 模型 state_dict 保存到 redis 缓存中
- json - json数组转换为formdata变成字符串
- python - Matplotlib:双轴上的网格线?
- python - 如何使用 python 将我的置信度数限制为小数点后两位?