Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
重要
生效日期: 2026 年 7 月 1 日。 在此日期之前需要执行作,以避免 Linux 和 Android 平台上的服务中断。
1.48.2 之前的 Azure AI Speech SDK 版本中的证书吊销列表(CRL)缓存功能可能会导致 Linux 和 Android 平台上Azure语音服务的连接失败。 这些平台上使用本机 OpenSSL 层的所有 SDK 语言绑定(C#、C++、Java、Python和 Go)都会受到影响。 此问题是由行业范围的 CRL 结构变化引发的。 在 2026 年 7 月 1 日之前需要执行作,以避免服务中断。
受影响的平台: Linux、Android
受影响的 SDK 版本: 1.48.2 之前的所有版本
先决条件
在采取行动之前,请确认此问题是否适用于你:
- 平台: 在 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
-
Python:
- CRL 检查: CRL 检查已启用(1.48.1 之前的版本中的默认值)。
确定应用程序是使用仅限云的、混合(云 + 嵌入式)还是仅嵌入式语音,以根据部署类型来确定您的影响。
如果这三个条件全部适用,请按照所需操作中的步骤操作。
根据部署类型确定影响
CRL 分区更改的影响取决于应用程序是否连接到Azure语音云终结点。 使用下表确定方案和所需作。
| 客户类型 | 影响 | 需要采取行动 |
|---|---|---|
| 仅嵌入 (无云连接) | 不受影响 | 无需操作 |
| 混合云 (带嵌入式回退的云) | 证书续订后,云 STT/TTS 可能会失败 | 请参阅 必要操作 |
| 仅限云 | 证书续订后,云 STT/TTS 可能会失败 | 请参阅 必要操作 |
使用此快速决策指南:
-
您的应用程序是否连接到 Azure 语音云终结点(STT 或 TTS)?
- 否 你仅使用嵌入式语音。 无需执行任何操作。
- 是 →继续执行步骤 2。
-
你的应用程序是否还使用嵌入式语音作为备用方案?
- 是 →你有混合部署。 证书续订后,云功能可能会出现故障,但嵌入式回退仍将正常工作。 云功能需要采取行动。
- 没有 →你拥有仅限云的部署。 证书续订后,语音呼叫可能会失败,且不会回退。 需要采取行动。
仅限嵌入式部署
如果应用程序仅使用嵌入式(设备端)语音识别或合成,并且从不连接到Azure语音云终结点,则不会受到此更改的影响。 无需执行任何操作。
混合部署(具有嵌入式回退机制的云)
当应用程序处于联机状态时,它使用云语音转文本(STT)或文本转语音(TTS)。 这些云连接受 CRL 分区问题的约束。 当没有数据信号时,嵌入式回退仍然有效,但除非你采取措施,否则云功能将无法正常运行。
确定适用于你的缓存方案:
已启用 CRL 磁盘缓存(默认值)
SDK 使用系统临时目录($TMPDIR 或 $TMP) 将 CRL 数据保存到磁盘。 磁盘缓存中的过时 CRL 分区条目可能会导致应用程序重启后出现永久性连接失败。 若要解决此问题:
- 按照 选项 1:升级到 SDK 1.48.2+ (建议),或
- 遵循 选项 2:禁用 CRL 检查。
- 如果无法在截止时间之前升级,请使用 临时解决方法 清除 CRL 磁盘缓存并降低影响持续时间。
未启用 CRL 磁盘缓存
如果使用自定义配置或 $TMPDIR/$TMP 环境变量未设置,SDK 仍会在进程生存期内缓存内存中的 CRL。 重启应用程序会清除内存中缓存,但在下一个跨区域连接或证书轮换上再次出现此问题。 根据所需操作选项升级或禁用CRL检查。
小窍门
脱机时回退到嵌入式语音的混合部署继续在嵌入式模式下工作,但依赖云的功能在您应用修复之前无法使用。
仅限云的部署
所有云 STT/TTS 调用都会受到影响。 混合部署中所述的相同两种方案(已启用或未启用 CRL 磁盘缓存)适用于仅限云的部署。
警告
仅限云的部署没有备用方案。 证书续订开始使用分区 CRL 后,如果尚未应用修补程序,语音识别和合成调用可能会失败。 确切的时间取决于区域 TLS 证书的续订时间,但应在 2026 年 7 月 1 日之前采取措施,以避免任何中断风险。
背景
证书颁发机构(CA),包括Microsoft的公钥基础结构(PKI),正在转换为 分区 CRL ,以符合 CA/浏览器论坛基线要求。 这是影响所有公开受信任 CA 的行业范围变更。
以前,每个证书颁发者都维护了一个 CRL。 使用分区 CRL 时,同一颁发者可能有多个 CRL,每个 CRL 涵盖一部分证书。 这可以提高可伸缩性(将 CRL 大小从 10 MB+ 减少到约 1 KB)。
问题
Azure AI Speech SDK(1.48.2 之前的版本)仅使用证书颁发者名称作为缓存密钥在某些平台上缓存 CRL。 使用分区 CRL 时,这会导致缓存不匹配:
- 连接到一个Azure区域时,SDK 会下载并缓存该区域的 TLS 证书的 CRL
- 连接到其他区域(或证书轮换后),缓存的 CRL 可能与新证书的分区不匹配
- OpenSSL 拒绝连接并出现错误:
X509_V_ERR_DIFFERENT_CRL_SCOPE(错误代码 44)
这会影响到您,如果:
- 在 Linux 或 Android 上使用语音 SDK
- 你已经启用 CRL 检查(这是在受影响版本中的默认设置)。
- 连接到多个Azure 区域或
- 在您的区域,证书轮换(这一过程是自动进行的,并且可能会分配到不同的分区)
这不会影响:
- Windows部署
- iOS 或 Mac 部署
- SDK 版本 1.48.2 或更高版本
必需的操作
在 2026 年 7 月 1 日之前执行以下作之一:
选项 1:升级到 SDK 版本 1.48.2 或更高版本(建议)
SDK 版本 1.48.2 包括用于正确处理已分区 CRL 的修补程序。 默认情况下,语音 SDK 1.48.1 及更高版本禁用 CRL 检查,这也会阻止此问题,但会删除额外的验证层。
下载最新的 SDK:Azure AI Speech SDK 安装程序
升级后,通过监控应用程序日志,验证在连接期间是否没有出现错误 44(X509_V_ERR_DIFFERENT_CRL_SCOPE)。 如果连接到多个Azure区域,请测试跨区域连接以确认问题已解决。
选项 2:禁用CRL检查
如果无法立即升级,请在当前 SDK 版本中禁用 CRL 检查。 请将OPENSSL_DISABLE_CRL_CHECK属性设置为"true",以应用到您的SpeechConfig对象:
设置属性后,通过确认连接成功验证修复,并且 SDK 日志中未显示任何与 CRL 相关的错误(错误 44 或 WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED)。
小窍门
如果要保留 CRL 检查,但允许下载失败,请改为设置为OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE"true"。 此属性允许在 CRL 无法检索时继续连接,同时在 CRL 可用时仍执行 CRL 验证。
有关更多配置选项,请参阅 如何为 Linux 配置 OpenSSL。
不采取行动的风险
如果未在 2026 年 7 月 1 日之前升级或禁用 CRL 检查功能:
- 当证书轮换分配不同的 CRL 分区或跨区域连接时,可能会发生连接失败
- 失败显示为
WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED错误 - 没有提前警告 - 确切的计时取决于区域 TLS 证书续订的时间
- 服务中断 会持续到 SDK 升级、禁用 CRL 检查或清除 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 版本
- 连接到多个区域或在一段工作连接后遇到故障
然后,你很可能受到此问题的影响。
临时解决方法:清除 CRL 磁盘缓存
如果无法在截止时间之前升级或禁用 CRL 检查,可以通过 禁用 CRL 磁盘缓存来降低影响持续时间。 这只会将问题限制为内存中缓存,这意味着:
- 影响持续时间 = 进程生存期
- 重启应用程序会清除缓存 并还原连接(直到下一个跨区域连接或轮换事件)
如何禁用磁盘缓存
在启动应用程序之前删除或取消设置 TMPDIR 或 TMP 环境变量。 如果没有这些变量,SDK 不会将 CRL 保存到磁盘。
或者,手动清除 CRL 缓存目录:
- 默认位置:系统临时目录(
$TMPDIR或$TMP) - 删除缓存
.crl的文件并重启应用程序
注释
这是一种临时解决方法,而不是解决方案。 仍需要升级到 SDK 1.48.2 或更高版本或禁用 CRL 检查。
日程表
| 日期 | 事件 |
|---|---|
| 现在 | 查看部署类型和 SDK 版本 |
| 2026 年 2 月 | SDK 1.48.2 已发布并修复 |
| 2026 年 7 月 1 日 | 截止时间:升级或禁用 CRL 检查 |
| 2026 年 7 月 1 日之后 | 未修补的部署在续订证书时可能会遇到连接失败 |
常见问题解答
这是什么原因?
证书颁发机构需要实施分区 CRL,以符合行业标准。 这不是特定于Microsoft - 所有主要 CA 都在做出这种更改。
这是否会影响Windows?
否。 Windows以不同的方式处理证书验证,并且不受影响。
我只使用一个Azure区域。 我是否仍然受到影响?
是的。 证书轮换(自动发生)可能会将区域证书分配给其他分区,从而触发相同的失败。
如果已禁用 CRL 检查,该怎么办?
你不会受到影响。 无需执行任何作,但建议升级到最新的 SDK 进行其他改进和更新。
禁用 CRL 检查是否有安全风险?
CRL 检查提供额外的证书验证层。 对于大多数用例,禁用它的安全影响很小,因为其他验证机制(证书链,过期)保持活动状态。 如果你有特定的合规性要求,请咨询安全团队。
如何启用 SDK 日志记录来诊断问题?
请参阅 SDK 文档,了解如何启用诊断日志功能:语音 SDK 日志记录。
我仅使用嵌入式语音,没有云连接。 我是否受到影响?
否。 此问题仅影响与 Azure 语音云终结点的连接。 如果应用程序从未连接到云 STT 或 TTS 服务,则不会受到影响。 有关详细信息,请参阅 确定你的影响(按部署类型)。
支持
如果你有疑问或需要帮助:
- Documentation:Azure AI Speech服务文档
- Support: 通过 Azure 门户开具支持票证
- SDK 问题:GitHub - Azure认知服务语音 SDK