随笔-网络-openssl制作SSL/TLS自签证书
一、基本理论

前置条件:
服务器向正规CA机构 将自己的公钥 进行数字签名,制作出数字证书
交互流程:
主要流程1:服务端发送数字证书给客户端,证书内容包含服务器的公钥
主要流程2:客户端校验证书合法性,取得服务器公钥,以继续后面的流程
后续流程:图中描述已经很具体,见图中文字描述
要点:客户端校验证书合法性(即如何知道不是一个第三方攻击者提供的证书)?

大致意思:
1、 浏览器或者操作系统会自带或者手动安装CA机构的公钥,收到服务器的用CA机构数字签名后的数字证书后,解析出CA机构,并找到本地对应CA机构的公钥,用找到的对应CA机构的公钥计算出Hash Value H2
2、如果是攻击者在数字签名证书将CA机构信息改成一个正规的CA机构名称,浏览器也就能解析出正规的CA机构,这样不是也能计算出正确的Hash Value H2吗
答:因为Certificate Signature是正规CA机构的私钥加密,这个私钥攻击者是没有,所以计算不出来正确的Hash Value H2
二、制作自签证书
根据上面的流程和理论,制作自签证书的步骤如下:假设域名为www.yanjiuyuan.com
大致流程:: 1、先创建一个私有CA机构;2、然后用私有CA机构为域名颁发数字证书
步骤 1: 创建私有 CA
1.1 生成 CA 私钥
openssl genrsa -out rootCA.key 1024
# openssl genpkey -algorithm RSA -out rootCA.key -aes256 # 选择不同的加密算法和长度
1.2 生成自签名的 CA 证书
使用刚才生成的私钥,创建自签名的 CA 证书。
openssl req -key rootCA.key -new -x509 -out rootCA.crt -days 3650 -subj "/C=CN/ST=Fujian/L=Fuzhou/O=My Private CA/OU=Root CA/CN=My Private CA" -sha1 -extensions v3_ca
# -key rootCA.key 使用刚才生成的 CA 私钥
# -new -x509 创建新的 X.509 自签名证书
1.3 安装根证书(Unbuntu)
cp -a rootCA.crt /usr/local/share/ca-certificates/
update-ca-certificates
步骤 2: 为 www.yanjiuyuan.com 创建证书签名请求(CSR)
在为 www.yanjiuyuan.com
创建证书之前,需要生成一个证书签名请求(CSR)。
2.1 生成私钥
openssl genrsa -out server.key 1024
# openssl genpkey -algorithm RSA -out server.key -aes256 # 选择不同的加密算法和长度
2.2 生成 CSR
openssl req -key server.key -new -out server.csr -subj "/C=CN/ST=Fujian/L=Fuzhou/O=Yanjiuyuan/OU=yanfabu/CN=www.yanjiuyuan.com"
在生成 CSR 时,-subj
参数中的 CN=www.yanjiuyuan.com
需要与将来访问该网站时的域名一致。
步骤 3: 使用私有 CA 为 www.yanjiuyuan.com 签发证书
3.1 创建证书配置文件
创建一个 OpenSSL 配置文件 openssl.cnf
,其中需要包含关于 SAN(主题备用名称)的内容。SAN 允许证书支持多个域名。
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
C = CN
ST = Fujian
L = Fuzhou
O = Yanjiuyuan
OU = yanfabu
CN = www.yanjiuyuan.com
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = www.yanjiuyuan.com
DNS.2 = yanjiuyuan.com
3.2 使用私有 CA 签发证书
使用私有 CA 签发证书,并确保它包含 SAN。
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile myopenssl.cnf -extensions v3_req
-CA rootCA.crt
上述创建的CA证书。-CAkey rootCA.key
上述CA私钥签发证书。-CAcreateserial
创建一个新的序列号文件。-in server.csr
输入 CSR 文件。-out server.crt
输出签发的证书。-days 365
证书有效期设置为 1 年。-extfile myopenssl.cnf -extensions v3_req
指定配置文件,添加 SAN 扩展。
步骤 4: 证书验证
4.1 验证证书链
openssl verify -CAfile rootCA.crt server.crt # 验证 `server.crt` 是否由 `rootCA.crt` 签发
4.2 检查证书的内容
openssl x509 -in server.crt -noout -text # 打印证书的详细信息,包括是否正确包含 SAN
步骤 5: 部署证书
将私钥 server.key
和证书 server.crt
部署到你的 服务器(例如 Apache 或 Nginx)中,确保使用正确的配置文件加载这些证书。
使用 openssl s_client 测试 TLS 连接(只建立 TLS 连接,不发送任何请求)
openssl s_client -connect 192.168.99.124:5067 -CAfile rootCA.crt -showcerts
使用 curl 测试
curl -v --cacert rootCA.crt 192.168.99.124:5067
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/18132584
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?