5.5 tls简单使用

该博客介绍了如何使用OpenSSL生成自签名服务器证书和客户端证书,以实现安全的TLS连接。通过一系列命令,创建了服务器的key、CSR、证书,以及客户端的key、CSR和证书。在Node.js中,利用这些证书配置了server.js和client.js,实现了服务器和客户端之间的安全通信。
摘要由CSDN通过智能技术生成

1、生成服务器证书,服务器使用自签名证书

openssl genrsa -out server-key.pem 2048

openssl req -new -sha256 -key server-key.pem -out server-csr.pem    

//在CN处填写服务器主机名localhost

openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem

 2、将服务器私钥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出填写客户端localhost

openssl x509 -req -CA server-cert.pem -CAkey server-key.pem -CAcreateserial -in client-csr.pem -out client-cert.pem

3、 server.js

const tls = require('tls');
const fs = require('fs');

const options = {
    key: fs.readFileSync('server-key.pem'),
    cert: fs.readFileSync('server-cert.pem'),

    // 这仅在使用客户端证书身份验证时才需要。
    requestCert: true,

    // 仅当客户端使用自签名证书时才需要这样做。
    ca: [ fs.readFileSync('client-cert.pem') ]
};

const server = tls.createServer(options, (socket) => {
    console.log('server connected',
        socket.authorized ? 'authorized' : 'unauthorized');
    socket.write('welcome!\n');
    socket.setEncoding('utf8');
    // socket.pipe(socket);socket是双工流
    socket.on('data',function (data){
        console.log(data)
    })
    process.stdin.pipe(socket);
});
server.listen(8000, () => {
    console.log('server bound');
});

4、client.js

const tls = require('tls');
const fs = require('fs');

const options = {
    // 仅当服务器需要客户端证书身份验证时才需要。
    key: fs.readFileSync('client-key.pem'),
    cert: fs.readFileSync('client-cert.pem'),

    // 仅当服务器使用自签名证书时才需要。
    ca: [ fs.readFileSync('server-cert.pem') ],

    // 仅当服务器的证书不适用于 "localhost" 时才需要。
    checkServerIdentity: () => { return null; },
};

const socket = tls.connect(8000, options, () => {
    console.log('client connected',
        socket.authorized ? 'authorized' : 'unauthorized');
    process.stdin.pipe(socket);
    // socket.pipe(socket)
    process.stdin.resume();
});
socket.setEncoding('utf8');
socket.on('data', (data) => {
    console.log(data);
});
socket.on('end', () => {
    console.log('server ends connection');
});

先启动server,再启动client,server端便能和client端进行消息通信了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值