一、介绍Http与Https

概念

  • HTTP: 超文本传输协议(Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
  • HTTPS: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

区别

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

二、 构建Https服务器

新建工程

$ cd /home
$ express -e ExpressServer
$ cd ExpressServer
$ sudo npm install

生成证书文件

# 创建一个文件夹存放证书
$ mkdir cert
$ cd cert

#生成私钥key文件:
$ openssl genrsa -out privatekey.pem 1024

#通过私钥生成CSR证书签名
$ openssl req -new -key privatekey.pem -out certsign.csr

# 通过私钥和证书签名生成证书文件
$ openssl x509 -req -in certsign.csr -signkey privatekey.pem -out certificate.crt

生成了三个文件:

  • privatekey.pem (私钥)
  • certsign.csr (CSR证书签名)
  • certificate.crt (证书文件)

Express服务端代码

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

var httpServer = http.createServer(app);
var httpsServer = https.createServer({
    key: fs.readFileSync('./cert/privatekey.pem', 'utf8'), 
    cert: fs.readFileSync('./cert/certificate.crt', 'utf8')
}, app);

var PORT = 80;
var SSLPORT = 443;

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

// 访问路径
app.get('/:name', function(req, res) {
    if(req.protocol === 'https') {
        res.send('https:' + req.params.name);
    } else {
        res.send('http:' + req.params.name);
    }
});

启动服务器

$ node app.js
HTTP Server is running on: http://localhost:80
https Server is running on: https://localhost:443

由于我们证书是自己创建的,没有经过第三方机构的验证,因此会出现警告的提示。可以去有资质的网络运营商,去申请自己的证书。

 posted on 2016-05-19 11:49  Buggo  阅读(6837)  评论(1编辑  收藏  举报