OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)

OpenSSL------ TLS证书

问:如何生成一套TLS证书、密钥呢?

生成一套 TLS 证书,包括 根 CA 证书、服务器证书、客户端证书 ,可以使用 openssl 命令来完成。完整的步骤如下,包括根 CA、服务器证书和客户端证书的生成。


📌 1. 生成 CA 证书(根证书)

根 CA 证书用于签发服务器和客户端证书,确保它们可以互相验证身份。

bash 复制代码
# 生成 CA 私钥 (2048-bit)
openssl genrsa -out ca.key 2048

# 生成 CA 证书 (自签名,有效期 10 年)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT Department/CN=MyRootCA"

生成的文件:

  • ca.key → CA 私钥
  • ca.crt → CA 证书(用于签发其他证书)

📌 2. 生成服务器证书

服务器证书用于 TLS 服务器身份认证。

🔹 2.1 生成服务器私钥

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

🔹 2.2 生成服务器 CSR(证书签名请求)

bash 复制代码
openssl req -new -key server.key -out server.csr \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT Department/CN=server.example.com"

🔹 2.3 使用 CA 证书签发服务器证书

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

生成的文件:

  • server.key → 服务器私钥
  • server.csr → 服务器证书签名请求
  • server.crt → 服务器证书(由 CA 签发)

📌 3. 生成客户端证书

客户端证书用于客户端认证。

🔹 3.1 生成客户端私钥

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

🔹 3.2 生成客户端 CSR

bash 复制代码
openssl req -new -key client.key -out client.csr \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/OU=IT Department/CN=client.example.com"

🔹 3.3 使用 CA 证书签发客户端证书

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

生成的文件:

  • client.key → 客户端私钥
  • client.csr → 客户端证书签名请求
  • client.crt → 客户端证书(由 CA 签发)

📌 4. 证书验证

🔹 4.1 验证服务器证书

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

如果成功,输出:

复制代码
server.crt: OK

🔹 4.2 验证客户端证书

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

如果成功,输出:

复制代码
client.crt: OK

📌 5. 证书使用

  • 服务器 需要 server.key 和 server.crt 进行 TLS 连接,并且需要 ca.crt 验证客户端证书。
  • 客户端 需要 client.key 和 client.crt 进行 TLS 连接,并且需要 ca.crt 验证服务器证书。

📌 6. 示例:使用 OpenSSL 进行双向 TLS 认证

🔹 服务器端

bash 复制代码
openssl s_server -accept 4059 -cert server.crt -key server.key -CAfile ca.crt -verify 1

🔹 客户端

bash 复制代码
openssl s_client -connect 127.0.0.1:4059 -cert client.crt -key client.key -CAfile ca.crt

📌 总结

证书/密钥 作用
ca.key 根 CA 私钥
ca.crt 根 CA 证书,用于签发其他证书
server.key 服务器私钥
server.crt 服务器证书(CA 签发)
server.csr 服务器证书签名请求
client.key 客户端私钥
client.crt 客户端证书(CA 签发)
client.csr 客户端证书签名请求

该过程完整生成了一套 CA 证书、服务器证书、客户端证书,适用于 TLS 服务器与客户端双向认证。

相关推荐
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧2 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw3 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁5 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
沫璃染墨8 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab0110 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by2099910 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风11 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
feng_you_ying_li13 小时前
linux之网络层
linux·运维·网络