設定適用於 Linux 的 OpenSSL
使用語音 SDK 時,OpenSSL 會動態設定為主機系統版本。
注意
本文僅適用於 Linux 支援語音 SDK 的案例。
為確保連線能力,請確認您的系統中安裝了 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
檔案。 先將環境變數SSL_CERT_DIR
設定指向/opt/ssl/certs
,再使用語音 SDK。 例如:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR 為
/etc/pki/tls
(如同在以 RHEL 為基礎的系統上)。certs
子目錄具有憑證套件組合檔案,例如ca-bundle.crt
。 請先設定要指向該檔案的環境變數SSL_CERT_FILE
,再使用語音 SDK。 例如:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
憑證撤銷檢查
當語音 SDK 連線至語音服務時,便會檢查傳輸層安全性 (TLS/SSL) 憑證。 語音 SDK 會驗證遠端端點所報告的憑證受信任,且未撤銷。 此憑證可提供保護層,以防詐騙及其他相關媒介的攻擊。 檢查方式是向 Azure 所使用的憑證授權單位 (CA) 擷取憑證撤銷清單 (CRL) 來完成。 您可以在本文件中找到已更新 TLS CRL 的 Azure CA 下載位置清單。
如果作為語音服務的目的地報告憑證在所擷取的 CRL 中已撤銷,SDK 會終止連線並透過 Canceled
事件回報錯誤。 若沒有更新的 CRL,便無法檢查憑證的真確性。 因此,語音 SDK 也會將無法從 Azure CA 位置下載 CRL 視為錯誤。
警告
如果您的解決方案使用 Proxy 或防火牆,則應設定為允許存取 Azure 使用的所有憑證撤銷清單 URL。 請注意,其中許多 URL 都在 microsoft.com
網域之外,因此僅提供 *.microsoft.com
的存取權是不夠的。 如需詳細資訊,請參閱這份文件。 在例外情況下,您可以忽略 CRL 失敗 (請參閱對應區段) ,但強烈建議不要使用此類設定,尤其是針對實際執行案例。
大型 CRL 檔案 (>10MB)
CRL 相關失敗的其中一項原因,即是使用大型的 CRL 檔案。 這類錯誤通常僅適用於具有延伸 CA 鏈的特殊環境。 標準公用端點不應發生這類問題。
語音 SDK 使用的預設 CRL 大小上限 (10 MB) 可依設定物件調整。 這項調整的屬性索引鍵為 CONFIG_MAX_CRL_SIZE_KB
,且值 (指定為字串) 預設為「10000」(10 MB)。 例如,建立 SpeechRecognizer
物件 (可管理與語音服務的連線) 時,您可以在其 SpeechConfig
中設定這項屬性。 在下列程式碼片段中,設定會調整為允許 CRL 檔案大小最多到 15MB。
config.SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config->SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config.setProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
speech_config.set_property_by_name("CONFIG_MAX_CRL_SIZE_KB"", "15000")
speechConfig.properties.SetPropertyByString("CONFIG_MAX_CRL_SIZE_KB", "15000")
略過或忽略 CRL 失敗
如果無法將環境設定為存取 Azure CA 位置,則語音 SDK 無法擷取更新的 CRL。 您可以設定 SDK 以繼續和記錄下載失敗,或略過所有的 CRL 檢查。
警告
CRL 檢查是一種安全性措施,略過此檢查會增加遭到攻擊的機率。 在未經徹底考量安全性含意和替代機制的情況下,請勿略過這些檢查,以防範 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
環境變數,並將其設定為臨時目錄的可存取路徑。