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

openssl颁发包含主题替代名的证书–SAN

原文地址:openssl颁发包含主题替代名的证书–SAN – 无敌牛

欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等

在 X.509 证书中,commonName(CN)字段只能有一个值。如果让证书支持多个域名和IP地址,需要用到主题替代名称–subjectAltName。

第一步,制作CA根证书

和往期文章:自签名证书 – 无敌牛 中的1.11.2步骤是一样。操作如下图:

第二步:颁发证书

需要用到5个文件:

1、第一步产生的CA私钥

2、第一步产生的CA根证书

3、服务端需要创建一个私钥,一般扩展名为 .key

4、服务端需要创建证书配置文件,一般扩展名为 .csr

5、服务端用自己的私钥和配置文件出创建一个证书请求文件,一般扩展名为 .crt

2.1 创建服务端的私钥

指令:openssl genrsa -out private.key 2048 和第一步创建私钥的方法是一样的

2.2 创建证书配置文件

命名为:csr.conf

default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req[req_distinguished_name]
countryName = CN
stateOrProvinceName = Shandong
localityName = Qingdao
organizationName = madbull
organizationalUnitName = IT
commonName = node1
emailAddress = xxx@xxx.com[v3_req]
subjectAltName = @alt_names[alt_names]
DNS.1 = node1
DNS.2 = madbull.site
DNS.3 = localhost
IP.1 = 127.0.0.1
IP.2 = 192.168.1.123

其中 commonName 和 alt_names的配置 根据自己的实际情况填写 域名和主机名。

配置解释:

default_bits: 设置默认的密钥长度为 2048 位。

prompt: 设置为 no,表示在生成 CSR 时不提示用户输入信息,而是使用配置文件中的默认值。

default_md: 设置默认的消息摘要算法为 SHA-256。

distinguished_name: 指向 [req_distinguished_name] 段,定义了证书请求的基本信息。

req_extensions: 指向 [v3_req] 段,定义了证书请求中的扩展字段。

subjectAltName: 指向 [alt_names] 段

2.3 生成证书请求文件

指令:openssl req -new -key private.key -out req.csr -config csr.conf

注意,这里多了指定配置文件 -config csr.conf

可用:openssl req -in req.csr -noout -text 查看请求证书文件内容。

2.4 颁发证书

指令:openssl x509 -req -in req.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out public.crt -days 10240 -sha256 -extensions v3_req -extfile csr.conf

注意,这里多了指定扩展段名称和配置文件 -extensions v3_req -extfile csr.conf

可用:openssl x509 -in public.crt -noout -text 查看证书内容。


自此,当前目录下有7个文件,对于服务端只需要私钥和证书就可以了。下面分别介绍一下这些都是什么文件:

csr.conf: 证书配置文件

private.key: 服务端私钥

public.crt: 服务端证书

req.csr: 服务端生成的证书请求文件

root-ca.crt: CA根的证书

root-ca.key: CA根的私钥

root-ca.srl: 上次颁发证书用到的证书编号

http://www.lryc.cn/news/491571.html

相关文章:

  • Stable Diffusion入门教程
  • H.265流媒体播放器EasyPlayer.js无插件H5播放器关于移动端(H5)切换网络的时候,播放器会触发什么事件
  • conan2 c/c++包管理入门之--------------------------conanfile.py
  • DICOM图像深入解析:为何部分DR/CR图像默认显示为反色?
  • 重新定义社媒引流:AI社媒引流王如何为品牌赋能?
  • 【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register
  • 《硬件架构的艺术》笔记(五):低功耗设计
  • Hive离线数仓结构分析
  • 鱼眼相机模型-MEI
  • GPT系列文章
  • 微软Ignite 2024:建立一个Agentic世界!
  • windows C#-属性
  • 深入浅出:JVM 的架构与运行机制
  • 如何在 Eclipse 中调试ABAP程序
  • websocket是什么?
  • Java项目实战II基于微信小程序的图书馆自习室座位预约平台(开发文档+数据库+源码)
  • 5.算法移植第六篇YOLOV5 /onnx模型转换成rknn
  • 微知-DOCA SDK中如何编译一个sample?如何运行?(meson /tmp/xxx; meson compile -C /tmp/xxx)
  • 【Leetcode 每日一题】146. LRU 缓存(c++)
  • 【机器学习】近似分布的熵到底是p(x)lnq(x)还是q(x)lnq(x)?
  • 网络安全,文明上网(6)网安相关法律
  • 网络安全学习74天(记录)
  • Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理
  • 20241125复盘日记
  • 【Excel】拆分多个sheet,为单一表格
  • 类和对象plus版
  • shell练习
  • ApiChain 从迭代到项目 接口调试到文档生成单元测试一体化工具
  • Vercel 设置自动部署 GitHub 项目
  • SQL进阶:如何跳过多个NULL值取第一个非NULL值?