首页 > 解决方案 > 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

标签: hyperledger-fabrichyperledger-explorer

解决方案


显然这是一个野生动物园错误:

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


推荐阅读