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. 创建服务器和客户端脚本

服务器:

vi tls-server.js

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!\n");
        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‘);
});

客户端:

vi tls-client.js

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

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

时间: 2024-11-25 20:55:47

Nodejs使用TLS的相关文章

nodejs创建TLS服务

nodejs创建TLS服务 by 伍雪颖 server.js var tls = require('tls'); var fs = require('fs'); var options = { key: fs.readFileSync('./keys/server.key'), cert: fs.readFileSync('./keys/server.crt'), requestCert: true, ca: [ fs.readFileSync('./keys/ca.crt')] }; var

nodejs创建https服务

nodejs创建https服务 by 伍雪颖 serverr.js 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.write

菜鸟学习Fabric源码学习 — 背书节点和链码容器交互

Fabric 1.4 源码分析 背书节点和链码容器交互 本文档主要介绍背书节点和链码容器交互流程,在Endorser背书节点章节中,无论是deploy.upgrade或者调用链码,最后都会调用ChaincodeSupport.LaunchInit()/Launch()以及ChaincodeSupport.execute()方法.其中Launch()方法启动链码容器,execute()方法调用链码. 1. 准备 ChaincodeSupport.Launch()首先进行判断,根据peer侧该版本链

nodejs TLS 只加密,未授权,进一步完善

const tls = require('tls'); const fs = require('fs'); const options = { key: fs.readFileSync('my_key.pem'), cert: fs.readFileSync('my_cert.pem'), // This is necessary only if using the client certificate authentication. requestCert: false, // This is

Nodejs 使用特定版本的SSL/TLS协议版本

var options = { key: fs.readFileSync('./bin/privatekey.pem'), cert: fs.readFileSync('./bin/certificate.pem'), secureOptions: constains.SSL_OP_NO_TLSv1_2 | constains.SSL_OP_NO_TLSv1_1 // ca: [ fs.readFileSync('./bin/certificate.pem') ], }; var httpsSe

nodejs 客户端证书设置。

最近的系统要求较高的安全等级 https+usbkey证书 https的操作很简单 openssl 生成ca 和证书,配置启动即可 生成成功后,类似这样. 类似这样 var options = { key: fs.readFileSync(__dirname + '/server.key'), cert: fs.readFileSync(__dirname+'/server.pem'), ca: fs.readFileSync(__dirname+'/ca.crt'), auth:"1CUI&q

nodejs api 中文文档

文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格式 目录 关于本文档 稳定度 JSON 输出 概述 全局对象 global process console 类: Buffer require() require.resolve() require.cache require.extensions __filename __dirname module e

NodeJS API简介

简单介绍下NodeJS现有API. Assert(断言):该模块用于编写程序的单元测试用例. Buffer(缓冲块) :处理二进制数据. C/C++ Addons(拓展):Addons插件就是动态连接库. Child Processes(子进程):提供了类似 popen(3) 的处理三向数据流(stdin/stdout/stderr)的功能. Cluster(集群):用于nodejs多核处理,简化多进程并行化程序的开发,轻松构建一个用于负载均衡的集群. Console(控制台):类似于大部分 W

nodejs编译安装,npm全局安装模块

Nodejs官方网站:下载nodejs源码 Nodejs中文社区 Node Packaged Modules POSIX系统中编译Node.js需要三个工具: C++编译器gcc或clang/LLVM Python2.5以上,不支持Python3 libssl-dev提供SSL/TLS加密支持 下载源码包:node-v0.10.29.tar.gz tar zxvf node-v0.10.29.tar.gz cd node-v0.10.29 ./configure make sudo make i