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.keyserver.crt 进行 TLS 连接,并且需要 ca.crt 验证客户端证书。
  • 客户端 需要 client.keyclient.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 服务器与客户端双向认证。

相关推荐
invicinble4 小时前
对linux形成认识
linux·运维·服务器
小Pawn爷4 小时前
14.VMmare安装ubuntu
linux·运维·ubuntu
半桔4 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
吠品5 小时前
企业信任基石OV SSL证书
网络协议·https·ssl
HABuo5 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7775 小时前
关于Linux服务器的协作问题
linux·运维·服务器
小白同学_C6 小时前
Lab3-page tables && MIT6.1810操作系统工程【持续更新】
linux·c/c++·操作系统os
十年磨一剑~7 小时前
Linux程序接收到sigpipe信号崩溃处理
linux
geshifei7 小时前
Sched ext回调3——select_cpu(linux 6.15.7)
linux·ebpf
代码游侠7 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法