HTTPS
HTTP协议的连接流程相当简单,client发出一个request报文,server收到之后回复一个response报文。没有认证过程,没有加解密过程。
HTTPS协议因为要做身份认证,要商议密钥,要进行报文的加解密。所以需要借助OPENSSL库来实现TLS标准的流程。
服务器端需要的文件
privatekey.pem: 私钥
生成一个长度为1024位的RSA私钥文件。
openssl genrsa -out privatekey.pem 1024
certrequest.csr: CSR证书签名
通过私钥来生成一个CSR证书签名文件,这其中要求你填入一些个人信息。
openssl req -new -key privatekey.pem -out certrequest.csr
certificate.pem: 证书文件
通过私钥文件和证书签名文件生成证书文件。
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
默认端口
标准默认的情况,即你在web浏览器上输入地址时不后缀端口号时所使用的端口,HTTP的端口号是80,HTTPS的端口号是443。当然我们可以自定义为其他的端口,只不过在访问时必须要指明。在Linux下监听默认端口是需要程序有root权限的。
node.js的https模块
node.js带有内建立的https模块,所以可以很容易的搭建起https服务。
node.js的第三模块express提供了更方便的应用层app的开发接口。
var https = require('https');
var fs = require('fs');
var express = require('express');
var port = 443;
var options = {
key: fs.readFileSync('./privatekey.pem'),
cert: fs.readFileSync('./certificate.pem')
};
var app = express();
app.get('/', function(req, res){
res.send("Hello this is HTTPS fontpage.");
});
app.get('/lucky', function(req, res){
res.send("Hello this is lucky page.");
});
https.createServer(options, app).listen(port, function(){
console.log("https server listening..." + port);
});