2013-07-19 1 views
11

Sto provando ad installare un server HTTPS locale per il test in Sails.js? Non riesco a trovare alcun puntatore come farlo in sails.js? Per express,come configurare https in sails.js

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

// This line is from the Node.js HTTPS documentation. 
var options = { 
    key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), 
    cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') 
}; 

// Create a service (the app object is just a callback). 
var app = express(); 

// Create an HTTP service. 
http.createServer(app).listen(80); 
// Create an HTTPS service identical to the HTTP service. 
https.createServer(options, app).listen(443); 

Qualche idea su sails.js?

+0

http://jsbot.io/node/http-and-https-handle-with-sailsjs –

+0

[Guarda questa risposta su StackOverflow] (http://stackoverflow.com/a/37432523/3567365) – user3567365

risposta

4

Se si utilizza l'ultima versione v0.9 (e forse alcune versioni di v0.8), dare un'occhiata all'interno di config/bootstrap.js. Dovresti essere in grado di accedere alla tua app Express tramite il contesto sails.express. Da lì penso che si dovrebbe essere in grado di fare con essa ciò che si vuole ...

anche qualcuno nel canale irC#sailsjs detto questo ha funzionato per loro

module.exports.bootstrap = function (cb) { 
    var fs = require('fs'); 
    sails.config.express.serverOptions = { 
     key: fs.readFileSync('ssl/key.pem'), 
     cert: fs.readFileSync('ssl/cert.pem') 
    }; 
    cb(); 
}; 
+1

Kelt, funziona bene. Per i test locali dovremmo usare 8443 invece di 443 per evitare qualche complicazione. – lostShip

+0

va bene se sono file .key e .cert? Hanno bisogno di essere .pems? – light24bulbs

2

È possibile che questo non funziona per le vele v0.9.3. Ho finito con il seguente workaround. (Fs richiedono prima ovviamente)

express : {serverOptions : { 
    key: fs.readFileSync('ssl/server-key.pem'), 
    cert: fs.readFileSync('ssl/server-cert.pem'), 
}} 
4

Forse è solo me, ma ho potuto ottenere uno di quanto sopra lavorare per vele v0.9.7, ma ho capito di lavoro modificando il file config/local.js in questo modo;

var fs = require('fs'); 

module.exports = { 
    port: process.env.PORT || 1337, 
    environment: process.env.NODE_ENV || 'development', 

    express: { serverOptions : { 
    key: fs.readFileSync('ssl/key.pem'), 
    cert: fs.readFileSync('ssl/cert.pem') 
    } 
    } 
}; 

Ora non sto dicendo che questo è il modo "corretto" per farlo, comunque funziona per me!

Shameless self promotion More about this on my blog! Fine sfacciata auto promozione: D

+0

Gli altri due metodi mi hanno dato un errore di connessione SSL sul browser quando ho provato a connettermi, ma questo ha funzionato bene. – crzrcn

2

Questo contributo migliora la soluzione per supportare applicazioni mobili native e vecchi browser.

Questa soluzione ha funzionato molto bene per me quando utilizzavo un browser Web moderno per accedere al mio sito SSL. Tuttavia, quando ho tentato di effettuare richieste utilizzando la libreria di AFNetworking, non ho riconosciuto il certificato SSL. Ciò era dovuto all'applicazione iPhone che richiedeva i certificati SSL intermedi (a volte chiamato ca bundle).

È possibile aggiungere il certificato intermedio utilizzando il seguente codice.

express: { 
    serverOptions : { 
    key: fs.readFileSync('ssl/key.pem'), 
    cert: fs.readFileSync('ssl/cert.pem'), 
    ca: fs.readFileSync('ssl/intermediate.pem') 
    } 
} 

Quando si crea si certificato intermedio (che può normalmente essere scaricato dal proprio provider di certificati SSL), è importante per ottenere l'ordine dei certificati di destra. Questo comando linux ha davvero aiutato con il debug.

OpenSSL s_client -connect yoursite.com:443 -showcerts

9

Per sails.js versione 0.10, includere questo in config/locals.js (se non esiste locals.js, crearlo):

var fs = require('fs'); 

module.exports = { 

    ssl : { 
     key: fs.readFileSync('path-to-key.key'), 
     cert: fs.readFileSync('path-to-crt.crt') 
    } 

}; 

Fonte: https://stackoverflow.com/a/28565113/2459071

+0

Questo ha funzionato con v0.11.2. Vorrei aggiungere che se lo vuoi configurato per ambiente, questa configurazione ti servirà probabilmente meglio in development.js o production.js. Local.js è più destinato a essere l'ambiente locale di uno sviluppatore che non viene mai controllato in sovversione. – ryanm

+0

Questo dovrebbe funzionare. http://jsbot.io/node/http-and-https-handle-with-sailsjs –

+0

Grazie @NishchitDhanani! – JosMarRivera