Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generating an SSL Key to work with node.js

Tags:

I'm working to setup a SSL via GoDaddy to use with my node.js server on AWS EC2. I've been unable to get it to work.

Here's what I've tried:

Intended for the domain: files.mysite.com

On the server I run:

$ openssl req -new -newkey rsa:2048 -nodes -keyout files.mysite.key -out files.mysite.csr

Common Name: files.mysite.com
password: left empty

I then get the CSR: vim files.mysite.csr

I copy and paste from:

-----BEGIN CERTIFICATE-----
......... lots of stuff
-----END CERTIFICATE-----

There is an extra empty line at the end, which I leave and paste into the GoDaddy interface using rekey.

I then download the godaddy key which provides:

gd_bundle.crt
files.mysite.com.crt

Then in node I insert:

key: fs.readFileSync('server.key').toString(),
cert: fs.readFileSync('server.crt').toString()

I'm not sure what server.key is or server.crt given that GoDaddy provides two crt files?
Can you help?

like image 336
Rachel D Roy Avatar asked Nov 19 '12 05:11

Rachel D Roy


People also ask

How can you create an https server with NodeJS?

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.


2 Answers

GoDaddy uses an intermidiate certificate to sign your certificate. This has several advantages to both you and GoDaddy. But it takes a bit more work to get it to work (just a bit, mostly googling around).

In node.js you can install them like this:

require('https').createServer({
    key: fs.readFileSync('files.mysite.com.key'),
    cert: fs.readFileSync('files.mysite.com.crt'),
    ca: [fs.readFileSync('gd_bundle.crt')] // <----- note this part
}, app).listen(443);
like image 195
slebetman Avatar answered Sep 23 '22 21:09

slebetman


You should use .crt and .key files at the creation of your http server instance. The following snippet will give you the idea :

require('https').createServer({
    key: fs.readFileSync('/path/to/something.key'),
    cert: fs.readFileSync('/path/to/something.crt'),
}, app).listen(443);

If you have a passphrase for your key, you can pass it though as follows :

require('https').createServer({
    key: fs.readFileSync('/path/to/something.key'),
    cert: fs.readFileSync('/path/to/something.crt'),
    passphrase: 'your_secret_passpahrase'
}, app).listen(443);
like image 23
Tolga Akyüz Avatar answered Sep 22 '22 21:09

Tolga Akyüz