我一直在尝试运行WebTransport实现的一些示例,例如
- https://github.com/quic-go/webtransport-go/tree/master/interop
- https://github.com/streaming-university/public-moq-demo/tree/main的
- https://github.com/adriancable/webtransport-go-example的
但是当我尝试通过浏览器访问它们时,所有的示例都得到了相同的错误,即“打开握手失败”。
Opening Handshake Failed
我使用以下命令创建了一个自签名证书
openssl req -newkey rsa:2048 -nodes -keyout cert.key \
-x509 -out cert.pem -subj '/CN=Test Certificate' \
-addext "subjectAltName = DNS:localhost"
字符串
我通过wsl 2运行它们,并从Google Chrome Canary版本121访问客户端。
--origin-to-force-quic-on=localhost:4443 localhost:1234 --allow-insecure-localhost --ignore-certificate-errors-spki-list=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
型
有没有人有这个问题,或者知道我错过了什么?
1条答案
按热度按时间xv8emn3q1#
这是一个主要的头痛,我在过去的几天,以及试图得到简单的证明概念旋转起来。
你提到你使用的是wsl 2--这就是故障点。wsl 2不支持转发分段的UDP数据包,https://github.com/microsoft/WSL/issues/6351。看起来在某些情况下,人们在
networkingMode=mirrored
和hostAddressLoopback=true
的[experimental]
设置上运气不错,但据我所知,情况似乎并非如此。您需要定位您的WSL 2 IP,例如172.6.2.1(WSL中的
ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
)还有几件事--据我所知,RSA密钥不受支持。我成功连接到本地QUIC / WebTransport服务器的方法如下:
1.通过
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -x509 -nodes -days 10 -out ./certificate.pem -keyout ./certificate.key -subj '/CN=Test Certificate' -addext "subjectAltName = DNS:localhost"
生成一对有效期<14天的ECDSA密钥1.使用
openssl x509 -in certificate.pem | openssl dgst -sha256 -binary | openssl enc -base64
计算公钥的base64哈希1.启动服务器并使用tls选项的那些键。
1.在repl中连接,而不使用Chrome标志:
字符串
FWIW我使用https://github.com/adriancable/webtransport-go实现,因为它目前支持数据报。我仍然是整个生态系统的新手,这一切似乎都很困难,很难设置。有一个当前的问题记录在 * 其他 * webtransport-go repo here https://github.com/quic-go/webtransport-go/issues/112在mac arm 64上的人无法以相同的方式连接。我仍然能够成功地获得与WSL IP和WebTransport选项的连接,普通的Chrome,没有金丝雀或旗帜的必要。