早上起来访问自家网站,结果提示服务器证书已过期,马上到腾讯云上申请了新的SSL证书并进行了部署,结果访问还是提示ERR_SSL_KEY_USAGE_INCOMPATIBLE。这可是我之前从来没有碰到过的错误,于是在网上一通搜索,大部分出来的内容都没有点到要害。最终在Google AI 的引导下找到了问题的关键所在,原因在于各大厂商的新签证书不再支持旧的安全设置导致。解决问题的步骤如下:
一、检查证书的详细信息:
在服务器上,直接在 IIS 的“服务器证书”功能中双击证书)。双击打开证书,切换到 “详细信息” 选项卡。
在字段列表中找到并检查以下两个关键扩展:
1、密钥用法 (Key Usage): 对于用于 HTTPS 的 SSL/TLS 服务器证书,这里通常需要包含 数字签名 (Digital Signature) 和 密钥加密 (Key Encipherment) 或至少其中之一(取决于密钥交换算法,但两者都有更安全)。
2、增强型密钥用法 (Enhanced Key Usage / EKU): 对于 Web 服务器,这里必须包含 服务器身份验证 (Server Authentication) (OID: 1.3.6.1.5.5.7.3.1)。检查一下你的证书是否有这个用途。如果证书是用于其他目的(如客户端身份验证、代码签名、电子邮件签名等),但缺少“服务器身份验证”,浏览器就会报这个 INCOMPATIBLE 错误。
确认证书用途:
如果 EKU 是正确的,那么 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误很可能与另一个关键字段 密钥用法 (Key Usage) 相关,或者是与服务器(IIS)和客户端(浏览器)协商的 密码套件 (Cipher Suite) 不兼容有关。
请按以下步骤进一步排查:
- 详细检查 密钥用法 (Key Usage) 字段:
- 在你提供的第二张截图中,我看到 密钥用法 字段显示为 Digital Signature (80)。
- Digital Signature (数字签名) 是必需的。
- 但是,对于使用 RSA 密钥交换的传统 TLS 握手,通常还需要 Key Encipherment (密钥加密) 用法。这个用法允许客户端使用服务器的公钥加密预主密钥 (pre-master secret)。
- 请仔细检查 密钥用法 字段的完整值。 它可能有多行或需要滚动才能看到全部。确认是否仅仅包含 Digital Signature,还是也包含了 Key Encipherment?
- 如果确实只包含 Digital Signature 而缺少 Key Encipherment,这很可能是问题所在。虽然现代的 TLS 倾向于使用提供前向保密性的密码套件(如 ECDHE),这些套件主要依赖证书进行签名(Digital Signature),但如果服务器或客户端配置为(或只能)使用需要 RSA 密钥交换的旧式密码套件,而证书又不允许 Key Encipherment,就会导致此错误。
解决方法(推荐):
使用工具(推荐):下载并使用 IIS Crypto(由 Nartac Software 开发)等工具。它提供了一个简单的 GUI 来管理 Windows Schannel 设置(用于控制 TLS 协议和密码套件)。在服务器上运行。
在 IIS Crypto 中,您可以应用其中一个“最佳实践”模板。这将自动:
启用 TLS_ECDHE_RSA_… 密码套件(例如,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。
优先使用这些 ECDHE 套件,使其高于较旧的 TLS_RSA_WITH_… 套件。
禁用 TLS 1.0 和 TLS 1.1 等较弱/过时的协议(SSL Labs 也建议这样做)。SSL Labs 显示它们当前已启用。
(可选)禁用较旧/较弱的密码套件(例如基于 CBC 的密码套件)。
需要重启:使用 IIS Crypto 应用更改或手动编辑注册表后,必须重启服务器才能使 Schannel 更改生效。仅重置 IIS 不足以完成 Schannel 配置更改。
验证:重启后,请使用您之前看到错误的浏览器重新访问您的网站 (https://xycost.com/)。同时,再次运行 SSL Labs 测试https://www.ssllabs.com/ssltest/analyze.html?d=xycost.com。现在您应该会看到:ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误消失。
SSL Labs 评级提升(如果禁用 TLS 1.0/1.1,则可能为 A 或 A+)。
前向保密性报告为“是”。
TLS_ECDHE_RSA_… 套件已列出并在握手模拟中使用。
通过启用 ECDHE 密码套件,您可以将服务器的功能与当前证书支持的功能(数字签名)相结合,解决不兼容错误,并通过启用前向保密显著提高网站的安全性。
最终问题解决,不需要重新申请SSL证书。
IIS Crypto能够增加Key Encipherment功能么,还是需要重新申请有Key Encipherment功能证书?
不,IIS Crypto 不能为现有证书增加 Key Encipherment 功能。此功能较旧,不被现代浏览器支持,因此对IIS服务器去除此功能即可解决。
原因如下:
- Key Usage 是证书自身的属性:证书的 Key Usage(密钥用法)字段是在证书生成和签发时由证书颁发机构 (CA) 根据你的请求或其策略确定的。它被硬编码并加密签名在证书数据内部。
- IIS Crypto 管理服务器配置:IIS Crypto 是一个用来配置 Windows 服务器 Schannel(安全通道)设置的工具。它管理的是服务器支持哪些 TLS/SSL 协议版本(如 TLS 1.2, TLS 1.3)以及哪些密码套件(Cipher Suites),还有它们的优先顺序。它改变的是服务器端的行为,而不是证书本身的内容。
- 证书不可修改:一旦证书被 CA 签发,其内容(包括 Key Usage 扩展)就是固定的,不能被用户或工具(如 IIS Crypto)修改。任何修改都会破坏 CA 的数字签名,导致证书失效。
结论:
- 如果你确实需要一个包含 Key Encipherment 用途的证书(例如,你有非常特殊的需求,必须强制使用需要它的旧式 RSA 密钥交换密码套件),那么你唯一的选择是重新向证书颁发机构(TrustAsia/DigiCert)申请一个新的证书,并确保在申请过程中指明需要包含 Key Encipherment(通常选择适用于 Web 服务器的标准配置文件会自动包含)。
- 但是,正如我之前强烈建议的,更推荐、更现代、更安全的做法是: 使用 IIS Crypto 来修改你的服务器配置,使其启用并优先使用 TLS_ECDHE_RSA_… 类型的密码套件。这些密码套件提供了前向保密性(Forward Secrecy),并且只需要你的证书具有 Digital Signature 用途(你的证书已经具备这个用途)。这样,你无需更换证书就能解决 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误,并且还能提升服务器的安全性。
评论0