当前位置: 首页 > news >正文

使用Node.js搭建https服务器

一、引言

https是是http的安全版本,在http的基础上通过传输加密和身份认证保证了传输过程中的安全性。可以认为:https = http + tls/ssl。本文讲述使用Node.js搭建https服务器的方法。

二、编译OpenSSL

按照《Openssl在Linux下编译/交叉编译》,编译出OpenSSL的库和可执行文件:

直接执行./openssl会报错,提示找不到动态库,所以得设置环境变量:

设置环境变量。其中,“/home/cjc/source/openssl-3.4.0-alpha1/install/lib64”为我本机编译出来的OpenSSL动态库的路径:

export LD_LIBRARY_PATH=/home/cjc/source/openssl-3.4.0-alpha1/install/lib64:$LD_LIBRARY_PATH

三、 生成公钥/私钥/证书

进入编译出的OpenSSL可执行文件的所在目录。生成传统的 RSA 私钥2048位,输出到rsa_private_key.pem文件:

openssl genrsa -out rsa_private_key.pem 2048

生成 RSA公钥rsa_public_key.pem:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

生成证书签名请求csr.pem:

openssl req -new -key rsa_private_key.pem -out csr.pem

使用CSR和私钥生成自签名证书cert.pem:

openssl x509 -req -days 365 -in csr.pem -signkey rsa_private_key.pem -out cert.pem

执行上述命令后,可以看到确实生成了公钥、私钥和证书:

四、安装Node.js

按照《Ubuntu下安装Node.js》安装Node.js

五、编写Node.js程序

server.js:

'use strict'var https = require('https');
var fs = require('fs');var options = {key : fs.readFileSync('/home/cjc/source/openssl-3.4.0-alpha1/install/bin/rsa_private_key.pem'),cert : fs.readFileSync('/home/cjc/source/openssl-3.4.0-alpha1/install/bin/cert.pem')
}var app = https.createServer(options ,function(req,res){res.writeHead(200, {'Content-Type':'text/plain'});res.end('Hello World\n');
}).listen(443,'0.0.0.0');console.log('Server running at https://127.0.0.1:443');

上述代码中,options里面的key指定私钥的位置,cert指定自签名证书的位置。

使用node命令执行以上代码:

浏览器输入:https://192.168.0.104/

 192.168.0.104是我htts服务器所在电脑的IP。可以看到htts服务器创建成功了,用浏览器可以访问:

相关文章:

  • 动态库与ELF加载
  • 白皮解读:数据流通关键技术白皮书【附全文阅读】
  • 【KWDB 创作者计划】_KWDB事务管理模块实现原理
  • Three.js支持模型格式区别、建议
  • 前端面经-VUE3篇(二)--vue3组件知识(二)依赖注入、异步组件、生命周期、组合式函数、插件
  • 3.0/Q1,Charls最新文章解读
  • yolov5 train笔记4 roboflow
  • Linux《进程概念(下)》
  • 射频指标互调与交调简略
  • RPG7.准备GAS的工作
  • Linux 的 epoll 与 Windows 的 IOCP 详解
  • 重塑数学边界:人工智能如何引领数学研究的新纪元
  • Transformer架构:基于自注意力机制推动NLP革命性突破
  • 有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置
  • 别样健康养生之道
  • 【Arthas】火焰图优化应用CPU(问题原因:获取调用栈)
  • sonar-scanner在扫描JAVA项目时为什么需要感知.class文件
  • FPGA DDR4多通道管理控制器设计
  • 影楼精修-露齿笑算法解析
  • Python Cookbook-6.18 用__init__参数自动初始化实例变量
  • 一周文化讲座|那些年的年青人
  • 乌美矿产协议文本公布,明确乌收益及协议优先级
  • 空间站第八批科学实验样品返抵地球并交付科学家
  • 国际油价重挫!美股道指连跌三月,啥情况?
  • 荣盛发展股东所持1.17亿股将被司法拍卖,起拍价约1.788亿元
  • 民生访谈|支持外贸企业拓内销,上海正抓紧制定便利措施