【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享

简介: 本文详解如何使用OpenSSL生成自签名证书链,包括根CA、中间CA和服务器证书,并最终打包为包含私钥的PFX文件,适用于内部系统或测试环境部署,步骤清晰,可复制即用。

问题描述

在Web应用部署环境中,常常需要为内部系统或测试环境生成自签名证书,尤其是包含根证书、中间证书和服务器证书的完整证书链,并最终生成包含私钥的 PFX 文件(.pfx)。

如何使用 openssl 工具一步步完成这些操作,成为很多工程师的实际需求。


本文将详细介绍如何用 openssl 生成自签名证书链,并将其打包为 PFX 文件。

 

问题解答

下面是一套可复制即用的分步骤指南,使用 OpenSSL 在本机创建三类证书:

  1. 自签名 根 CA(Root CA)
  2. 由根 CA 签发的 中间 CA(Intermediate CA)
  3. 由中间 CA 签发的 服务器证书(Leaf/Server Cert)

同时包含 openssl.cnf 的示例、证书链验证命令,以及生成包含三张证书(服务器 + 中间 + 根)的 PFX 包的做法。


生成的步骤如下流程图所示。


第一步:安装OpenSSL

下载路径:Downloads | OpenSSL Library, Windows 环境中直接下载最新的 .tar.gz 文件,本地解压后可直接使用

PS: 最好在PATH环境变量中添加OpenSSL的路径,方便后续使用。

 

第二步:创建配置文件 openssl.cnf

准备一个生成及存放证书的目录,然后创建openssl.cnf文件,如:

mkdir certs_1 && cd certs_1

初始化的openssl.cnf内容如下,需要替换域名和组织信息

# ----- Basic req settings -----
[ req ]
default_bits        = 2048
prompt              = no
distinguished_name  = dn
req_extensions      = req_ext
 
[ dn ]
C   = CN
ST  = CQ
L   = CQ
O   = SelfCA Org
OU  = CertOps
CN  = myself.com
 
# CSR-time extra extensions (used by: -reqexts req_ext)
[ req_ext ]
subjectAltName = @alt_names
 
[ alt_names ]
DNS.1 = *.myself.com
DNS.2 = www.myself.com
 
# ----- Root CA certificate extensions -----
[ v3_root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE, pathlen:1
keyUsage = critical, keyCertSign, cRLSign
 
# ----- Intermediate CA certificate extensions -----
[ v3_intermediate_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, keyCertSign, cRLSign
 
# ----- Server (leaf) certificate extensions -----
[ server_cert ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
 
# CSR-time server req (used with: -reqexts server_req)
[ server_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth

第三步:生成根CA私钥和证书

# 生成根 CA 私钥(加密私钥需输入口令;如不加密去掉 -aes256)
openssl genrsa -aes256 -out rootCA.key 4096
 
# 生成根 CA 的 CSR(可直接自签;CN 可写组织名或 "Example Root CA")
openssl req -new -sha256 -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=CQ /O=SelfCA Org/CN=My Self Root CA" -config openssl.cnf
 
# 使用 X.509 自签生成根 CA 证书(10 年有效期举例)
openssl x509 -req -sha256 -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.crt -extfile openssl.cnf -extensions v3_root_ca


第四步:生成中间CA私钥和证书

#生成中间 CA 私钥与 CSR
 
openssl genrsa -out interCA.key 4096 openssl req -new -sha256 -key interCA.key -out interCA.csr -subj "/C=CN/ST=CQ/O=Self Intermediate Org/CN=My Self Intermediate CA" -config openssl.cnf
<br>
# 用根 CA 签发中间 CA 证书
# 通过根 CA 为中间 CA CSR 签名,并指定中间 CA 扩展(pathlen=0/1 视需求)
 
openssl x509 -req -sha256 -days 1825 -in interCA.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out interCA.crt -extfile openssl.cnf -extensions v3_intermediate_ca


第五步:生成服务器私钥和证书

# 生成服务器私钥与 CSR(含 SAN)
openssl genrsa -out server.key 2048
 
# 生成 CSR,并在 -req 扩展中声明 SAN(在 openssl.cnf 的 [server_req] 与 [alt_names] 中定义)
openssl req -new -sha256 -key server.key -out server.csr   -subj "/C=CN/ST=CQ/O=My Self Server Org/CN=*.mytest.com"   -config openssl.cnf -reqexts server_req
 
# 用中间 CA 为服务器 CSR 签名
openssl x509 -req -sha256 -days 825   -in server.csr   -CA interCA.crt -CAkey interCA.key -CAcreateserial   -out server.crt   -extfile openssl.cnf -extensions server_cert

第三,四,五步的实验结果如图:

第六步:合并证书链

# 构造完整证书链文件(Intermediate + Root)
 
type interCA.crt rootCA.crt > chain.crt
 
# 验证 server.crt 是否能由 chain.crt(中间+根)构成完整信任链
 
openssl verify -CAfile chain.crt server.crt

第七步:生成PFX文件

# 将中间+根合并为 chain.crt 后一起导入
openssl pkcs12 -export -out server_fullchain.pfx   -inkey server.key -in server.crt   -certfile chain.crt   -name "My Self Full Server Cert"   -passout pass:xxxxxxxxx

最终所生成的证书文件展示:



参考资料

openssl 官方文档:https://www.openssl.org/docs/

Generate an Azure Application Gateway self-signed certificate with a custom root CA : https://learn.microsoft.com/en-us/azure/application-gateway/self-signed-certificates





当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
java.net.SocketException: Unexpected end of file from server
java.net.SocketException: Unexpected end of file from server
|
传感器 数据采集 物联网
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
6037 0
|
6月前
|
运维 JavaScript 前端开发
Teek Design Vue3 Element Plus 中后台系统开发模板
Teek Design Vue3 是基于 Vue3 + TypeScript + Vite + Element Plus 的中后台系统开发模板,支持多布局、RBAC权限、主题切换与丰富组件,集成 ECharts、富文本等常用能力,开箱即用,适合企业后台、数据看板等场景。MIT 开源协议,配备完整工程化规范与多环境部署方案。
802 2
Teek Design Vue3 Element Plus 中后台系统开发模板
|
6月前
|
人工智能 前端开发 API
【cursor】前后端分离项目下的AI跨工程管理方案
针对前后端分离项目中AI编辑器难以跨工程协作的问题,提出通过统一文件夹管理方案,将前端与后端项目置于同一根目录下,利用AI编辑器打开根目录并结合@引用功能,实现对前后端代码的联合理解与开发,提升联调效率与代码生成准确性。
1542 0
|
6月前
|
弹性计算 小程序 安全
阿里云服务器199元一年:企业专享,2核4G/5M带宽/80G系统盘,2026年值得买!
阿里云企业专享ECS u1实例,2核4G内存、5M带宽、80G云盘,仅需199元/年,支持Windows/Linux,新老用户同享,续费不涨价。性能稳定,适合官网、电商、小程序等多种企业场景,助力中小企业低成本上云。
|
安全 网络安全 Apache
如何为服务器生成一个TLS证书
通过以上步骤,您可以成功地为服务器生成并配置TLS证书,确保网站的安全性。本文涵盖了从生成私钥、创建CSR、使用自签名证书到获取正式证书的详细步骤,并且对每个步骤进行了详细的解释,使即使是非专业人士也能顺利完成TLS证书的配置。
1842 79
|
应用服务中间件 网络安全 数据安全/隐私保护
使用 Nginx 实现 HTTPS 网站设置
HTTPS 其实是有两部分组成:HTTP + SSL/TLS,也就是在 HTTP 的基础上又加了一层处理加密信息的模块。服务端和客户端的信息传递都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
1390 0
使用 Nginx 实现 HTTPS 网站设置
|
存储 编解码 应用服务中间件
使用Nginx搭建流媒体服务器
本文介绍了流媒体服务器的特性及各种流媒体传输协议的适用场景,并详细阐述了使用 nginx-http-flv-module 扩展Nginx作为流媒体服务器的详细步骤,并提供了在VLC,flv.js,hls.js下的流媒体拉流播放示例。
2519 3