让你的node、express服务器支持https

1 篇文章 0 订阅
1 篇文章 0 订阅

让你的node、express服务器支持https

http与https

  • HTTP: 超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

  • HTTPS:(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

  • HTTPS和HTTP的区别

https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

申请证书

上面说到https需要得到ca申请证书,当然我们可以使用自签证,例如openSLL,当然也有免费发放证书的,这里我们向sslforfree申请免费证书

申请的流程这里稍微要注意一点的是域名验证当中的证书路径,具体流程参考使用教学

  • 1.在主页直接输入域名
    avatar

  • 2。域名验证,这里我们选择Manual Verification
    avatar

  • 3.下载下图中的两个文件,将这两个文件放置到服务器的静态路径的跟目录,
    avatar
    例如:我的服务器系统结构如下,而且在index文件当中定义了静态路径为public/pages,因此我们需要在这里进行操作,即在pages文件夹下面新建文件.well-known,然后在.well-known文件夹下面新建文件夹acme-challenge,最后将之前下载的两个验证文件放入到acme-challenge文件夹中;
    avatar

  • 4.当验证通过,打包下载给出的3个文件,如下:
    avatar
  • 5.将下载下来的3个文件上传的服务器,这里我放置在服务器根目录新建的key文件夹

修改启动文件

之前的启动文件是基于express编写的,大致如下:

const express = require('express');
const fs = require('fs');
const path = require('path');


const app = express();

app.use(express.static('public'));

app.use(express.static(path.resolve(__dirname, 'public/pages')));

const router_home = require('./routers/index.js');
app.use('/', router_home);

app.get('*', function(req, res){
    res.sendFile(path.resolve(__dirname, 'public/pages/404.html'), {
        title: 'No Found'
    })
});
app.listen(80);

添加https模块支持https

const express = require('express');
const fs = require('fs');
const path = require('path');

const http = require('http');
const https = require('https');

const app = express();

app.use(express.static('public'));

app.use(express.static(path.resolve(__dirname, 'public/pages')));

const router_home = require('./routers/index.js');
app.use('/', router_home);

app.get('*', function(req, res){
    res.sendFile(path.resolve(__dirname, 'public/pages/404.html'), {
        title: 'No Found'
    })
});
// app.listen(80);

var options = {
  ca: fs.readFileSync('key/ca_bundle.crt'),
  key: fs.readFileSync('key/private.key'),
  cert: fs.readFileSync('key/certificate.crt')
};


var httpServer = http.createServer(app);
var httpsServer = https.createServer(options, app);

httpServer.listen(80, function() {
    console.log('HTTP Server is running on: http://localhost:%s', 80);
});
httpsServer.listen(443, function() {
    console.log('HTTPS Server is running on: https://localhost:%s', 443);
});

总结

最后打开网页查看,完美支持

  • http访问

avatar

  • https访问

avatar

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hustchenshu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值