2015-11-06 84 views
0

我試圖運行nodejs應用程序來處理我的PHP項目。問題是我認爲在服務器中啓用SSL。nodejs無法使用SSL

我有兩個文件,我在我的根目錄中找到SSL安裝後:domain.com.csr和domain.com.key,我試圖在創建https服務器時將它們連接到連接,但沒有爲我工作。

到目前爲止,我有這樣的代碼:

var socket = require('socket.io'); 
var express = require('express'); 
var http = require('http'); 

var app = express(); 
var server = http.createServer(app); 

var io = socket.listen(server); 

app.get('/test', function(req, res) { 
    res.send('hello world'); 
    console.log('visited test') 
}); 

io.sockets.on('connection', function (client) { 
    console.log("New client !"); 

    client.on('message', function (data) { 
     console.log('Message received ' + data.name + ":" + data.message); 

     io.sockets.emit('message', {name: data.name, message: data.message}); 
    }); 
}); 

server.listen(8080, function() { 
    console.log('listen me on: 8080'); 
}); 

和它工作得很好,當我試圖訪問http://ip:8080/test所以它意味着節點服務器工作正常,但是當我嘗試創建我的觀點套接字連接文件var socket = io.connect('http://ip:8080');它給了我錯誤:

The page at 'https://www.domain.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://ip:8080/socket.io/?EIO=3&transport=polling&t=1446818946199-0'. This request has been blocked; the content must be served over HTTPS. 

所以這個問題是不夠清楚,但如何處理呢? 也我試過這個連接:

​​

但結果是404 GET錯誤。如何處理它?

更新

現在的代碼部分我應該使用,但不知道如何讓現有的SSL證書的服務器中。

var socket = require('socket.io'); 
var express = require('express'); 
var https = require('https'); 
var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('path/to/key.pem'), // dont have 
    cert: fs.readFileSync('path/to/cert.cert') // dont have 
}; 

var app = express(); 
var server = https.createServer(options, app); 

var io = socket.listen(server); 

app.get('/test', function(req, res) { 
    res.send('hello world'); 
    console.log('visited test') 
}); 

io.sockets.on('connection', function (client) { 
    console.log("New client !"); 

    client.on('message', function (data) { 
     console.log('Message received ' + data.name + ":" + data.message); 

     io.sockets.emit('message', {name: data.name, message: data.message}); 
    }); 
}); 

server.listen(443, function() { 
    console.log('listen me on: 443'); 
}); 
+0

.csr不是證書。這是證書請求。另外,你的代碼不會顯示你在任何地方創建你的「https」服務器。 – Joe

+0

現在很明顯,這就是我要求的社區。他們不工作的原因是沒有生成.pem和.cert文件。代碼被粘貼到現在。 –

+0

您需要先獲得證書。 CSR不會幫助。然後,您需要使用具有'https'類的cert + key而不是'http'來設置您的偵聽器。 – Joe

回答

1

我認爲你需要聯繫您的證書頒發機構(即發行你的第一個SSL證書的組織),並拿到證書的複印件(path/to/key.pempath/to/cert.cert),或在某個地方找到現有的服務器上現有的密鑰。

如果您運行的是Apache,那麼您的配置文件將包含一個標有SSLCertificateFileSSLCertificateKeyFile的.cert和.pem文件路徑值的部分,然後更新節點應用中的路徑以指向它們。您還必須確保您的SSL證書符合要求(例如,如果您的節點應用程序在不同的域上運行,則需要爲多域,或者需要通配符SSL證書才能在子域上運行您的節點應用程序)。

您找到的domain.com.csrdomain.com.key文件是用於生成初始SSL證書的私鑰和證書請求,並且不會執行任何操作來在您的節點應用上啓用SSL。