NodeJS och SSL-certifikat (https)

nodejs-https-tls

Denna guide beskriver hur du får A+ rating hos SSLlabs med hjälp av NodeJS. Det krävs ett antal åtgärder för att få högsta rating samt så utesluter du även äldre webbläsare.

Först och främst måste du se till att använda helmet som gör att du kan använda HSTS. Och helmet-modulen finns tillgänglig via npm.

var helmet = require('helmet');

var ONE_YEAR = 31536000000;
app.use(helmet.hsts({
    maxAge: ONE_YEAR,
    includeSubdomains: true,
    force: true
}));

Nästa steg är att använda sig av en ny io.js som innehåller följande patch. Den patchen stänger av dåliga krypteringsalgoritmer såsom RC4 och ser till att ECDHE används som standard.

Koden sedan ser ut enligt följande där key.pem är privata nyckeln och cert.pem är certifikatet.

var https = require('https');
var fs = require('fs');

var options = {
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem'),
    ciphers: [
        'ECDHE-RSA-AES256-SHA384',
        'DHE-RSA-AES256-SHA384',
        'ECDHE-RSA-AES256-SHA256',
        'DHE-RSA-AES256-SHA256',
        'ECDHE-RSA-AES128-SHA256',
        'DHE-RSA-AES128-SHA256',
        'HIGH',
        '!aNULL',
        '!eNULL',
        '!EXPORT',
        '!DES',
        '!RC4',
        '!MD5',
        '!PSK',
        '!SRP',
        '!CAMELLIA'
    ].join(':'),
    ecdhCurve: 'prime256v1', // this is the default
    honorCipherOrder: true,
    secureOptions: require('constants').SSL_OP_NO_SSLv3|require('constants').SSL_OP_NO_TLSv1|require('constants').SSL_OP_NO_SSLv2
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000, '127.0.0.1');

Det var allt. Gå nu in på SSLlabs.com och testa så att konfigurationen fungerar som den ska.