我目前正在尝试理解2个类似卷曲命令之间的区别。
我启动了AWS EC2 Ubuntu实例,并在实例上安装了node.js.然后我创建了一个名为test-server的新目录。在此目录中,我运行了npm init
,然后是npm install express
。然后我编写了一个名为test-server.js
的简单Web侦听器,如下所示:
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>:443
和curl https://<ip>
。第一个命令给出了Request received!
的预期输出。但是,我从第二个命令收到此错误:curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to <ip>:443
。
现在,我是网络专家的FAR,但我希望这两个命令能以同样的方式运行。根据这个结果,我有两个问题:
答案 0 :(得分:4)
您的应用程序在443端口上提供常规HTTP服务。要使用https协议,您需要使用加密密钥
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://
版本(以及服务器的扩展代码)。
答案 1 :(得分:1)
- 这两个命令有什么区别?
醇>
:443只是端口配置,与80不同。它只是告诉服务器在该端口上提供内容。 443传统上是为HTTPS连接保留的端口,类似于80传统上是标准HTTP的方式。
- 如何更改配置,使第二个命令和第一个命令一样有效?
醇>
您需要安装TLS证书。 HTTPS表示正在使用证书来保护连接,缺少该证书将导致请求失败。