Azure AI 语音 SDK:证书吊销列表(CRL)兼容性更新

Important

生效日期: 2026 年 7 月 1 日。 在此日期之前需要执行作,以避免 Linux 和 Android 平台上的服务中断。

1.48.2 之前的 Azure AI 语音 SDK 版本中的证书吊销列表(CRL)缓存功能可能会导致 Linux 和 Android 平台上Azure语音服务的连接失败。 这些平台上使用本机 OpenSSL 层的所有 SDK 语言绑定(C#、C++、Java、Python和 Go)都会受到影响。 此问题是由行业范围的 CRL 结构变化引发的。 在 2026 年 7 月 1 日之前需要执行作,以避免服务中断。

受影响的平台: Linux、Android
受影响的 SDK 版本: 1.48.2 之前的所有版本

Prerequisites

在采取行动之前,请确认此问题是否适用于你:

  • 平台: 在 Linux 或 Android 上运行语音 SDK。
  • SDK 版本: 使用 1.48.2 之前的版本。 检查依赖项管理器中的语音 SDK 包的版本。 例如:
    • Python:pip show azure-cognitiveservices-speech
    • C#/.NET:dotnet list package
    • Java/Maven:mvn dependency:tree | grep speechsdk
    • Go:go list -m all | grep speechsdk
  • CRL 检查: CRL 检查已启用(1.48.1 之前的版本中的默认值)。

确定应用程序是使用仅限云的、混合(云 + 嵌入式)还是仅嵌入式语音,以根据部署类型来确定您的影响。

如果这三个条件全部适用,请按照所需操作中的步骤操作。

根据部署类型确定影响

CRL 分区更改的影响取决于应用程序是否连接到Azure语音云终结点。 使用下表确定方案和所需作。

客户类型 Impact 需要采取行动
仅嵌入 (无云连接) 不受影响 无需执行任何操作
混合云 (带嵌入式回退的云) 证书续订后,云 STT/TTS 可能会失败 请参阅 必要操作
仅限云 证书续订后,云 STT/TTS 可能会失败 请参阅 必要操作

使用此快速决策指南:

  • 您的应用程序是否连接到 Azure 语音云终结点(STT 或 TTS)?
    • 否 你仅使用嵌入式语音。 无需执行任何操作。
    • 是 →继续执行步骤 2。
  • 你的应用程序是否还使用嵌入式语音作为备用方案?
    • 是 →你有混合部署。 证书续订后,云功能可能会出现故障,但嵌入式回退仍将正常工作。 云功能需要采取行动。
    • 没有 →你拥有仅限云的部署。 证书续订后,语音呼叫可能会失败,且不会回退。 需要采取行动。

仅限嵌入式部署

如果应用程序仅使用嵌入式(设备端)语音识别或合成,并且从不连接到Azure语音云终结点,则不会受到此更改的影响。 无需采取任何措施。

混合部署(具有嵌入式回退机制的云)

当应用程序处于联机状态时,它使用云语音转文本(STT)或文本转语音(TTS)。 这些云连接受 CRL 分区问题的约束。 当没有数据信号时,嵌入式回退仍然有效,但除非你采取措施,否则云功能将无法正常运行。

若要解决此问题,请遵循 “必需”操作 选项之一。

Tip

脱机时回退到嵌入式语音的混合部署继续在嵌入式模式下工作,但依赖云的功能在您应用修复之前无法使用。

仅限云的部署

所有云 STT/TTS 调用都会受到影响。 按照 所需操作 选项之一进行操作。

Warning

仅限云的部署没有备用方案。 证书续订开始使用分区 CRL 后,如果尚未应用修补程序,语音识别和合成调用可能会失败。 确切的时间取决于区域 TLS 证书的续订时间,但应在 2026 年 7 月 1 日之前采取措施,以避免任何中断风险。

背景

证书颁发机构(CA),包括Microsoft的公钥基础结构(PKI),正在转换为 分区 CRL ,以符合 CA/浏览器论坛基线要求。 这是影响所有公开受信任 CA 的行业范围变更。

以前,每个证书颁发者都维护了一个 CRL。 使用分区 CRL 时,同一颁发者可能有多个 CRL,每个 CRL 涵盖一部分证书。 这可以提高可伸缩性(将 CRL 大小从 10 MB+ 减少到约 1 KB)。

问题

Azure AI 语音 SDK(1.48.2 之前的版本)仅使用证书颁发者名称作为缓存密钥在某些平台上缓存 CRL。 使用分区 CRL 时,此方法可能会导致缓存不匹配:

  • 在 TLS 握手期间验证证书时,SDK 会下载并缓存 TLS 证书的 CRL。
  • 当 SDK 验证同一颁发者的另一个证书时,它可能会从缓存中检索与当前证书的 CDP 不匹配的错误 CRL。
  • OpenSSL 拒绝连接并出现错误: X509_V_ERR_DIFFERENT_CRL_SCOPE (错误代码 44)

这会影响到您,如果:

  • 在 Linux 或 Android 上使用语音 SDK
  • 你已经启用 CRL 检查(这是在受影响版本中的默认设置)。
  • 您所在区域的证书会轮换(此过程会自动进行,并且可能会分配到不兼容的证书链)。

这不会影响:

  • Windows部署
  • iOS 或 Mac 部署
  • SDK 版本 1.48.2 或更高版本

所需操作

Warning

本文早期版本中提到了临时解决方法。 但是,此解决方法不会消除基础缺陷,在某些情况下仍可能导致连接失败。 若要避免任何服务中断,请执行所需的操作。

在 2026 年 7 月 1 日之前执行以下作之一:

SDK 版本 1.48.2 包括用于正确处理已分区 CRL 的修补程序。 默认情况下,语音 SDK 1.48.1 及更高版本禁用 CRL 检查,这也会阻止此问题,但会删除额外的验证层。

下载最新的 SDK:Azure AI 语音 SDK 安装程序

升级后,通过监控应用程序日志,验证在连接期间是否没有出现错误 44(X509_V_ERR_DIFFERENT_CRL_SCOPE)。 如果连接到多个Azure区域,请测试跨区域连接以确认问题已解决。

选项 2:禁用CRL检查

如果无法立即升级,请在当前 SDK 版本中禁用 CRL 检查。 请将OPENSSL_DISABLE_CRL_CHECK属性设置为"true",以应用到您的SpeechConfig对象:

config.SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");

设置属性后,通过确认连接成功验证修复,并且 SDK 日志中未显示任何与 CRL 相关的错误(错误 44 或 WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED)。

有关更多配置选项,请参阅 如何为 Linux 配置 OpenSSL。

不采取行动的风险

如果未在 2026 年 7 月 1 日之前升级或禁用 CRL 检查功能:

  • 每当证书验证遇到 CDP 与同一颁发者的缓存 CRL 不匹配的证书时,可能会发生连接失败。
  • 失败显示为 WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED 错误
  • 不会提前发出警告 — 具体时间取决于你所在区域的 TLS 证书何时续订,或者相关 CA 提供的 CRL 或证书何时更新
  • 在 SDK 升级或禁用 CRL 检查之前,服务中断可能会继续

如何确定你是否受到影响

错误症状

连接失败并显示如下消息:

Connection failed (no connection to the remote host). Internal error: 1. 
Error details: Failed with error: WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED

SDK 日志指示器

启用 SDK 日志记录以查看详细的 TLS 错误。 查找:

SPX_TRACE_ERROR: AZ_LOG_ERROR: tlsio_openssl.c:1655 Error 44 was unexpected
SPX_TRACE_ERROR: AZ_LOG_ERROR: tlsio_openssl.c:691 error:0A000086:SSL routines::certificate verify failed
SPX_TRACE_ERROR: web_socket.cpp:930 WS open operation failed with result=1(WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED)

(日志消息中的行号可能因 SDK 版本而异)

错误 44 (X509_V_ERR_DIFFERENT_CRL_SCOPE) 是此 CRL 分区不匹配问题的特定指示器。

确认问题

如果您看到这些错误,并且:

  • 在 Linux 或 Android 上运行
  • 使用 1.48.2 之前的 SDK 版本
  • 连接到多个区域或在一段工作连接后遇到故障

然后,你很可能受到此问题的影响。

日程表

日期 事件
现在 查看部署类型和 SDK 版本
2026 年 2 月 SDK 1.48.2 已发布并修复
2026 年 7 月 1 日 截止时间:升级或禁用 CRL 检查
2026 年 7 月 1 日之后 未修补的部署在续订证书时可能会遇到连接失败

常见问题解答

为什么会发生这种情况?

证书颁发机构需要实施分区 CRL,以符合行业标准。 这不是特定于Microsoft - 所有主要 CA 都在做出这种更改。

这是否会影响Windows?

No. Windows以不同的方式处理证书验证,并且不受影响。

我只使用一个Azure区域。 我是否仍然受到影响?

Yes. 此问题不限于跨区域流量。 证书轮换,或对与同一颁发者下不同 CRL IDP 关联的证书进行验证,都可能导致失败。

如果已禁用 CRL 检查,该怎么办?

你不会受到影响。 无需执行任何作,但建议升级到最新的 SDK 进行其他改进和更新。

禁用 CRL 检查是否有安全风险?

CRL 检查提供额外的证书验证层。 对于大多数用例,禁用它的安全影响很小,因为其他验证机制(证书链,过期)保持活动状态。 如果你有特定的合规性要求,请咨询安全团队。

如何启用 SDK 日志记录来诊断问题?

请参阅 SDK 文档,了解如何启用诊断日志功能:语音 SDK 日志记录。

我仅使用嵌入式语音,没有云连接。 我是否受到影响?

No. 此问题仅影响与 Azure 语音云终结点的连接。 如果应用程序从未连接到云 STT 或 TTS 服务,则不会受到影响。 有关详细信息,请参阅 确定你的影响(按部署类型)。

Support

如果你有疑问或需要帮助: