自定义根证书颁发机构 CA 生成自签名证书
本文为使用过程中的一个工具记录,可实现在本地开启一个 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 中也是不能修改的。
按照以下步骤添加根证书,修改证书为信任,最后会需要用到密码进行确认
重新打开链接,是有提示的,我们可以继续前往访问,另外证书的状态也显示为了有效。
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 生成自签名证书相关推荐
- 网络安全(三)_数字签名与证书颁发机构CA
数字签名 数字签名机制保证接收方接收到的消息是可靠真实的 数字签名必须保证以下三点: 报文鉴别:接收者能够核实发送者对报文的签名(通过证书颁发机构CA) 报文的完整性:发送者事后不能抵赖对报文的签名 ...
- 在中小型公司建立企业根证书颁发机构 (CA)
http://www.microsoft.com/china/technet/security/sgk/build_ent_root_ca.mspx?pf=true
- 本地生成https签名证书
本文内容为摘录,原文请访问 https://cloud.tencent.com/developer/article/1730194 使用openssl工具,由于windows安装比较麻烦,也可以直接使 ...
- centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)
centos 配置证书 介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digi ...
- 如何在Ubuntu 20.04上设置和配置证书颁发机构(CA)
介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digital certific ...
- 2.域控制器及证书颁发机构
安装域控制器部分:1.修改计算机名称IP地址 2.安装AD DNS 角色 运行服务器向导 3.配置AD域 (选定域名,推荐公网内网一致) 安装配置证书颁发机构部分:1.运行服务器向导,安装以下证 ...
- SSL/TLS协议详解(中)——证书颁发机构
SSL/TLS协议详解(中)--证书颁发机构 本文翻译自:https://www.wst.space/ssl-part-3-certificate-authority/ 上一篇中,我们讨论了关于Dif ...
- SSL/TLS协议详解(三)——证书颁发机构
目录 证书颁发机构的需求 数字签名的定义 证书颁发机构的技术实现 如果攻击者篡改证书会怎样 信任链 数字签名的数学算法 浏览器如何实际验证给定服务器证书的有效性 TLS加密客户端-服务器通信并阻止中间 ...
- 证书颁发机构+NPS
证书颁发机构+NPS 题目 一.证书颁发机构安装及配置 1.安装及创建根证书 2.为chinaskills.com域内的web站点颁发web证书. 3.当前拓扑内所有机器必须信任该证书颁发机构 4.所 ...
最新文章
- MySQL——开窗函数
- Yii的控制器等名称获取
- 查看mysql8日志_mysql dba系统学习(8)查询日志文件功能
- 线性表操作的基本应用
- python手机编译器可以干什么_世界上最好的Python编辑器是什么?
- 中文信息处理(四)—— 神经网络基础
- 超越Tiny-YOLO V4,全新设计轻量化YOLO模型实现边缘实时检测!!!
- Excel 中批量处理数据(改成 json 格式)
- 知道吗?9个搜索引擎优化(SEO)最佳实践
- JQuery+div+css实现无限级联树
- python爬虫做灰产_python爬虫
- matConvNet学习-使用GPU
- COSNET: Connecting Heterogeneous Social Networks with Local and Global Consistency 论文阅读笔记
- iOS 1 到 iOS 10 ,我都快老了
- 露天靶场建设方案,打靶设备和防弹墙作为主要工程建设
- 数据分析师的就业前景如何?
- win10系统 桌面点右键经常转圈圈卡住
- 八年级上学期计算机教学计划,八年级上学期劳技教学计划
- 计算机专业十六字口号,16字口号大全
- 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并