Configurar o OpenSSL para Linux
Com o SDK de Fala, o OpenSSL é configurado dinamicamente para a versão do sistema host.
Observação
Este artigo só é aplicável quando há suporte para o SDK de Fala no Linux.
Para garantir a conectividade, verifique se os certificados OpenSSL estão instalados no sistema. Execute um comando:
openssl version -d
A saída em sistemas baseados no Ubuntu/Debian deve ser:
OPENSSLDIR: "/usr/lib/ssl"
Verifique se há um subdiretório certs
em OPENSSLDIR. No exemplo anterior, seria /usr/lib/ssl/certs
.
Se houver um
/usr/lib/ssl/certs
e ele contiver vários arquivos de certificado individuais (com a extensão.crt
ou.pem
), não haverá necessidade de realizar mais ações.Se o OPENSSLDIR for diferente de
/usr/lib/ssl
ou houver só um arquivo de pacote de certificado em vez de vários arquivos individuais, você precisará definir uma variável de ambiente SSL apropriada para indicar onde os certificados podem ser encontrados.
Exemplos
Aqui estão algumas variáveis de ambiente de exemplo para configurar por diretório OpenSSL.
- O OPENSSLDIR é
/opt/ssl
. Há um subdiretóriocerts
com vários arquivos.crt
ou.pem
. Defina a variável de ambienteSSL_CERT_DIR
para apontar para/opt/ssl/certs
antes de usar o SDK de Fala. Por exemplo:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR é
/etc/pki/tls
(como em sistemas baseados no RHEL). Há um subdiretóriocerts
com um arquivo de pacote de certificado, por exemploca-bundle.crt
. Defina a variável de ambienteSSL_CERT_FILE
para apontar para esse arquivo antes de usar o SDK de Fala. Por exemplo:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
Verificações de revogação de certificado
Quando o SDK de Fala se conecta ao Serviço de Fala, ele verifica o certificado Transport Layer Security (TLS/SSL). O SDK de Fala verifica se o certificado reportado pelo ponto de extremidade remoto é confiável e não foi revogado. Essa verificação fornece uma camada de proteção contra ataques que envolvem falsificação e outros vetores relacionados. A verificação é realizada recuperando uma CRL (lista de certificados revogados) de uma AC (autoridade de certificação) usada pelo Azure. Uma lista de locais de download de autoridade de certificação do Azure para CRLs de TLS atualizadas pode ser encontrada neste documento.
Se um destino que se passa por serviço de Fala relatar um certificado que foi revogado em uma CRL recuperada, o SDK encerrará a conexão e relatará um erro por meio de um evento Canceled
. A autenticidade de um certificado relatado não pode ser verificada sem uma CRL atualizada. Portanto, o SDK de Fala também trata uma falha ao baixar uma CRL de um local de AC do Azure como um erro.
Aviso
Se a sua solução usar proxy ou firewall, ela deverá ser configurada para permitir o acesso a todas as URLs da lista de certificados revogados usada pelo Azure. Observe que muitas dessas URLs estão fora do domínio microsoft.com
, portanto, permitir o acesso a *.microsoft.com
não é suficiente. Confira este documento para obter detalhes. Em casos excepcionais, você pode ignorar falhas de CRL (confira a seção correspondente), mas essa configuração não é muito recomendada, especialmente para cenários de produção.
Arquivos de CRL grandes (>10 MB)
Uma causa das falhas relacionadas à CRL é o uso de arquivos de CRL grandes. Essa classe de erro costuma ser aplicável apenas a ambientes especiais com cadeias de AC estendidas. Os pontos de extremidade públicos padrão não devem encontrar esse tipo de problema.
O tamanho máximo padrão da CRL usado pelo SDK de Fala (10 MB) pode ser ajustado de acordo com o objeto de configuração. A chave de propriedade para esse ajuste é CONFIG_MAX_CRL_SIZE_KB
e o valor, especificado como uma cadeia de caracteres, é "10000" por padrão (10 MB). Por exemplo, ao criar um objeto SpeechRecognizer
(que gerencia uma conexão com o serviço de Fala), você pode definir essa propriedade em seu SpeechConfig
. No trecho de código a seguir, a configuração é ajustada para permitir que um tamanho de arquivo de CRL seja de até 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")
Contornando ou ignorando falhas de CRL
Se um ambiente não puder ser configurado para acessar um local de AC do Azure, o SDK de Fala não poderá recuperar uma CRL atualizada. Você pode configurar o SDK para continuar e registrar falhas de download ou para ignorar todas as verificações de CRL.
Aviso
As verificações de CRL são uma medida de segurança e ignorá-las aumentará a susceptibilidade a ataques. Elas não devem ser ignoradas sem uma consideração minuciosa das implicações de segurança e dos mecanismos alternativos para proteção contra os vetores de ataque que a verificação de CRL atenua.
Para continuar a conexão quando uma CRL não puder ser recuperada, defina a propriedade "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE"
como "true"
. Uma tentativa ainda é feita para recuperar uma CRL e falhas ainda são emitidas em logs, mas as tentativas de conexão têm permissão para continuar.
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")
Para desligar as verificações de revogação de certificado, defina a propriedade "OPENSSL_DISABLE_CRL_CHECK"
como "true"
. Em seguida, ao se conectar ao serviço de Fala, não há nenhuma tentativa de verificar nem de baixar uma CRL e nenhuma verificação automática de um certificado TLS/SSL relatada.
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")
Cache e desempenho de CRL
Por padrão, o SDK de Fala armazenará um CRL baixado com êxito em cache no disco para aprimorar a latência inicial das próximas conexões. Quando nenhuma CRL armazenada em cache estiver presente ou quando a CRL armazenada em cache expirar, uma nova lista será baixada.
Algumas distribuições do Linux não têm uma variável de ambiente TMP
ou TMPDIR
definida, portanto, o SDK de Fala não armazena CRLs baixadas em cache. Sem a variável de ambiente TMP
ou TMPDIR
definida, o SDK de Fala baixa uma nova CRL para cada conexão. Para aprimorar o desempenho da conexão inicial, você pode criar uma variável de ambiente TMPDIR
e defini-la como o caminho acessível de um diretório temporário.