本文为使用过程中的一个工具记录,可实现在本地开启一个 HTTPS 服务器用于开发或测试。

前面有写过使用 Node.js 搭建 HTTPS 服务器 其中的自签名生成证书方式比较简单,既充当 HTTPS 根证书的角色也充当了用户的角色,本文我们会先创建一个 CA 根证书,再创建一个由 CA 根证书签名的自定义证书。

本文从以下几个方面讲解:

  • 创建自己的自定义证书颁发机构 CA

  • 使用 CA 根证书签名服务器证书

  • 在 Node.js 服务器中配置证书

  • 添加根证书到本地计算机的受信任根存储中

创建自己的自定义证书颁发机构 CA

  • 生成私钥

$ openssl ecparam -out ca.key -name prime256v1 -genkey
  • 生成证书请求文件

$ openssl req -new -sha256 -key ca.key -out ca.csr    # 以下为需要输入的交互信息
Country Name (2 letter code) []:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) []:BeiJing
Organization Name (eg, company) []:Node.js
Organizational Unit Name (eg, p) []:Node.js
Common Name (eg, fully qualified host name) []:test.ca.com
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:abc123***
  • 生成根证书

$ openssl x509 -req -sha256 -days 365 -in ca.csr -signkey ca.key -out ca.crt

使用 CA 根证书签名服务器证书

  • 生成私钥

$ openssl ecparam -out server.key -name prime256v1 -genkey
  • 生成证书请求文件

$ openssl req -new -sha256 -key server.key -out server.csr# 注意下面服务器证书的 Common Name 不能与上面颁发者 CA 的 Common Name 一样
Country Name (2 letter code) []:CN
State or Province Name (full name) []:ShangHai
Locality Name (eg, city) []:ShangHai
Organization Name (eg, company) []:Node.js
Organizational Unit Name (eg, p) []:Node.js
Common Name (eg, fully qualified host name) []:test.https.com
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:abc123***
  • 使用 CA 的根证书为服务器证书签名

$ openssl x509 -req -in server.csr -CA  ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256# 成功之后有以下提示
Signature ok
subject=/C=CN/ST=ShangHai/L=ShangHai/O=Node.js/OU=Node.js/CN=test.https.com
Getting CA Private Key

服务端证书中使用到的域名是我们自己定义的,需要在本地 hosts 文件做映射,如果不知道为什么要修改和该如何修改的参考文章 DNS 域名解析过程?github.com/qufei1993/http-protocol/blob/master/docs/dns-process.md

  • 证书文件列表

完成之后可以看到如下文件,server.crt 是服务器的证书文件,ca.crt 就是我们创建的根正书。

在 Node.js 服务器中配置证书

const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
const PORT = 8443;
const options = {key: fs.readFileSync('./cert/server.key'),cert: fs.readFileSync('./cert/server.crt')
};https.createServer(options, app).listen(PORT, () => console.log(`App listening on port ${PORT}!`));app.get('/', (req, res) => res.send('Hello World!'));

此时在 Chrome 浏览器中仍无法访问,至少在 Chrome 85.0.4183.121 是这样的,浏览器中打开证书文件也显示的证书是不受信任的。
为了解决这个问题,继续往下看。

添加根证书到本地计算机的受信任根存储中

找到我们刚生成的根证书文件,双击打开。

得到如下提示,是因为系统提示新根证书应添加到当前用户下,这样就不会因为测试去影响其它用户,系统根证书是不建议修改的,这会对当前计算的所有用户生效,另外 Mac 中也是不能修改的。

image.png

按照以下步骤添加根证书,修改证书为信任,最后会需要用到密码进行确认

重新打开链接,是有提示的,我们可以继续前往访问,另外证书的状态也显示为了有效。

Reference

  • support.apple.com/zh-cn/guide/keychain-access/kyca2431/mac

  • configure-the-certificate-in-your-web-servers-tls-settings

- END -

敬请关注「Nodejs技术栈」微信公众号,获取优质文章,如需投稿可在后台留言与我取得联系。

往期精彩回顾

Node.js 搭建 HTTPS 服务器

Node.js 性能监控解决方案 Easy-Monitor 3.0

震惊!这个代码片段竟然会让 V8 内存无法回收?

Node.js 内存管理和 V8 垃圾回收机制

排查 Node.js 服务内存泄漏,没想到竟是它?

自定义根证书颁发机构 CA 生成自签名证书相关推荐

  1. 网络安全(三)_数字签名与证书颁发机构CA

    数字签名 数字签名机制保证接收方接收到的消息是可靠真实的 数字签名必须保证以下三点: 报文鉴别:接收者能够核实发送者对报文的签名(通过证书颁发机构CA) 报文的完整性:发送者事后不能抵赖对报文的签名 ...

  2. 在中小型公司建立企业根证书颁发机构 (CA)

    http://www.microsoft.com/china/technet/security/sgk/build_ent_root_ca.mspx?pf=true

  3. 本地生成https签名证书

    本文内容为摘录,原文请访问 https://cloud.tencent.com/developer/article/1730194 使用openssl工具,由于windows安装比较麻烦,也可以直接使 ...

  4. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)

    centos 配置证书 介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digi ...

  5. 如何在Ubuntu 20.04上设置和配置证书颁发机构(CA)

    介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digital certific ...

  6. 2.域控制器及证书颁发机构

    安装域控制器部分:1.修改计算机名称IP地址 2.安装AD DNS 角色  运行服务器向导  3.配置AD域 (选定域名,推荐公网内网一致)  安装配置证书颁发机构部分:1.运行服务器向导,安装以下证 ...

  7. SSL/TLS协议详解(中)——证书颁发机构

    SSL/TLS协议详解(中)--证书颁发机构 本文翻译自:https://www.wst.space/ssl-part-3-certificate-authority/ 上一篇中,我们讨论了关于Dif ...

  8. SSL/TLS协议详解(三)——证书颁发机构

    目录 证书颁发机构的需求 数字签名的定义 证书颁发机构的技术实现 如果攻击者篡改证书会怎样 信任链 数字签名的数学算法 浏览器如何实际验证给定服务器证书的有效性 TLS加密客户端-服务器通信并阻止中间 ...

  9. 证书颁发机构+NPS

    证书颁发机构+NPS 题目 一.证书颁发机构安装及配置 1.安装及创建根证书 2.为chinaskills.com域内的web站点颁发web证书. 3.当前拓扑内所有机器必须信任该证书颁发机构 4.所 ...

最新文章

  1. MySQL——开窗函数
  2. Yii的控制器等名称获取
  3. 查看mysql8日志_mysql dba系统学习(8)查询日志文件功能
  4. 线性表操作的基本应用
  5. python手机编译器可以干什么_世界上最好的Python编辑器是什么?
  6. 中文信息处理(四)—— 神经网络基础
  7. 超越Tiny-YOLO V4,全新设计轻量化YOLO模型实现边缘实时检测!!!
  8. Excel 中批量处理数据(改成 json 格式)
  9. 知道吗?9个搜索引擎优化(SEO)最佳实践
  10. JQuery+div+css实现无限级联树
  11. python爬虫做灰产_python爬虫
  12. matConvNet学习-使用GPU
  13. COSNET: Connecting Heterogeneous Social Networks with Local and Global Consistency 论文阅读笔记
  14. iOS 1 到 iOS 10 ,我都快老了
  15. 露天靶场建设方案,打靶设备和防弹墙作为主要工程建设
  16. 数据分析师的就业前景如何?
  17. win10系统 桌面点右键经常转圈圈卡住
  18. 八年级上学期计算机教学计划,八年级上学期劳技教学计划
  19. 计算机专业十六字口号,16字口号大全
  20. 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并

热门文章

  1. FFmpeg - Windows下使用MSYS2和VS编译FFmpeg
  2. 微信付费群如何创建?如何搭建教程九块九源码?
  3. CMD控制台(命令提示符)的打开方式
  4. 1.7-秩和相关关系
  5. CSAPP 第3章 机器级编程课后作业
  6. 微信黑名单已经删除的人怎么找回来?这些步骤挨个试试!
  7. spring获取Bean报错
  8. 2022年09月编程语言排行榜
  9. [leetcode]Binary Tree Level Order Traversal II
  10. Excel基础-数据方向