Настройка OpenSSL для Linux

При использовании пакета SDK Речи выполняется динамическая настройка OpenSSL в соответствии с версией главной системы.

Примечание

Эта статья применима, только если пакет SDK Речи поддерживается в Linux.

Чтобы обеспечить возможность подключения, убедитесь, что в системе установлены сертификаты OpenSSL. Выполнение команды

openssl version -d

Выходные данные в системах на базе Ubuntu/Debian должны иметь следующий вид:

OPENSSLDIR: "/usr/lib/ssl"

Проверьте наличие подкаталога certs в каталоге OPENSSLDIR. В приведенном выше примере это /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/CentOS). В нем располагается подкаталог certs с файлом пакета сертификатов, например ca-bundle.crt. Настройте переменную среды SSL_CERT_FILE так, чтобы она указывала на этот файл, прежде чем использовать пакет SDK Речи. Пример:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Проверки отзыва сертификатов

Когда пакет SDK Речи подключается к службе Речи, он проверяет сертификат безопасности TLS/SSL. Пакет SDK Речи проверяет, является ли сертификат, о котором сообщила удаленная конечная точка, доверенным и не был ли он отозван. Эта проверка обеспечивает уровень защиты от атак, использующих подмену и другие связанные векторы. Проверка выполняется путем получения списка отзыва сертификатов (CRL) из центра сертификации (ЦС), используемого Azure. Список расположений загрузки ЦС Azure для обновленных списков отзыва сертификатов TLS можно найти в этом документе.

Если назначение в качестве службы "Речь" сообщает о том, что сертификат был отозван в извлеченном списке отзыва сертификатов, пакет SDK прекратит подключение и сообщит об ошибке через событие Canceled. Подлинность сообщаемого сертификата не может быть проверена без обновленного списка отзыва сертификатов. Таким образом, пакет SDK Речи также будет рассматривать сбой при скачивании списка отзыва сертификатов из расположения ЦС Azure как ошибку.

Большие файлы списков отзыва сертификатов (> 10 МБ)

Одной из причин сбоев, связанных с списком отзыва сертификатов, является использование больших файлов списков отзыва сертификатов. Этот класс ошибок обычно применим только к особым средам с расширенными цепочками ЦС. Стандартные общедоступные конечные точки не должны сталкиваться с проблемами такого класса.

По умолчанию максимальный размер списка отзыва сертификатов, используемый в пакете SDK Речи (10 МБ), можно настроить для каждого объекта конфигурации. Ключ свойства для этой корректировки — CONFIG_MAX_CRL_SIZE_KB и значение, указанное в виде строки, по умолчанию равно 10000 (10 МБ). Например, при создании объекта SpeechRecognizer (который управляет подключением к службе "Речь") это свойство можно задать в его SpeechConfig. В приведенном ниже фрагменте кода конфигурация корректируется таким образом, чтобы размер файла списка отзыва сертификатов составлял не более 15 МБ.

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")

Обход или игнорирование ошибок списка отзыва сертификатов

Если среда не может быть настроена для доступа к расположению ЦС Azure, пакет SDK Речи никогда не сможет получить обновленный список отзыва сертификатов. Вы можете настроить пакет SDK для продолжения работы и регистрации ошибок скачивания или обхода всех проверок списка отзыва сертификатов.

Предупреждение

Проверки списка отзыва сертификатов — это мера безопасности, и их обход повышает уязвимость к атакам. Их не следует обходить без тщательного рассмотрения угроз безопасности и альтернативных механизмов защиты от векторов атак, которые проверяет список отзыва сертификатов.

Чтобы продолжить подключение, когда не удается получить список отзыва сертификатов, задайте свойству "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");
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". Затем при подключении к службе Речи не будут предприниматься попытки проверить или скачать список отзыва сертификатов, а также не будет выполняться автоматическая проверка сообщаемого сертификата 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")

Кэширование и производительность списка отзыва сертификатов

По умолчанию пакет SDK службы "Речь" кэширует успешно загруженный список отзыва сертификатов на диске, чтобы улучшить первоначальную задержку в будущих подключениях. Если кэшированный список отзыва сертификатов отсутствует или его срок действия истек, будет скачан новый список.

В некоторых дистрибутивах Linux не определена переменная среды TMP или TMPDIR, поэтому пакет SDK Речи не кэширует скачанные списки отзыва сертификатов. Если переменная среды TMP или TMPDIR не определена, пакет SDK Речи будет скачивать новый список отзыва сертификатов для каждого подключения. Чтобы повысить начальную производительность подключения в такой ситуации, можно создать TMPDIR переменную среды и задать путь к выбранному временному каталогу..

Дальнейшие действия