gpt4 book ai didi

node.js - https :// and :443 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:58 25 4
gpt4 key购买 nike

我目前正在尝试了解两个类似的curl 命令之间的区别。

我启动了一个 AWS EC2 Ubuntu 实例,并在该实例上安装了 node.js。然后我创建了一个名为 test-server 的新目录。在这个目录中,我运行了 npm init ,然后npm install express 。然后我编写了一个简单的 Web 监听器,名为 test-server.js ,看起来像这样:

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

app.get('/', function(req, res){
console.log('Got a request!')
res.send('Request received!\n')
})

app.listen(443, function(){
console.log('Server started')
})

最后,我使用命令 sudo node test-server.js 启动了服务器,服务器启动成功。

使用aws ec2 authorize-security-group-ingress ,我允许通过端口 443 从我的本地 IP 地址到实例进行通信。然后,我尝试使用以下 2 个curl 命令测试连接: curl <ip>:443curl https://<ip> 。第一个命令给出了预期输出 Request received! 。但是,我从第二个命令收到此错误: curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to <ip>:443 .

现在,我距离网络专家还很远,但我希望这两个命令能够以相同的方式发挥作用。根据这个结果,我有两个问题:

  1. 这两个命令有什么区别?
  2. 如何更改配置以使第二个命令与第一个命令一样有效?

最佳答案

您的应用程序正在 443 端口上提供常规 HTTP 服务。为了使用 https 协议(protocol),您需要使用加密 key

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

app.get('/', function(req, res){
console.log('Got a request!')
res.send('Request received!\n')
})

var httpsServer = https.createServer(credentials, app);

httpsServer.listen(443);

命令curl <ip>:443正在给定 ip 上打开到端口 443 的 http 连接, curl https://<ip>正在打开给定 ip 的 https 连接.

如果您希望对流量进行加密,请坚持 https://版本(以及服务器的扩展代码)。

关于node.js - https ://<ip> and <ip>:443 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com