Configurare OpenSSL per Linux

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux vicina allo stato end of life (EOL). Prendere in considerazione l'uso e la pianificazione di conseguenza. Per altre informazioni, vedere le linee guida per la fine della vita di CentOS.

Con Speech SDK, OpenSSL è configurato dinamicamente per la versione del sistema host.

Nota

Questo articolo è applicabile solo se Speech SDK è supportato in Linux.

Per garantire la connettività, verificare che nel sistema siano stati installati i certificati OpenSSL. Eseguire un comando:

openssl version -d

L'output nei sistemi basati su Ubuntu/Debian deve essere:

OPENSSLDIR: "/usr/lib/ssl"

Controllare se è presente una certs sottodirectory in OPENSSLDIR. Nell'esempio precedente, sarebbe /usr/lib/ssl/certs.

  • /usr/lib/ssl/certs Se esiste e se contiene molti singoli file di certificato (con .crt o .pem estensione), non è necessario eseguire ulteriori azioni.

  • Se OPENSSLDIR è diverso da /usr/lib/ssl o è presente un singolo file di bundle di certificati anziché più file singoli, è necessario impostare una variabile di ambiente SSL appropriata per indicare dove trovare i certificati.

Esempi

Ecco alcune variabili di ambiente di esempio da configurare per ogni directory OpenSSL.

  • OPENSSLDIR è /opt/ssl. Esiste una certs sottodirectory con molti .crt o .pem file. Impostare la variabile SSL_CERT_DIR di ambiente in modo che punti prima /opt/ssl/certs di usare Speech SDK. Ad esempio:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR è /etc/pki/tls ,ad esempio nei sistemi basati su RHEL/CentOS. Esiste una certs sottodirectory con un file bundle del certificato, ad esempio ca-bundle.crt. Impostare la variabile SSL_CERT_FILE di ambiente in modo che punti a tale file prima di usare Speech SDK. Ad esempio:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Controlli di revoca dei certificati

Quando Speech SDK si connette al servizio Voce, controlla il certificato TLS/SSL (Transport Layer Security). Speech SDK verifica che il certificato segnalato dall'endpoint remoto sia attendibile e non sia stato revocato. Questa verifica fornisce un livello di protezione contro gli attacchi che coinvolgono lo spoofing e altri vettori correlati. Il controllo viene eseguito recuperando un elenco di revoche di certificati (CRL) da un'autorità di certificazione (CA) usata da Azure. Un elenco dei percorsi di download della CA di Azure per i CRL TLS aggiornati è disponibile in questo documento.

Se una destinazione che presenta come servizio Voce segnala un certificato revocato in un CRL recuperato, l'SDK termina la connessione e segnala un errore tramite un Canceled evento. L'autenticità di un certificato segnalato non può essere verificata senza un CRL aggiornato. Di conseguenza, Speech SDK considera anche un errore durante il download di un CRL da un percorso ca di Azure come errore.

Avviso

Se la soluzione usa proxy o firewall, deve essere configurata per consentire l'accesso a tutti gli URL dell'elenco di revoche di certificati usati da Azure. Si noti che molti di questi URL non sono al di fuori del microsoft.com dominio, quindi non è sufficiente consentire l'accesso a *.microsoft.com . Per informazioni dettagliate, vedere questo documento . In casi eccezionali è possibile ignorare gli errori CRL (vedere la sezione corrispondente), ma tale configurazione non è fortemente consigliata, soprattutto per gli scenari di produzione.

File CRL di grandi dimensioni (>10 MB)

Una causa di errori correlati a CRL è l'uso di file CRL di grandi dimensioni. Questa classe di errore è in genere applicabile solo a ambienti speciali con catene di ca estese. Gli endpoint pubblici standard non devono riscontrare questa classe di problemi.

Le dimensioni massime di CRL predefinite usate da Speech SDK (10 MB) possono essere modificate per ogni oggetto config. La chiave di proprietà per questa regolazione è CONFIG_MAX_CRL_SIZE_KB e il valore, specificato come stringa, è per impostazione predefinita "10000" (10 MB). Ad esempio, quando si crea un SpeechRecognizer oggetto (che gestisce una connessione al servizio Voce), è possibile impostare questa proprietà nel relativo SpeechConfigoggetto . Nel frammento di codice seguente, la configurazione viene modificata in modo da consentire una dimensione del file CRL fino a 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")

Ignorare o ignorare gli errori CRL

Se non è possibile configurare un ambiente per accedere a un percorso ca di Azure, Speech SDK non può recuperare un CRL aggiornato. È possibile configurare l'SDK per continuare e registrare gli errori di download o ignorare tutti i controlli CRL.

Avviso

I controlli CRL sono una misura di sicurezza e ignorandoli aumentano la sensibilità agli attacchi. Non devono essere ignorati senza un'attenta considerazione delle implicazioni di sicurezza e dei meccanismi alternativi per la protezione contro i vettori di attacco che controllano il CRL.

Per continuare con la connessione quando non è possibile recuperare un CRL, impostare la proprietà "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" su "true". Viene comunque effettuato un tentativo di recuperare un CRL e gli errori vengono comunque generati nei log, ma i tentativi di connessione possono continuare.

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

Per disattivare i controlli di revoca dei certificati, impostare la proprietà "OPENSSL_DISABLE_CRL_CHECK" su "true". Quindi, durante la connessione al servizio Voce, non verrà eseguito alcun tentativo di controllare o scaricare un CRL e non verrà eseguita alcuna verifica automatica di un certificato TLS/SSL segnalato.

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

Memorizzazione nella cache e prestazioni CRL

Per impostazione predefinita, Speech SDK memorizza nella cache un CRL scaricato correttamente su disco per migliorare la latenza iniziale delle connessioni future. Quando non è presente alcun CRL memorizzato nella cache o quando il CRL memorizzato nella cache è scaduto, viene scaricato un nuovo elenco.

Alcune distribuzioni di Linux non hanno una TMP variabile di ambiente o TMPDIR definita, quindi Speech SDK non memorizza nella cache i CRL scaricati. Senza o TMPDIR variabile TMP di ambiente definita, Speech SDK scarica un nuovo CRL per ogni connessione. Per migliorare le prestazioni di connessione iniziali in questa situazione, è possibile creare una TMPDIR variabile di ambiente e impostarla sul percorso accessibile di una directory temporanea.

Passaggi successivi