返回
为什么会出现“扩展密钥用途不适用于 TLS 服务器身份验证”错误?
java
2024-03-10 02:57:00
TLS 握手中的扩展密钥用途错误:故障排除与解决方案
引言
在 TLS 握手过程中遇到“扩展密钥用途不适用于 TLS 服务器身份验证”错误,这表明服务器拒绝了客户端的 TLS 证书。本文将深入探讨导致此错误的原因,并提供逐步指南,教你如何解决它。
理解扩展密钥用途 (EKU)
TLS 证书的 EKU 指定了证书可用于哪些目的。如果没有将“服务器身份验证”指定为 EKU,服务器将拒绝该证书,并显示上述错误。
解决步骤
1. 检查现有证书的 EKU
- 使用以下命令检查现有证书的 EKU:
openssl x509 -noout -text -in server-certificate.crt
- 在证书详细信息中找到“扩展密钥用途”部分。如果没有列出“服务器身份验证”,则需要重新创建证书。
2. 生成新私钥
- 使用以下命令生成具有正确 EKU 的新私钥:
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubek -out private-key.pem
- 此命令将生成一个具有 2048 位密钥长度的 RSA 私钥,并启用公共密钥导出选项。
3. 创建证书签名请求 (CSR)
- 使用以下命令创建包含正确 EKU 的 CSR:
openssl req -new -key private-key.pem -out csr.pem -subj "/CN=server-hostname" -addext "subjectAltName=DNS:server-hostname" -addext "extendedKeyUsage=serverAuth"
- 确保将“server-hostname”替换为服务器的主机名。
4. 获取证书
- 向证书颁发机构 (CA) 提交 CSR 以获取证书。CA 将验证 CSR 并颁发具有正确 EKU 的证书。
5. 更新服务器证书
- 将新证书安装在服务器上,并重新启动服务器。
常见问题解答
-
问:为什么会出现“扩展密钥用途不适用于 TLS 服务器身份验证”错误?
- 答:该错误表示服务器拒绝了客户端的 TLS 证书,因为该证书的 EKU 未指定服务器身份验证。
-
问:如何检查证书的 EKU?
- 答:使用
openssl x509 -noout -text -in server-certificate.crt
命令检查证书详细信息。
- 答:使用
-
问:如何生成新私钥?
- 答:使用
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubek -out private-key.pem
命令生成一个具有正确 EKU 的新私钥。
- 答:使用
-
问:如何创建包含正确 EKU 的 CSR?
- 答:使用
openssl req -new -key private-key.pem -out csr.pem -subj "/CN=server-hostname" -addext "subjectAltName=DNS:server-hostname" -addext "extendedKeyUsage=serverAuth"
命令创建包含正确 EKU 的 CSR。
- 答:使用
-
问:为什么需要更新服务器证书?
- 答:需要更新服务器证书,以便服务器能够识别并使用具有正确 EKU 的新证书。
结论
通过遵循这些步骤,你可以解决“扩展密钥用途不适用于 TLS 服务器身份验证”错误。确保服务器证书具有正确的 EKU 对于建立安全可靠的 TLS 连接至关重要。