我目前正在尝试了解两个类似的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')
})
Run Code Online (Sandbox Code Playgroud)
最后用命令启动服务器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。
现在,我距离网络专家还很远,但我希望这两个命令能够以相同的方式运行。根据这个结果,我有两个问题:
您的应用程序在 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);
Run Code Online (Sandbox Code Playgroud)
命令curl <ip>:443正在打开到给定端口 443 的 http 连接ip,curl https://<ip>正在打开到给定的 https 连接ip。
如果您希望加密流量,请坚持使用https://版本(以及服务器的扩展代码)。
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |