zoukankan      html  css  js  c++  java
  • Nodejs使用TLS

    1. 使用openssl生成服务器和客户端证书

    生成服务器证书,服务器使用自签名证书(也就是自己扮演CA)

    openssl genrsa -out server-key.pem 2048
    openssl req -new -sha256 -key server-key.pem -out server-csr.pem    //在CN处填写服务器主机名www.qikangwei.com
    openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem
    

      将服务器私钥server-key.pem和CA根证书server-cert.pem复制到客户端,然后生成客户端证书

    openssl genrsa -out client-key.pem 2048
    openssl req -new -sha256 -key client-key.pem -out client-csr.pem    //在CN出填写客户端主机名
    openssl x509 -req -CA server-cert.pem -CAkey server-key.pem -CAcreateserial -in client-csr.pem -out client-cert.pem
    

      

    2. 创建服务器和客户端脚本

    服务器:

    var tls = require('tls');
    var fs = require('fs');
    var options = {
            key: fs.readFileSync('server-key.pem'),
            cert: fs.readFileSync('server-cert.pem'),
            ca: [ fs.readFileSync('server-cert.pem') ],
            requestCert: true,
            rejectUnauthorized: true
    };
    var server = tls.createServer(options, function(test) {
            console.log('server connected', test.authorized ? 'authorized' : 'unauthorized');
            test.write("welcome!
    ");
            test.setEncoding('utf8');
            test.on('data', function(data) {
                    console.log(data);
            });
            test.on('close', function() {
                    console.log('client has closed');
                    server.close();
            });
    });
    server.listen(2345, function() {
            console.log('server bound');
    });
    

      客户端:

    var tls = require('tls');
    var fs = require('fs');
    var options = {
            host: 'www.qikangwei.com',
            port: 2345,
            key: fs.readFileSync('client-key.pem'),
            cert: fs.readFileSync('client-cert.pem'),
            ca: [ fs.readFileSync('server-cert.pem') ],
            rejectUnauthorized: true
    };
    var client = tls.connect(options, function() {
            console.log('client connected', client.authorized ? 'authorized' : 'unauthorized');
            process.stdin.setEncoding('utf8');
            process.stdin.on('readable', function() {
                    var chunk = process.stdin.read();
                    if (chunk !== null) {
                            client.write(chunk);
                    }
            });
     
    });
    client.setEncoding('utf8');
    client.on('data', function(data) {
            console.log(data);
    });
    client.write("happy new year!");
    

      

    3. 测试

    服务器:

    node tls-server.js

    客户端:

    node tls-client.js

    脚本启动后,在客户端输入内容,服务器端会显示同样的内容

  • 相关阅读:
    IOS开发关于测试的好的网址资源
    创建型模式--工厂模式
    在XcodeGhost事件之后,获取更纯净的Xcode的方法。
    算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数
    结构型模式--装饰模式
    设计模式 总揽 通过这篇随笔可以访问所需要了解的设计模式
    IOS之未解问题--关于IOS图像渲染CPU和GPU
    链接
    Matlab2014下载和破解方法,以及Matlab很好的学习网站
    苹果Mac隐藏壁纸在哪里?Mac隐藏壁纸查找教程
  • 原文地址:https://www.cnblogs.com/adjk/p/8883977.html
Copyright © 2011-2022 走看看