Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
在语音 SDK 中,OpenSSL 动态配置为主机系统版本。
注意
本文仅在语音 SDK 在 Linux 上受支持时适用。
为了确保连接性,请验证是否已在系统中安装了 OpenSSL 证书。 运行命令:
openssl version -d
基于 Ubuntu/Debian 的系统上的输出应为:
OPENSSLDIR: "/usr/lib/ssl"
检查 OPENSSLDIR 下是否有 certs 子目录。 在前面的示例中,它将是 /usr/lib/ssl/certs。
如果有
/usr/lib/ssl/certs并且其中包含多个单独的证书文件(带有.crt或.pem扩展名),则无需执行进一步的操作。如果 OPENSSLDIR 是
/usr/lib/ssl以外的其他内容,或者存在单一的证书捆绑包文件而不是多个单独的文件,则需要设置相应的 SSL 环境变量来指示可以在哪里找到证书。
示例
下面是每个 OpenSSL 目录要配置的一些环境变量示例。
- OPENSSLDIR 为
/opt/ssl。 存在包含多个certs或.crt文件的子目录.pem。 在使用语音 SDK 之前,请将环境变量SSL_CERT_DIR设置为指向/opt/ssl/certs。 例如:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR 为
/etc/pki/tls(例如,在基于 RHEL 的系统上就是如此)。 有一个包含证书捆绑包文件(例如certs)的ca-bundle.crt子目录。 在使用语音 SDK 之前,请将环境变量SSL_CERT_FILE设置为指向该文件。 例如:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
证书吊销检查
除了标准 OpenSSL 证书有效性检查之外,语音 SDK 还可以为传输层安全性(TLS/SSL)证书启用额外的吊销检查。 语音 SDK 会验证远程终结点所报告的证书是否可信且没有被吊销。 此验证提供了针对涉及已泄露证书的攻击的附加保护层。 检查是通过从Azure使用的证书颁发机构(CA)检索证书吊销列表(CRL)来完成的。 可以在 本文档中找到更新的 TLS CRL 的Azure CA 下载位置列表。
注意
默认情况下,语音 SDK 1.48 和较新版本中禁用 CRL 检查。
如果一个伪装成语音服务的目标在检索的 CRL 中报告了一个吊销的证书,SDK 将终止连接,并通过 Canceled 事件报告错误。 如果没有更新的 CRL,无法检查所报告证书的真实性。 因此,语音 SDK 还会将无法从 Azure CA 位置下载 CRL 视为错误。
警告
如果解决方案使用代理或防火墙,则应将其配置为允许访问Azure使用的所有证书吊销列表 URL。 请注意,其中许多 URL 都在 microsoft.com 域外部,因此,仅允许访问 *.microsoft.com 是不够的。 有关详细信息,请参阅此文档。
大型 CRL 文件
与 CRL 相关的故障的一个原因是使用大的 CRL 文件。 此类错误通常仅存在于具有扩展 CA 链的特殊环境。 标准公共终结点不应遇到此类问题。
语音 SDK 使用的默认最大 CRL 大小可以按配置对象进行调整。 此调整的属性键是 CONFIG_MAX_CRL_SIZE_KB ,值(指定为字符串)当前默认为“100000”(100 MB)。 例如,创建 SpeechRecognizer 对象时(用于管理语音服务连接),可以在其 SpeechConfig 中设置此属性。 在以下代码片段中,将调整配置以允许 CRL 文件大小高达 150 MB。
config.SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "150000");
config->SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "150000");
config.setProperty("CONFIG_MAX_CRL_SIZE_KB"", "150000");
speech_config.set_property_by_name("CONFIG_MAX_CRL_SIZE_KB"", "150000")
speechConfig.properties.SetPropertyByString("CONFIG_MAX_CRL_SIZE_KB", "150000")
绕过或忽视 CRL 失败
如果环境无法配置为访问 Azure CA,语音 SDK 将无法检索更新的 CRL。 可以将 SDK 配置为继续运行并记录下载失败,亦可跳过所有 CRL 检查。
若要在无法检索 CRL 时继续进行连接,请设置属性 "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" 为 "true"。 仍然尝试检索 CRL,失败仍会记录在日志中,但允许连接尝试继续。
config.SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config->SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config.setProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
speech_config.set_property_by_name("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")
speechConfig.properties.SetPropertyByString("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")
若要关闭证书吊销检查,请将属性 "OPENSSL_DISABLE_CRL_CHECK" 设置为 "true"。 然后,在连接到语音服务时,不会尝试检查或下载 CRL,并且不会自动验证报告的 TLS/SSL 证书。
config.SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config->SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config.setProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
speech_config.set_property_by_name("OPENSSL_DISABLE_CRL_CHECK", "true")
speechConfig.properties.SetPropertyByString("OPENSSL_DISABLE_CRL_CHECK", "true")
CRL 缓存和性能
默认情况下,语音 SDK 将在磁盘上缓存已成功下载的 CRL,以提高将来连接的初始延迟。 如果不存在缓存的 CRL 或缓存的 CRL 已过期,将下载新列表。
某些 Linux 发行版未定义 TMP 或 TMPDIR 环境变量,因此语音 SDK 无法缓存下载的 CRL。 如果未定义 TMP 或 TMPDIR 环境变量,语音 SDK 将针对每次连接下载新的 CRL。 为了提高初始连接性能,可以创建名为 TMPDIR 的环境变量并将其设置为临时目录的可访问路径。