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

ssl相关命令生成证书

当前环境
OpenSSL 3.5.1 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025)

GmSSL 3.1.2 Dev

本地gmssl命令

#生成证书公私钥对
gmssl sm2keygen -pass 1234 -out sm2.key -pubout sm2pub.pem
#使用certgen命令生成自签名证书cert.crt
gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN Alice -days 365 -key sm2.pem -pass 1234  -key_usage "digitalSignature" -key_usage "keyCertSign" -key_usage cRLSign   -out cert.crt#计算HMAC-SM3
echo -n abc | gmssl sm3hmac -key 11223344556677881122334455667788#解析数字证书
gmssl certparse -in cert.crt

证书链

一、根CA自签发证书

#首先生成CA根证书私钥rootcakey.pem,然后进行自签名,生成根证书rootcacert.pem
gmssl sm2keygen -pass 1234 -out rootcakey.pem
gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 -key rootcakey.pem -pass 1234 -out rootcacert.pem -key_usage keyCertSign -key_usage cRLSign
#查看生成的自签名证书rootcacert.pem
gmssl certparse -in rootcacert.pem或者=======================================================================#首先生成CA根证书私钥rootcakey.key,然后进行自签名,生成根证书rootcacert.crt
gmssl sm2keygen -pass 1234 -out rootcakey.key
gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 -key rootcakey.key -pass 1234 -out rootcacert.crt -key_usage keyCertSign -key_usage cRLSign
#查看生成的自签名证书rootcacert.crt
gmssl certparse -in rootcacert.crt

二、根CA签发二级CA证书

#首先生成二级CA的证书私钥,然后生成证书请求careq.pem,然后由根CA进行签名,生成二级CA的证书cacert.pem
gmssl sm2keygen -pass 1234 -out cakey.pem
gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA"  -key cakey.pem -pass 1234 -out careq.pem
#注意 上面哪行会出现reqgen: illegal option '-days'报错 这里我会去掉这个参数
gmssl reqsign -in careq.pem -days 365 -key_usage keyCertSign -path_len_constraint 0 -cacert rootcacert.pem -key rootcakey.pem -pass 1234 -out cacert.pem或者=======================================================================#首先生成二级CA的证书私钥,然后生成证书请求careq.csr,然后由根CA进行签名,生成二级CA的证书cacert.pem
gmssl sm2keygen -pass 1234 -out cakey.key
gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA"  -key cakey.key -pass 1234 -out careq.csr
#注意 上面哪行会出现reqgen: illegal option '-days'报错 这里我会去掉这个参数
gmssl reqsign -in careq.csr -days 365 -key_usage keyCertSign -path_len_constraint 0 -cacert rootcacert.crt -key rootcakey.key -pass 1234 -out cacert.crt

三、二级CA签发用户证书

#首先生成用户私钥,并通过用户私钥生成证书请求encreq.pem,然后由二级CA进行签发,生成用户证书enccert.pem
gmssl sm2keygen -pass 1234 -out enckey.pem
gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key enckey.pem -pass 1234 -out encreq.pem
gmssl reqsign -in encreq.pem -days 365 -key_usage keyEncipherment -cacert cacert.pem -key cakey.pem -pass 1234 -out enccert.pem
#查看生成的用户证书enccert.pem
gmssl certparse -in enccert.pem
#将二级CA的证书和用户证书放在一个文件中,形成完整的用户证书文件certs.pem
cat enccert.pem > certs.pem
cat cacert.pem >> certs.pem或者====================================================#首先生成用户私钥,并通过用户私钥生成证书请求encreq.csr,然后由二级CA进行签发,生成用户证书enccert.pem
gmssl sm2keygen -pass 1234 -out enckey.key
gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key enckey.key -pass 1234 -out encreq.csr
gmssl reqsign -in encreq.csr -days 365 -key_usage keyEncipherment -cacert cacert.crt -key cakey.csr -pass 1234 -out enccert.crt
#查看生成的用户证书enccert.pem
gmssl certparse -in enccert.pem
#将二级CA的证书和用户证书放在一个文件中,形成完整的用户证书文件certs.pem
cat enccert.pem > certs.pem
cat cacert.pem >> certs.pem

openssl生成证书

1、使用 genpkey方式

#生成RSA密钥对文件(其中包含公钥和私钥)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem
#查看生成密钥文件
openssl pkey -in private.pem -text -noout -check
openssl rsa -in private.pem -text -noout
#从密钥中提取出公钥信息 (注意:不需要特意来提取公钥文件,一般在生成csr文件或执行其它需要公钥命令时openssl会自动提取公钥信息)
openssl pkey -in private.pem -pubout -out public.pem
#查看公钥内容
openssl rsa -pubin -in public.pem -text -noout

2、使用genrsa方式

#生成密钥对 .key
openssl genrsa -out ca.key 2048#提取公钥信息
openssl rsa -in ca.key -pubout -out public.key#生成请求文件 ca.csr
openssl req -new -key ca.key -out ca.csr
或
#通过配置文件cert.conf(下面有文件内容)来创建.csr文件
openssl req -new -key ca.key -out ca.csr -config cert.conf#查看请求.csr文件 noout后加-verify 代表验证csr文件
openssl req -in cert.csr -text -noout#生成证书ca.crt
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
===========================================================================================================
#一下生成密钥key和对应的请求文件csr
openssl req -new -newkey rsa:2048 -keyout cert-key.pem -nodes -out cert.csr -subj "/C=CN/ST=Zhe Jiang/L=Hang Zhou/O=GUAN Technologies Inc./OU=IT/CN=guan-example.com/emailAddress=guan@email.com"#生成crt证书文件
openssl x509 -req -days 365 -in cert.csr -sha256 -signkey cert-key.pem -extfile <(printf "subjectAltName=DNS:guan-example.com,DNS:*.guan-example.com") -out cert.crt 
注意这里在windows下可能不支持-extfile <(printf "subjectAltName=DNS:guan-example.com,DNS:*.guan-example.com")方式添加
可以把下面这段内容添加到ext.conf文件中
subjectAltName=DNS:guan-example.com,DNS:*.guan-example.com
然后执行
openssl x509 -req -days 365 -in cert.csr -sha256 -signkey cert-key.pem -extfile ext.conf -out cert.crt #查看证书.crt文件
openssl x509 -in cert.crt -text -noout

生成证书链

1、生成根证书

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout rootCA-key.pem -subj "/C=CN/ST=Zhe Jiang/L=Hang Zhou/O=GUAN Technologies Inc./OU=IT/CN=guan-example.com/emailAddress=guan@email.com" -out rootCA.crt

2、根据根证书生成子证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert-key.pem -CA rootCA.crt -CAkey rootCA-key.pem -subj "/C=CN/ST=Zhe Jiang/L=Hang Zhou/O=GUAN Technologies Inc./OU=IT/CN=guan-example.com/emailAddress=guan@email.com" -addext "subjectAltName=DNS:guan-example.com,DNS:*.guan-example.com" -out cert.crt

cert.conf的内容如下

[ req ]
default_bits     	= 2048
distinguished_name  = req_distinguished_name
req_extensions		= req_ext
prompt				= no
[ req_distinguished_name ]
C  = CN
ST = ZheJiang
L  = HangZhou
O  = GUAN Technologies Inc.
OU = IT Department
CN = www.guan_example.com
emailAddress = guan@email.com[ req_ext ]
subjectAltName = @alt_names[ alt_names ]
DNS.1 = tls-example.com
DNS.2 = *.tls-example.com

想要学习可以查看这两个视频
带你详细了解TLS、HTTPS以及证书的底层原理-上
带你详细了解TLS、HTTPS以及证书的底层原理-下
超级详细,可以深入学习学习

http://www.xdnf.cn/news/15483.html

相关文章:

  • 阿里云 RabbitMQ 可观测性最佳实践
  • 蓝光三维扫描技术:手机闪光灯模块全尺寸3D检测的高效解决方案
  • 逆功率检测设备防逆流解决方案守护电网安全
  • 智能体架构深度解构:一次用户请求的完整旅程
  • MyBatis 之分页四式传参与聚合、主键操作全解
  • MySQL学习——面试版
  • Navicat操作指南:MySQL数据库配置与Todo应用部署
  • 从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案
  • 深入理解概率图模型:贝叶斯网络因子分解、d-分离与马尔可夫毯
  • vuex原理以及实现
  • MySQL基础学习之DML,DQL(二)
  • 【docker】将本地镜像打包部署到服务器上
  • 架构设计之计算高性能——单体服务器高性能
  • 从混沌到秩序:数据科学的热力学第二定律破局——线性回归的熵减模型 × 最小二乘的能量最小化 × 梯度下降的负反馈控制系统,用物理定律重构智能算法的统一场论
  • Java数据结构第二十五期:红黑树传奇,当二叉树穿上 “红黑铠甲” 应对失衡挑战
  • Linux 文件操作命令大全:从入门到精通的实用指南
  • 《Qt信号与槽机制》详解:从基础到实践
  • Qt 的信号槽机制中,使用 `connect` 函数时,第五个参数是 **连接类型(Connection Type)**,
  • 机器学习sklearn入门:归一化和标准化
  • Antd中使用Table集成 react-resizable实现可伸缩列
  • Jenkins credentials 增加了github credential 但是在Git SCM 凭证中不显示
  • Arcgis 10.7 矢量的分区统计
  • FPGA从flash加载程序的时候,Flash和FPGA芯片的供电是稳定了还是没有稳定就开始加载程序?
  • 「源力觉醒 创作者计划」_巅峰对话:文心大模型4.5系列与DeepSeek/Qwen 3.0深度解析
  • 图像基础指南
  • 【龙泽科技】新能源汽车电驱动总成装调与检修仿真教学软件
  • React+Next.js+Tailwind CSS 电商 SEO 优化
  • SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景
  • mongodb操作巨鹿
  • python应用day11--requests爬虫详解