zoukankan      html  css  js  c++  java
  • 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
    ");
     }).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模块生成是一样的。

  • 相关阅读:
    块级元素与行级元素(内联元素)
    css中属性值继承小解
    form表单
    html,xhtml和xml
    html中的标签分类
    如何把HTML标记分类
    实现对HashMap的value排序
    装饰者模式
    实现一个简单的二叉树容器,并且实现中序、先序、后续遍历
    Java中java.util.concurrent包下的4中线程池代码示例
  • 原文地址:https://www.cnblogs.com/dh-dh/p/5111614.html
Copyright © 2011-2022 走看看