如何使用自签 CA 签发服务器证书与客户端证书


如何使用自签 CA 签发服务器证书与客户端证书

在上一篇文章中,我们生成了一个自签的 CA 根证书:

  • my_ca.key → 根证书私钥(保密)
  • my_ca.crt → 根证书公钥证书(可分发)

接下来,我们将用它来签发 服务器证书客户端证书,这样内部系统就可以通过 TLS/SSL 或双向认证实现安全通信。


一、签发服务器证书

1. 生成服务器私钥

bash 复制代码
openssl genrsa -out server.key 2048
  • 生成服务器私钥文件 server.key
  • 这个私钥通常放在 Web 服务器(如 Nginx、Apache、Tomcat)上使用。

2. 生成服务器证书请求(CSR)

bash 复制代码
openssl req -new -key server.key -out server.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=Dev/CN=server.mycompany.com"
  • server.csr 是证书签名请求文件。
  • CN 要填写服务器的域名,例如 server.mycompany.com

3. 用 CA 签发服务器证书

bash 复制代码
openssl x509 -req -in server.csr -CA my_ca.crt -CAkey my_ca.key \
  -CAcreateserial -out server.crt -days 365 -sha256

参数说明:

  • -CA my_ca.crt → 指定根证书。
  • -CAkey my_ca.key → 指定根证书私钥。
  • -CAcreateserial → 自动生成 my_ca.srl 文件(记录序列号)。
  • -days 365 → 有效期 1 年(作为懒人,还是先输入5年10年再说吧)。
  • 输出 server.crt 就是服务器证书。

4. 验证服务器证书

bash 复制代码
openssl verify -CAfile my_ca.crt server.crt

输出:

复制代码
server.crt: OK

说明服务器证书是由我们自签 CA 正常签发的。


二、签发客户端证书

客户端证书常用于 双向 TLS 认证(Mutual TLS),比如 VPN、内部系统登录。

1. 生成客户端私钥

bash 复制代码
openssl genrsa -out client.key 2048

2. 生成客户端证书请求(CSR)

bash 复制代码
openssl req -new -key client.key -out client.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT/CN=client1"
  • CN=client1 表示客户端用户名或唯一标识。

3. 用 CA 签发客户端证书

bash 复制代码
openssl x509 -req -in client.csr -CA my_ca.crt -CAkey my_ca.key \
  -CAcreateserial -out client.crt -days 365 -sha256

4. 验证客户端证书

bash 复制代码
openssl verify -CAfile my_ca.crt client.crt

输出:

复制代码
client.crt: OK

三、完整的文件清单

到这里我们有:

  • CA 文件

    • my_ca.key → 根 CA 私钥(保密)
    • my_ca.crt → 根 CA 证书(分发给系统/客户端)
  • 服务器文件

    • server.key → 服务器私钥
    • server.csr → 服务器证书请求
    • server.crt → 服务器证书
  • 客户端文件

    • client.key → 客户端私钥
    • client.csr → 客户端证书请求
    • client.crt → 客户端证书

四、使用场景

  1. 单向认证(网站 HTTPS)

    • 浏览器访问 server.mycompany.com
    • 服务器返回 server.crt
    • 浏览器检查 my_ca.crt 是否在信任列表,如果有,就认为可信。
  2. 双向认证(VPN / 内部系统登录)

    • 服务器验证客户端的 client.crt 是否由 my_ca.crt 签发。
    • 客户端验证服务器的 server.crt 是否由 my_ca.crt 签发。
    • 双方都通过 → 建立安全连接。

总结

通过前后两篇文章(如何自签CA根证书),我们完成了一个简易的 PKI 体系:

  1. 先生成自签根证书(CA)。

  2. 再用根证书签发 服务器证书客户端证书

  3. 在实际部署中:

    • CA 证书 (my_ca.crt) 导入到客户端的"受信任根证书存储区"。
    • 服务器使用 server.key + server.crt
    • 客户端使用 client.key + client.crt

这样就可以在内部系统中实现 HTTPS / 双向 TLS 认证。


相关推荐
大树889 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质10 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz10 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工11 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智11 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_11 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈11 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉12 小时前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟12 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome