Konfigurowanie biblioteki OpenSSL dla systemu Linux
Za pomocą zestawu SPEECH SDK biblioteka OpenSSL jest dynamicznie konfigurowana do wersji systemu hosta.
Uwaga
Ten artykuł ma zastosowanie tylko wtedy, gdy zestaw SPEECH SDK jest obsługiwany w systemie Linux.
Aby zapewnić łączność, sprawdź, czy certyfikaty OpenSSL są zainstalowane w systemie. Uruchom polecenie:
openssl version -d
Dane wyjściowe w systemach opartych na systemie Ubuntu/Debian powinny być następujące:
OPENSSLDIR: "/usr/lib/ssl"
Sprawdź, czy w obszarze OPENSSLDIR znajduje certs
się podkatalog. W poprzednim przykładzie będzie to /usr/lib/ssl/certs
.
Jeśli obiekt
/usr/lib/ssl/certs
istnieje i zawiera wiele pojedynczych plików certyfikatów (z rozszerzeniem lub.pem
z.crt
nim), nie ma potrzeby dalszych akcji.Jeśli funkcja OPENSSLDIR jest czymś innym niż
/usr/lib/ssl
lub istnieje jeden plik pakietu certyfikatów zamiast wielu pojedynczych plików, należy ustawić odpowiednią zmienną środowiskową SSL, aby wskazać, gdzie można znaleźć certyfikaty.
Przykłady
Oto kilka przykładowych zmiennych środowiskowych do skonfigurowania dla katalogu OpenSSL.
- OPENSSLDIR to
/opt/ssl
.certs
Istnieje podkatalog z wieloma.crt
plikami lub.pem
. Ustaw zmienną środowiskowąSSL_CERT_DIR
, aby wskazywała wartość/opt/ssl/certs
na przed użyciem zestawu SPEECH SDK. Na przykład:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR to
/etc/pki/tls
(podobnie jak w systemach opartych na systemie RHEL).certs
Istnieje podkatalog z plikiem pakietu certyfikatów, na przykładca-bundle.crt
. Ustaw zmienną środowiskowąSSL_CERT_FILE
, aby wskazywała ten plik przed użyciem zestawu SPEECH SDK. Na przykład:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
Sprawdzanie odwołania certyfikatów
Gdy zestaw SPEECH SDK łączy się z usługą Rozpoznawanie mowy, sprawdza certyfikat Transport Layer Security (TLS/SSL). Zestaw SPEECH SDK sprawdza, czy certyfikat zgłoszony przez zdalny punkt końcowy jest zaufany i nie jest odwołany. Ta weryfikacja zapewnia warstwę ochrony przed atakami obejmującymi fałszowanie i inne powiązane wektory. Sprawdzanie jest wykonywane przez pobranie listy odwołania certyfikatów (CRL) z urzędu certyfikacji używanego przez platformę Azure. Listę lokalizacji pobierania urzędu certyfikacji platformy Azure dla zaktualizowanych list CRL protokołu TLS można znaleźć w tym dokumencie.
Jeśli miejsce docelowe pozujące jako usługa rozpoznawania mowy zgłasza odwołany certyfikat w pobranej liście CRL, zestaw SDK przerywa połączenie i zgłasza błąd za pośrednictwem Canceled
zdarzenia. Nie można sprawdzić autentyczności zgłoszonego certyfikatu bez zaktualizowanej listy CRL. W związku z tym zestaw SDK usługi Mowa traktuje również błąd pobierania listy CRL z lokalizacji urzędu certyfikacji platformy Azure jako błąd.
Ostrzeżenie
Jeśli twoje rozwiązanie używa serwera proxy lub zapory, należy skonfigurować tak, aby zezwalać na dostęp do wszystkich adresów URL listy odwołania certyfikatów używanych przez platformę Azure. Należy pamiętać, że wiele z tych adresów URL znajduje się poza domeną microsoft.com
, więc zezwolenie na dostęp nie *.microsoft.com
jest wystarczające. Aby uzyskać szczegółowe informacje, zobacz ten dokument . W wyjątkowych przypadkach można zignorować błędy listy CRL (zobacz sekcję korespondenta), ale taka konfiguracja nie jest zdecydowanie zalecana, szczególnie w przypadku scenariuszy produkcyjnych.
Duże pliki listy CRL (>10 MB)
Jedną z przyczyn błędów związanych z listą CRL jest użycie dużych plików listy CRL. Ta klasa błędów ma zwykle zastosowanie tylko do specjalnych środowisk z rozszerzonymi łańcuchami urzędów certyfikacji. Standardowe publiczne punkty końcowe nie powinny napotkać tej klasy problemu.
Domyślny maksymalny rozmiar listy CRL używany przez zestaw SPEECH SDK (10 MB) można dostosować dla obiektu konfiguracji. Klucz właściwości dla tej korekty to CONFIG_MAX_CRL_SIZE_KB
i wartość określona jako ciąg jest domyślnie "10000" (10 MB). Na przykład podczas tworzenia SpeechRecognizer
obiektu (który zarządza połączeniem z usługą Rozpoznawanie mowy), można ustawić tę właściwość w jego SpeechConfig
obiekcie . W poniższym fragmencie kodu konfiguracja jest dostosowywana w celu zezwolenia na rozmiar pliku listy CRL do 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")
Pomijanie lub ignorowanie błędów listy CRL
Jeśli nie można skonfigurować środowiska w celu uzyskania dostępu do lokalizacji urzędu certyfikacji platformy Azure, zestaw SPEECH SDK nie może pobrać zaktualizowanej listy CRL. Zestaw SDK można skonfigurować tak, aby kontynuować i rejestrować błędy pobierania lub pomijać wszystkie kontrole listy CRL.
Ostrzeżenie
Kontrole listy CRL to środek bezpieczeństwa i pomijanie ich zwiększa podatność na ataki. Nie należy ich pomijać bez dokładnego rozważenia implikacji zabezpieczeń i alternatywnych mechanizmów ochrony przed wektorami ataków, które sprawdza listy CRL.
Aby kontynuować połączenie, gdy nie można pobrać listy CRL, ustaw właściwość "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE"
na "true"
. Próba pobrania listy CRL jest nadal podejmowana, a błędy są nadal emitowane w dziennikach, ale próby połączenia mogą być kontynuowane.
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")
Aby wyłączyć kontrole odwołania certyfikatów, ustaw właściwość "OPENSSL_DISABLE_CRL_CHECK"
na "true"
. Następnie podczas nawiązywania połączenia z usługą Mowa nie ma próby sprawdzenia ani pobrania listy CRL i automatycznej weryfikacji zgłoszonego certyfikatu 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")
Buforowanie i wydajność listy CRL
Domyślnie zestaw SDK usługi Mowa będzie buforować pomyślnie pobraną listę CRL na dysku, aby poprawić początkowe opóźnienie przyszłych połączeń. Jeśli nie ma buforowanej listy CRL lub gdy buforowana lista CRL wygasła, zostanie pobrana nowa lista.
Niektóre dystrybucje systemu Linux nie mają zdefiniowanej TMP
zmiennej środowiskowej ani TMPDIR
, więc zestaw SPEECH SDK nie buforuje pobranych list CRL. Bez TMP
zdefiniowanej zmiennej środowiskowej zestaw TMPDIR
SPEECH SDK pobiera nową listę CRL dla każdego połączenia. Aby poprawić wydajność początkowego połączenia w tej sytuacji, możesz utworzyć zmienną środowiskową TMPDIR
i ustawić ją na dostępną ścieżkę katalogu tymczasowego.