TLS_0">OpenSSL—— TLS证书
TLS_2">问:如何生成一套TLS证书、密钥呢?
生成一套 TLS 证书,包括 根 CA 证书、服务器证书、客户端证书,可以使用 openssl
命令来完成。完整的步骤如下,包括根 CA、服务器证书和客户端证书的生成。
📌 1. 生成 CA 证书(根证书)
根 CA 证书用于签发服务器和客户端证书,确保它们可以互相验证身份。
# 生成 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. 生成服务器证书
🔹 2.1 生成服务器私钥
openssl genrsa -out server.key 2048
🔹 2.2 生成服务器 CSR(证书签名请求)
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 证书签发服务器证书
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 生成客户端私钥
openssl genrsa -out client.key 2048
🔹 3.2 生成客户端 CSR
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 证书签发客户端证书
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 验证服务器证书
openssl verify -CAfile ca.crt server.crt
如果成功,输出:
server.crt: OK
🔹 4.2 验证客户端证书
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
验证服务器证书。
TLS__107">📌 6. 示例:使用 OpenSSL 进行双向 TLS 认证
🔹 服务器端
openssl s_server -accept 4059 -cert server.crt -key server.key -CAfile ca.crt -verify 1
🔹 客户端
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 服务器与客户端双向认证。