Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

node.js https server not loading responding

Tags:

node.js

https

I am trying to start a https node.js server.

I started by creating a certificate and key following this guide:

http://gaboesquivel.com/blog/2014/nodejs-https-and-ssl-certificate-for-development/

and I placed them in my /app_name/security/keys directory.

To start my https server, I have the following:

const https         = require('https'),
      fs            = require('fs');

if(app.get('env') === 'development') {

    console.log('dev env!!'); //prints correctly
    console.log('port: ' + port); //prints correctly
    const options = {
        key: fs.readFileSync('./security/keys/key.pem'),
        cert: fs.readFileSync('./security/keys/cert.pem')
    };   

    https.createServer(options, (req, res) => {

        console.log('https good to go'); //this does not print out anything

    }).listen(port);

}

When I go to https://localhost:3000, the page throws an error

This site can’t be reached

localhost unexpectedly closed the connection.
ERR_CONNECTION_CLOSED

But there's no error on the server side console. Furthermore, if i go to the regular localhost:3000, I get:

The localhost page isn’t working

localhost didn’t send any data.
ERR_EMPTY_RESPONSE

Can someone help?

Thanks in advance!

---- UPDATE ----

I'm running on port 443 now. Initially I got an error:

Error: listen EACCES 0.0.0.0:443 so I ran:

sudo NODE_ENV=development nodemon app

Which did not throw any errors. However, when I went to https://localhost:443, I get:

This site can’t be reached

localhost unexpectedly closed the connection.
like image 948
Trung Tran Avatar asked Mar 31 '16 14:03

Trung Tran


People also ask

What is HTTP createServer in node JS?

The http. createServer() method turns your computer into an HTTP server. The http. createServer() method creates an HTTP Server object. The HTTP Server object can listen to ports on your computer and execute a function, a requestListener, each time a request is made.

Can you create an HTTPS Web server with node js?

To built an HTTPS server with nodeJs, we need an SSL (Secure Sockets Layer) certificate. We can create a self-signed SSL certificate on our local machine. Let's first create an SSL certificate on our machine first. After running this command, we would get some options to fill.

What is the difference between HTTP and HTTPS in node JS?

HTTP: When the data transfer in HTTP protocol it just travels in the clear text format. HTTPS: It simply makes encryption when the request is traveling from the browser to the web server so it is tough to sniff that information. It basically works on two things: SSL (Secure Socket Layer)


1 Answers

I used express as a web server. to install express:

npm install express --save

I took your code, added the usage in express, generated certificate using openssl, and executed it - all looked good, the server was up, listening to port 3000 over https.

My code (which is based on your code...):

var app = require('express')();
const https         = require('https'),
      fs            = require('fs'),
      port          = 3000;

if(app.get('env') === 'development') {

    console.log('dev env!!'); //prints correctly
    console.log('port: ' + port); //prints correctly
    const options = {
        key: fs.readFileSync('/tmp/private.key'),
        cert: fs.readFileSync('/tmp/publickey.crt')
    };

    https.createServer(options, (req, res) => {

        console.log('https good to go'); //this does message appears!!! ^_^

    }).listen(port);

}

Please pay attention to the way I defined app: var app = require('express')();

You can split this definition into two line if it's more readable:

var express = require('express');
var app = express();
like image 180
yaniv israel Avatar answered Oct 08 '22 18:10

yaniv israel