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

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


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

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

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

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


一、签发服务器证书

1. 生成服务器私钥

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

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

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 签发服务器证书

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. 验证服务器证书

openssl verify -CAfile my_ca.crt server.crt

输出:

server.crt: OK

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


二、签发客户端证书

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

1. 生成客户端私钥

openssl genrsa -out client.key 2048

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

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 签发客户端证书

openssl x509 -req -in client.csr -CA my_ca.crt -CAkey my_ca.key \-CAcreateserial -out client.crt -days 365 -sha256

4. 验证客户端证书

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 认证。


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

相关文章:

  • 假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
  • 【Linux系统】POSIX信号量
  • Jenkins环境搭建与使⽤
  • C语言(长期更新)第15讲 指针详解(五):习题实战
  • Kimi K2-0905重磅发布:月之暗面再次引领AI编程新纪元
  • 【Rust 入门】01. 创建项目
  • Rust 的生命周期与借用检查:安全性深度保障的基石
  • 极快文本嵌入推理:Rust构建高性能嵌入推理解决方案
  • Qoder 全面解析:三大模式与开发者实战指南
  • 【硬件笔记】负载是如何烧MOS的?
  • DAY1:错题日记
  • 【Kafka】Kafka使用场景用例Kafka用例图
  • 2025年COR SCI2区,基于近似细胞分解的能源高效无人机路径规划问题用于地质灾害监测,深度解析+性能实测
  • 实战案例:数字孪生+可视化大屏,如何高效管理智慧能源园区?
  • Swift 解题:LeetCode 372 超级次方(Super Pow)
  • C/C++ 与 Lua 互相调用详解
  • SpringMVC(一)
  • 混合架构大型语言模型(Jamba)
  • 当低代码遇上AI,有趣,实在有趣
  • WebRTC进阶--WebRTC错误Failed to unprotect SRTP packet, err=9
  • 【Flutter】drag_select_grid_view: ^0.6.2 使用
  • AI架构师的思维方式与架构设计原则
  • 【LeetCode - 每日1题】最少操作使num1归零
  • Bean作用域和生命周期
  • Golang中的context包介绍及源码阅读
  • 谙流 ASK 技术解析(一):秒级扩容
  • Android,jetpack Compose模仿QQ侧边栏
  • 华为云昇腾云服务
  • 数据安全成焦点:基于Hadoop+Spark的信用卡诈骗分析系统实战教程
  • 为什么外网主机可以telnet通内网nginx端口,但是http请求失败?