【问题标题】:Node.js https server for localhost本地主机的 Node.js https 服务器
【发布时间】:2021-09-20 22:25:02
【问题描述】:

我关注了这篇文章:https://flaviocopes.com/express-https-self-signed-certificate/ 用于为本地主机创建自签名证书以测试我的 node.js 应用程序。

但它不起作用:

node.js `v16.3.0`
openssl `(1.1.1f-1ubuntu2.3)` - `windows linux subsystem`

当我在浏览器中输入 https://localhost:3000 时出现错误:

localhost uses an unsupported protocol. ERR_SSL_VERSION_OR_CIPHER_MISMATCH

当我测试 curl -v https://localhost:3000 时,它给了我这个:

*   Trying 127.0.0.1:17001...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 17001 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS alert, handshake failure (552):
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

我的代码:

const https = require('https')
const app = express()

app.get('/', (req, res) => {
  res.send('Hello HTTPS!')
})

https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app).listen(17001, () => {
  console.log('Listening...')
})

【问题讨论】:

  • 请不要只链接到您认为您遵循的内容,而是准确地显示您的代码的样子。我的猜测是,您的服务器一开始并没有在端口 3000 上执行 HTTPS。
  • @SteffenUllrich 这里我已经添加了我的代码,唯一的区别是端口...

标签: node.js ssl curl localhost


【解决方案1】:

那篇(以及其他)文章包含我猜只有最新版本的 node.js 才会发生的错误。

读取文件{encoding: "utf8"}时需要添加编码选项,如下:

https.createServer({
  key: fs.readFileSync('server.key', {encoding: "utf8"}),
  cert: fs.readFileSync('server.cert', {encoding: "utf8"})
}, app).listen(17001, () => {
  console.log('Listening...')
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2018-04-30
    相关资源
    最近更新 更多