我正在尝试为 http3 设置一个测试环境,只是为了学习。
到目前为止我做了什么:
- 使用 dns-01 创建了一个真正的让我们加密证书
- 使用实验性 CUIC 标志编译 node.js
- 支持 http3 的编译 curl
我创建了一个包含示例内容的脚本:
'use strict';
const key = getTLSKeySomehow();
const cert = getTLSCertSomehow();
const { createQuicSocket } = require('net');
// Create the QUIC UDP IPv4 socket bound to local IP port 1234
const socket = createQuicSocket({ endpoint: { port: 1234 } });
socket.on('session', async (session) => {
// A new server side session has been created!
// The peer opened a new stream!
session.on('stream', (stream) => {
// Let's say hello
stream.end('Hello World');
// Let's see what the peer has to say...
stream.setEncoding('utf8');
stream.on('data', console.log);
stream.on('end', () => console.log('stream ended'));
});
const uni = await session.openStream({ halfOpen: true });
uni.write('hi ');
uni.end('from the server!');
});
// Tell the socket to operate as a server using the given
// key and certificate to secure new connections, using
// the fictional 'hello' application protocol.
(async function() {
await socket.listen({ key, cert, alpn: 'h3-25' });
console.log('The socket is listening for sessions!');
})();
只是为了未来的读者,这些功能getTLSKeySomehow()
可以getTLSCertSomehow()
替换为:
const fs = require("fs")
const key = fs.readFileSync('privkey.pem')
const cert = fs.readFileSync('cert.pem')
network.http.http3.enabled
然后我尝试通过在 Firefox 中启用http3 并在about:config
. 有了地址https://my.dev.domain.name:1234/
,但这不起作用。
使用 curl 不起作用,可能值得注意的是我在 Windows 10 上使用 WSL。每次在 curl 上访问相同的 url 都会超时。只是为了检查我的设置是否正常:我可以验证 Firefox 和 curl 可以通过 http3 完美访问www.google.com 。
当我使用相同的密钥实现第二个 http2 端点时,它可以正常工作,没有任何证书警告。
如何调试我做错了什么?