标签:
node的HTTPS模块接口与HTTP其实差不多,就是多了一个认证证书,私钥的配置等等,API都相似的。
在客户端服务器通信的方法中,只有HTTPS是最安全的,它的原理是客户端和服务器发送自己的公钥,分别加密,然后解密传输的数据对比,为了防止重放攻击,还会添加随机数或者客户端IP等信息,IP造假太容易了,大部分都是随机数加时间什么什么的。HTTPS就是在HTTP与TCP之间添加了一个加密ssl/tls层。
类https.Server();//该类是tls.Server的子类,并发生和http.Server已有的事件。
server.setTimeout(msecs,cb)
server.timeout()
https.createServer(options,[requestListener]);//返回一个新的HTTPS Web服务器对象。其中options类似于tls.createServer();
//requestListener是一个会被自动添加到request事件的函数。
https.createServer(options,function(req,res){ res.writeHead(200); res.end(‘hello‘) }).listen(9000);
server.listen(port,[host],[backlog],[cb])
server.listen(path,[cb]);
server.listen(handle,[cb]);//见http.listen
server.close([cb]);
https.request(options,cb);//向一个安全web服务器发送请求,options可以是一个对象或字符串。如果options是字符串,会url.parse()解析;
//所有来自hhtp.request()的选项都是经过验证的;
https.get(options,cb)
https.Agent
https.globalAgent//所有HTTPS客户端请求的全局https.Agent实例;
var https = require(‘https‘); var fs = require(‘fs‘); var options = { key: fs.readFileSync(‘./keys/server.key‘), cert: fs.readFileSync(‘./keys/server.crt‘) }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000);
和http主要差别就在key和cert上。
HTTPS的客户端
var https = require(‘https‘); var fs = require(‘fs‘); var options = { hostname: ‘localhost‘, port: 8000, path: ‘/‘, method: ‘GET‘, key: fs.readFileSync(‘./keys/client.key‘), cert: fs.readFileSync(‘./keys/client.crt‘), ca: [fs.readFileSync(‘./keys/ca.crt‘)] }; options.agent = new https.Agent(options); var req = https.request(options, function(res) { res.setEncoding(‘utf-8‘); res.on(‘data‘, function(d) { console.log(d); }); }); req.end(); req.on(‘error‘, function(e) { console.log(e); });
这里是创建私钥,证书的代码,因为node的tls/ssl都是基于openssl的,所以直接用openssl生成。
// 创建私 $ openssl genrsa -out client.key 1024 // 生成CSR $ openssl req -new -key client.key -out client.csr // 生成名证 $ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt
跟tls模块生成是一样的。
标签:
原文地址:http://www.cnblogs.com/dh-dh/p/5111614.html