設定適用於Linux的OpenSSL

警告

這篇文章參考 CentOS,這是接近生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用方式和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

使用語音 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。 有許多或.pem檔案的certs子目錄.crt。 使用語音 SDK 之前,將環境變數 SSL_CERT_DIR 設定為指向 /opt/ssl/certs 。 例如:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR 是 /etc/pki/tls (就像在 RHEL/CentOS 型系統上一樣)。 具有 certs 憑證套件組合檔案的子目錄,例如 ca-bundle.crt。 使用語音 SDK 之前,將環境變數 SSL_CERT_FILE 設定為指向該檔案。 例如:
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 檔案 (>10 MB)

CRL 相關失敗的其中一個原因是使用大型 CRL 檔案。 這個錯誤類別通常只適用於具有擴充 CA 鏈結的特殊環境。 標準公用端點不應該遇到此類別的問題。

語音 SDK 所使用的預設 CRL 大小上限(10 MB)可以調整每個設定物件。 此調整的屬性索引鍵是 CONFIG_MAX_CRL_SIZE_KB ,且指定為字串的值預設為 “10000” (10 MB)。 例如,建立 SpeechRecognizer 物件 (可管理與語音服務的連線) 時,您可以在其 SpeechConfig 中設定這項屬性。 在下列代碼段中,會調整組態以允許CRL檔案大小上限為15 MB。

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 憑證。

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環境變數,並將其設定為暫存目錄的可存取路徑。

下一步