将SSL证书添加到Express站点

时间:2014-10-17 14:18:12

标签: node.js ssl

我有一个小网站,我的任务是添加一个ssl证书。该网站使用此代码以快递方式运行

#!/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,它必须要求:

> 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,哪个是我的证书。我尝试了一些不同的变体,但我似乎总是得到一个"这个网页不可用"铬中的错误。

1 个答案:

答案 0 :(得分:0)

第一个文件可能是您的证书,第二个文件包含CA链。 Node要求CA链中的每个证书都在数组中单独传递 。它不支持单个文件中的多个连接证书。

每个证书都需要放在自己的文件中(例如ca1.crtca2.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')]
});
相关问题