首页 > Web开发 > 详细

nodejs之https双向认证

时间:2020-04-26 15:26:33      阅读:256      评论:0      收藏:0      [点我收藏+]

说在前面

之前我们总结了https的相关知识,如果不懂可以看我另一篇文章:白话理解https

有关证书生成可以参考:自签证书生成

正题

今天使用nodejs来实现https双向认证

话不多说,直接进入正题。

服务端

const https = require(‘https‘);
const fs = require(‘fs‘);

const options = {
  key: fs.readFileSync(‘./certificate/server-key.pem‘),
  cert: fs.readFileSync(‘./certificate/server.pem‘),
  ca: [fs.readFileSync(‘./certificate/ca.pem‘)],
  // 使用客户端证书验证
  requestCert: true,
  // 如果没有请求到客户端来自信任CA颁发的证书,拒绝客户端的连接
  rejectUnauthorized: true
};
const port = 8081;
https.createServer(options, (req, res) => {
  console.log(‘server connected‘, res.connection.authorized ? ‘authorized‘ : ‘unauthorized‘);
  res.writeHead(200);
  res.end(‘hello world!\n‘);
}).listen(port, () => {
  console.log(`running server https://127.0.0.1:${port}`)
});

客户端

const https = require(‘https‘);
const fs = require(‘fs‘);

const options = {
  hostname: ‘127.0.0.1‘,
  port: 8081,
  path: ‘/‘,
  method: ‘GET‘,
  key: fs.readFileSync(‘./certificate/client-key.pem‘),
  cert: fs.readFileSync(‘./certificate/client.pem‘),
  ca: [fs.readFileSync(‘./certificate/ca.pem‘)],
  agent: false,
  // 开启双向认证
  rejectUnauthorized: true
};

// options.agent = new https.Agent(options);
const req = https.request(options, (res) => {
  console.log(‘client connected‘, res.connection.authorized ? ‘authorized‘ : ‘unauthorized‘);
  console.log(‘状态码:‘, res.statusCode);
  res.setEncoding(‘utf-8‘);
  res.on(‘data‘, (d) => {
    process.stdout.write(d);
  });
});

req.on(‘error‘, (e) => {
  console.error(e);
});

req.end();

运行结果

 技术分享图片

 

 可以看到,https握手成功了。

(完)

nodejs之https双向认证

原文:https://www.cnblogs.com/wzs5800/p/12779223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!