Configurar o OpenSSL para Linux

Cuidado

Este artigo faz referência ao CentOS, uma distribuição do Linux que está se aproximando do status de EOL (fim da vida útil). Considere seu uso e planejamento adequadamente. Para obter mais informações, veja a orientação CentOS End Of Life.

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 foram 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 acima, 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ório certs com vários arquivos .crt ou .pem. Defina a variável de ambiente SSL_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/CentOS). Há um subdiretório certs com um arquivo de pacote de certificado, por exemplo ca-bundle.crt. Defina a variável de ambiente SSL_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 abaixo, 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 haverá 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.

Próximas etapas