nodejs的某些api~,六HTTPS

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模块生成是一样的。