8

HTTP正在离我们远去,HTTPS成为唯一的选择

图片描述

从2017年1月份起,Chrome浏览器将会把采用http协议的网站标记为“不安全”网站。

面对变幻的互联网安全局势,http实在太过陈旧了。将nodejs项目完全切换为https的需求越来越急促,本文将基于koajs框架讲解如何构建https。

开始之前,我假设你已经拥有以下条件:

  1. 拥有外网独立IP的服务器。(eg.阿里云ecs)

  2. 已备案域名。(eg.万网备案域名)

申请备案域名将需要超过一个月时间的等待。如果找淘宝购买的话,请务必确认是万网备案域名。

申请SSL证书

假设您现在拥有域名www.yourdomain.com

免费SSL服务有以下选择

  1. Let's Encrypt

    网页常挂。

  2. StartCOM

    导致被墙。

  3. 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文件
打开邮箱附件,您将得到四个文件

  1. 域名文件: www_yourdomain_com.crt (名称是您的域名)

  2. 短文件: COMODORSAAddTrustCA.crt

  3. 长文件: COMODORSADomainValidationSecureServerCA.crt

  4. 根证书: 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服务器是否已经运行?


刘羽冲
4.1k 声望931 粉丝

破庙中神易,破心中神难。 当人类第一次仰望天空的时候,就已经有罪!