我正在尝试将Websocket服务器移至wss,因为github页面需要https证书,为此,我需要:
const server = https.createServer({
cert: fs.readFileSync('/path/to/cert.pem'),
key: fs.readFileSync('/path/to/key.pem')
});
const wss = new WebSocket.Server({ server });
我的问题是:我在哪里可以获得此证书和密钥? 老实说,我对https的工作原理一无所知,只是在这里寻求建议。 顺便说一句,我正在使用快递,所以我需要以某种方式处理它。当前在本地主机测试中的服务器,但是它通常在aws linux ami上运行
答案 0 :(得分:1)
您需要具有随附密钥的https证书才能运行任何https服务器。使用LetsEncrypt.com来获取它们。 LetsEncrypt网站提供了有关此说明。互联网上有关于如何执行此操作的教程,以及一个npm package called Greenlock来帮助您使其自动化。为了使LetsEncrypt正常工作,您需要通过在DNS或网站的http版本中放置一些秘密令牌字符串来证明自己控制了相关域。
或者,如果您在已经为其公共Web服务器拥有证书的组织中工作,则可以要求运行该服务器的人从您的组织使用的任何证书颁发机构那里购买证书。
当您站起来运行任何类型的基于节点的https服务器的机器时,通常会在某个地方创建一个目录来保存您的秘密。您的证书和私钥就是这样的秘密。
为此,您可以使用名为/usr/local/secrets
的目录,并将证书和密钥文件放置在该目录中。对于存储服务器需要的各种API密钥和其他秘密内容的文件,它也非常有用。
所以您的代码会说
const server = https.createServer({
cert: fs.readFileSync('/usr/local/secrets/cert.pem'),
key: fs.readFileSync('/usr/local/secrets/key.pem')
});
const wss = new WebSocket.Server({ server });
不要将您的秘密提交给git或任何其他源代码控制系统。始终将它们放在应用程序的目录层次结构之外。否则他们将不会保密。您真的不希望您的https证书和密钥在intertoobz周围浮动。