返回

为什么会出现“扩展密钥用途不适用于 TLS 服务器身份验证”错误?

java

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 连接至关重要。