NodeJS下的多SSL解析

现在很多网站都会申请或是购买SSL,目的就是为了站点的数据传输安全。

单域名的SSL,基本上都是免费的。但二级域名的通配SSL,却是要收费的,而且还不便宜。

本文对不想花钱买多个或通配SSL,但又想有几个二级域名可以用HTTPS访问的,可以参考一下。

如果是商用或是二级域名有很多很多个都需要做HTTPS访问的,还是建议花点钱。

 

以现实举例:

本人已申请了免费单域名SSL的域名是:https://www.comecode.net,直接通过HTTPS访问这个域名时,不会出现安全提示。

但如果访问https://abc.comecode.net时,则会出现安全提示。

本文就是来解决个问题。

 

1、单域名的SSL,免费申请好(使用Nginx版本的证书)。

比如,我现在已经申请了两个:www.comecode.net 与 abc.comecode.net。

(注:一般都是一个二级域名算一个SSL申请,毕竟免费的,不是通配型的SSL。www前缀也是一个二级域名哦)

 

2、本人服务器用的是nodejs,如果您的服务器不是,则只能参考参考了。

 

3、直接贴源代码

var express = require('express');
var app = express();
var fs = require('fs');

//http(80端口)转https(443端口)代码部分==================================
var http = require('http');
var app80 = express();
var toHttps = require('express-to-https')['basic'];
app80.use(toHttps);//http自动转https
http.createServer(app80).listen(80, '0.0.0.0',function () { console.log('HTTP APP started on port 80'); });


//https(443端口)代码部分==================================
var https = require('https');
//SSL文件存放地,请根据自己的情况改
var SSLKey_www = fs.readFileSync("./server/ssl/ssl.key", 'utf8');
var SSLCert_www = fs.readFileSync("./server/ssl/ssl.crt", 'utf8');


//以前是单域名的SSL,代码放这里方便大家做对比
/* //单域名SSL验证
var KeyCert = {
    'key': SSLKey_www,
    'cert':SSLCert_www,
    rejectUnauthorized: false
};
https.createServer(KeyCert, app).listen(443,'0.0.0.0', function () { console.log('HTTPS APP started on port 443'); });
//*/


//多个二级域名SSL验证
var SSLKey_abc = fs.readFileSync('./server/ssl/abc.key', 'utf8');
var SSLCert_abc = fs.readFileSync('./server/ssl/abc.crt', 'utf8');
var tls = require('tls');
const KeyCerts = {
    'abc.comecode.net': tls.createSecureContext({
        key: SSLKey_abc,
        cert: SSLCert_abc
        ,rejectUnauthorized: false
    }),
    'www.comcode.net': tls.createSecureContext({
        key: SSLKey_www,
        cert:SSLCert_www
        ,rejectUnauthorized: false
    })
};
var getKeyCert = {
    SNICallback: function(domain, cb) {
        if (KeyCerts[domain]) {
            if (cb) {
                cb(null, KeyCerts[domain]);
            } else {
                return KeyCerts[domain];//兼容Node老版本
            }
        } else {//一定要设置默认值,这样访问xyz.comecode.net时,也可以访问,只是会有安全性提示
            if (cb) {
                cb(null, KeyCerts['www.comcode.net']);
            } else {
                return KeyCerts['www.comcode.net'];
            }
        }
    }

    ,key: SSLKey_www
    ,cert: SSLCert_www
    ,rejectUnauthorized: false
};
https.createServer(getKeyCert, app).listen(443,'0.0.0.0', function () { console.log('HTTPS APP started on port 443'); });

后面的代码,就全平常无异了。

到此,已经可以直接HTTPS访问:https://www.comecode.net与https://abc.comecode.net。

如果有三个、四个及更多的二级域名SSL访问,请别问我要怎么做,上面都已经做好了架子,直接套用即可。

(注:多个不同主域名SSL的访问,用上面的方法一样可以实现。)

如果对您有用,点个赞再走!!!Bailee 了个Bye!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值