https:// <ip>和<ip>之间的区别:443

时间:2017-10-13 19:47:23

标签: node.js https

我目前正在尝试理解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>:443curl https://<ip> 。第一个命令给出了Request received!的预期输出。但是,我从第二个命令收到此错误:curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to <ip>:443

现在,我是网络专家的FAR,但我希望这两个命令能以同样的方式运行。根据这个结果,我有两个问题:

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

2 个答案:

答案 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)

  
      
  1. 这两个命令有什么区别?
  2.   

:443只是端口配置,与80不同。它只是告诉服务器在该端口上提供内容。 443传统上是为HTTPS连接保留的端口,类似于80传统上是标准HTTP的方式。

  
      
  1. 如何更改配置,使第二个命令和第一个命令一样有效?
  2.   

您需要安装TLS证书。 HTTPS表示正在使用证书来保护连接,缺少该证书将导致请求失败。