HTTP正在离我们远去,HTTPS成为唯一的选择
从2017年1月份起,Chrome浏览器将会把采用http协议的网站标记为“不安全”网站。
面对变幻的互联网安全局势,http实在太过陈旧了。将nodejs项目完全切换为https的需求越来越急促,本文将基于koajs框架讲解如何构建https。
开始之前,我假设你已经拥有以下条件:
拥有外网独立IP的服务器。(eg.阿里云ecs)
已备案域名。(eg.万网备案域名)
申请备案域名将需要超过一个月时间的等待。如果找淘宝购买的话,请务必确认是万网备案域名。
申请SSL证书
假设您现在拥有域名www.yourdomain.com
免费SSL服务有以下选择
-
Let's Encrypt
网页常挂。
-
StartCOM
导致被墙。
-
WoSign
运营商没底线。
购买淘宝COMODO证书
https://item.taobao.com/item....
这家店6.98元购买一个单域名证书,关键客服还尽职尽责一路指导,极大节约开发者的时间成本,可靠性远超不稳定的免费证书,推荐。
1、生成 server.csr+server.key
在命令行下输入:
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr
将弹出询问设置:
前几项根据真实情况填写,
Common Name务必填写您要注册的域名,eg: www.yourdomain.com (注意您申请的是单域名,所以要加www)
之后三项不要填写。
您的目录下将生成server.csr+server.key两个文件,将文件传给淘宝客服,大约两小时内就会收到邮件。
2、通过证书链生成.pem文件
打开邮箱附件,您将得到四个文件
域名文件: www_yourdomain_com.crt (名称是您的域名)
短文件: COMODORSAAddTrustCA.crt
长文件: COMODORSADomainValidationSecureServerCA.crt
根证书: AddTrustExternalCARoot.crt
四个文件(这四个文件称为证书链)用cat命令相衔接,生成server.pem
cat www_yourdomain_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt AddTrustExternalCARoot.crt >server.pem
将本步骤生成的server.pem和上步骤生成的server.key保存。
-server.js
-ssl/server.key
-ssl/server.pem
koajs 构建https服务器
1、安装npm包
npm i koa koa-sslify
koa-sslify将http请求强制转换为https请求。
2、server.js代码
"use strict";
var koa = require('koa');
var http = require('http');
var https = require('https');
var fs = require('fs');
var enforceHttps = require('koa-sslify');
var app = koa();
// Force HTTPS on all page
app.use(enforceHttps());
// index page
app.use(function * (next) {
this.body = "hello world from " + this.request.url;
});
// SSL options
var options = {
key: fs.readFileSync('./ssl/server.key'), //ssl文件路径
cert: fs.readFileSync('./ssl/server.pem') //ssl文件路径
};
// start the server
http.createServer(app.callback()).listen(80);
https.createServer(options, app.callback()).listen(443);
//
console.log('https server is running');
将文件上传服务器端,node server启动,进入你的域名,试一试https服务器是否已经运行?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。