2014-10-17 117 views
2

我有一個小網站,我的任務是添加SSL證書。該網站在快遞運行這段代碼將SSL證書添加到Express站點

#!/usr/bin/env node 
var debug = require('debug')('one-west-end'), 
    app = require('../app'), 
    fs = require('fs'), 
    http = require('http'), 
    https = require('https'), 
    express = require('express'); 

var keyPath = '../ssl/key.key'; 
var certPath = '../ssl/cert.crt'; 
var caPath = '../ssl/cert.crt'; 

var port = 3000; 

if (app.get('env') === 'production') { 
    port = 80; 
} 

if (fs.existsSync(keyPath) && fs.existsSync(certPath)) { 
    port = 443; 

    var options = { 
     key: fs.readFileSync(keyPath), 
     cert: fs.readFileSync(certPath), 
    }; 

    var server = https.createServer(options, app).listen(port, function(){ 
     console.log("Express server listening on port " + port); 
    }); 

} else { 

    var server = app.listen(port, function() { 
     console.log('Server started on port ' + port); 
     debug('Express server listening on port ' + port); 
    }); 

} 

我沒有創造必要的文件來創建文件,但這個是guide這是使用,這essentilly呼籲:

> openssl genrsa -out ~/domain.com.ssl/domain.com.key 2048` 
> openssl req -new -key ~/domain.com.ssl/domain.com.key -out ~/domain.com.ssl/domain.com.csr` 

唯一我從購買證書的人那裏收到了一個包含兩個.crt文件的zip文件。對於一個內容是:

-----BEGIN CERTIFICATE----- 
.... 
-----END CERTIFICATE----- 

而另外一個

-----BEGIN CERTIFICATE----- 
.... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
.... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
.... 
-----END CERTIFICATE----- 

我使用的是在快遞文件的初始步驟中創建的密鑰文件,但我不知道是什麼文件是我的CA,哪一個是我的證書。我已經嘗試了一些不同的變體,但我總是在Chrome中看到「此網頁不可用」錯誤。

+0

This [article](http://greengeckodesign.com/blog/2013/06/15/creating-an-ssl-certificate-for-node-dot-js/)可能有幫助。 – chridam 2014-10-17 14:25:06

+0

你需要crt-bundle文件,我發現你還沒有創建SSL鏈。在這裏測試你的網站的SSL https://www.sslshopper.com/ssl-checker.html – Paramore 2014-10-17 14:46:28

回答

0

第一個文件可能是您的證書,第二個文件包含CA鏈。節點要求將CA鏈中的每個證書分別通過排列在一個數組中。它不支持單個文件中的多個級聯證書。

每個證書都需要放在自己的文件中(即ca1.crt,ca2.crtca3.crt)並單獨閱讀。

https.createServer({ 
    key: fs.readFileSync('domain.com.key'), 
    certificate: fs.readFileSync('domain.com.crt'), 
    ca: [fs.readFileSync('ca1.crt'), fs.readFileSync('ca2.crt'), fs.readFileSync('ca3.crt')] 
});