找回密码
 立即注册
首页 业界区 业界 【Azure 环境】在Windows环境中使用OpenSSL生成自签名证 ...

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

利怡悦 2026-1-13 22:05:02
问题描述

在Web应用部署环境中,常常需要为内部系统或测试环境生成自签名证书,尤其是包含根证书、中间证书和服务器证书的完整证书链,并最终生成包含私钥的 PFX 文件(.pfx)。
如何使用 openssl 工具一步步完成这些操作,成为很多工程师的实际需求。
本文将详细介绍如何用 openssl 生成自签名证书链,并将其打包为 PFX 文件。
 
问题解答

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

    • 自签名 根 CA(Root CA)
    • 由根 CA 签发的 中间 CA(Intermediate CA)
    • 由中间 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内容如下,需要替换域名和组织信息
  1. # ----- Basic req settings -----[ req ]default_bits        = 2048prompt              = nodistinguished_name  = dnreq_extensions      = req_ext[ dn ]C   = CNST  = CQL   = CQO   = SelfCA OrgOU  = CertOpsCN  = myself.com# CSR-time extra extensions (used by: -reqexts req_ext)[ req_ext ]subjectAltName = @alt_names[ alt_names ]DNS.1 = *.myself.comDNS.2 = www.myself.com# ----- Root CA certificate extensions -----[ v3_root_ca ]subjectKeyIdentifier = hashauthorityKeyIdentifier = keyid:always,issuerbasicConstraints = critical, CA:TRUE, pathlen:1keyUsage = critical, keyCertSign, cRLSign# ----- Intermediate CA certificate extensions -----[ v3_intermediate_ca ]subjectKeyIdentifier = hashauthorityKeyIdentifier = keyid:always,issuerbasicConstraints = critical, CA:TRUE, pathlen:0keyUsage = critical, keyCertSign, cRLSign# ----- Server (leaf) certificate extensions -----[ server_cert ]subjectKeyIdentifier = hashauthorityKeyIdentifier = keyid,issuerbasicConstraints = CA:FALSEkeyUsage = critical, digitalSignature, keyEnciphermentextendedKeyUsage = serverAuthsubjectAltName = @alt_names# CSR-time server req (used with: -reqexts server_req)[ server_req ]basicConstraints = CA:FALSEkeyUsage = digitalSignature, keyEnciphermentextendedKeyUsage = serverAuth
复制代码
第三步:生成根CA私钥和证书
  1. # 生成根 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私钥和证书
  1. #生成中间 CA 私钥与 CSRopenssl 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
  2. # 用根 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
复制代码
第五步:生成服务器私钥和证书
  1. # 生成服务器私钥与 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
复制代码
 
第三,四,五步的实验结果如图:

第六步:合并证书链
  1. # 构造完整证书链文件(Intermediate + Root)type interCA.crt rootCA.crt > chain.crt# 验证 server.crt 是否能由 chain.crt(中间+根)构成完整信任链openssl verify -CAfile chain.crt server.crt
复制代码
第七步:生成PFX文件
  1. # 将中间+根合并为 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
 
 
 

 
  
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册