I got myself this files from Certificate Authority:
- domain.com.p7b
- domain.com.crt
- domain.com.ca-bundle
And I tried this little code:
var express = require('express'); var app = express(); var fs = require("fs"); var https = require('https'); var privateKey = fs.readFileSync('domain.com.p7b').toString(); var certificate = fs.readFileSync('domain.com.crt').toString(); var ca_bundle = fs.readFileSync('domain.com.ca-bundle').toString(); var credentials = { key: privateKey, ca : ca_bundle, cert: certificate}; https.createServer(credentials,app).listen(8080, function () { console.log('Example app listening on port 8080!'); });
After start script, I get the following error:
(err): at Object.createSecureContext (_tls_common.js:87:19) (err): at Server (_tls_wrap.js:721:25) (err): at new Server (https.js:17:14) (err): at Object.exports.createServer (https.js:37:10) (err): at Object.<anonymous> (/utec_temp/https/web.js:27:7) (err): at Module._compile (module.js:435:26) (err): at Object.Module._extensions..js (module.js:442:10) (err): at Module.load (module.js:356:32) (err): at Function.Module._load (module.js:311:12) (err): Error: error:0906D06C:PEM routines:PEM_read_bio:no start line (err): at Error (native) (err): at Object.createSecureContext (_tls_common.js:87:19) (err): at Server (_tls_wrap.js:721:25) (err): at new Server (https.js:17:14) (err): at Object.exports.createServer (https.js:37:10) (err): at Object.<anonymous> (/utec_temp/https/web.js:27:7) (err): at Module._compile (module.js:435:26) (err): at Object.Module._extensions..js (module.js:442:10) (err): at Module.load (module.js:356:32) (err): at Function.Module._load (module.js:311:12)
Most examples you can google on the Internet use self-signed certificates , but what happend when I work in a real environment?
My little code works in development with self signed keys , as in this example:
https://stackoverflow.com/a/24283204/3957754
I researched and I found this:
https://www.namecheap.com/support/knowledgebase/article.aspx/9705/0/nodejs
http://www.backwardcompatible.net/155-Setting-up-real-SSL-Nodejs-Express
Node.js https pem error: routines:PEM_read_bio:no start line
but I could not correct the error.
Also I reduced to one file :
var credentials = {cert: certificate};
And the error is the same. So I thought that maybe a format error from windows to unix. I used dos2unix tool and the error is the same.
My node version is 4.4.7
Any help is appreciated.
Thanks in advance!
UPDATED
My answer in the answers section works for node.js !! but in a elegant or healthy way, DONT MODIFY YOUR APP CODE and leave this work to apache , nginx, haproxy or some load balancer:
# apache 2.2 example SSLCertificateFile /some/folder/certificate.crt SSLCertificateKeyFile /some/folder/initial.key SSLCertificateChainFile /some/folder/certificate.ca-bundle
This kind of complexity must be transparent for the development team and should be managed by sysadmin,infrastructure or another teams related to networks of your company.