Condividi tramite


Configurare OpenSSL per Linux

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux che ha raggiunto lo stato EOL (End of Life, fine del ciclo di vita). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.

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

Nota

Questo articolo si applica 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.

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

  • Se OPENSSLDIR è diverso da /usr/lib/ssl o è presente un singolo file bundle del certificato, 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 file .crt o .pem. Impostare la variabile di ambiente SSL_CERT_DIR in modo che punti a /opt/ssl/certs prima 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 sottodirectory certs con un file bundle del certificato, ad esempio ca-bundle.crt. Impostare la variabile di ambiente SSL_CERT_FILE 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, questo 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 esposta come servizio Voce segnala un certificato revocato in un CRL recuperato, l'SDK terminerà la connessione e segnalerà un errore tramite un evento Canceled. L'autenticità di un certificato segnalato non può essere verificata senza un CRL aggiornato. Di conseguenza, l'SDK di Voce considererà un errore anche scaricare un CRL da un percorso della CA di Azure.

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 sono esterni al dominio di microsoft.com, quindi non è sufficiente consentire l'accesso a *.microsoft.com. Per informazioni dettagliate vedere questo documento. In casi eccezionali è possibile ignorare gli errori CRL (vedere sezione corrispondente) ma si sconsiglia fortemente di usare tale configurazione, soprattutto per gli scenari di produzione.

File CRL di grandi dimensioni (10 MB) >

Una causa di errori correlati all’elenco di revoche di certificati è l'uso di file CRL di grandi dimensioni. Questa classe di errore in genere si applica solo a ambienti speciali con catene di CA estese. Gli endpoint pubblici standard non devono riscontrare questa classe di problemi.

Le dimensioni predefinite massime di CRL usate da Speech SDK (10 MB) possono essere modificate in base all’oggetto di configurazione. La chiave di proprietà per questa modifica è CONFIG_MAX_CRL_SIZE_KB e il valore, specificato come stringa, è "10000" (10 MB) per impostazione predefinita. Ad esempio, se si crea un oggetto SpeechRecognizer (che gestisce una connessione al servizio Voce), è possibile impostare questa proprietà nel relativo SpeechConfig. 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")

Escludere o ignorare gli errori CRL

Se non è possibile configurare un ambiente per accedere a un percorso della CA di Azure, l'SDK di VOCE non potrà recuperare un CRL aggiornato. È possibile configurare l'SDK per continuare e registrare gli errori di download o escludere tutti i controlli CRL.

Avviso

I controlli CRL sono una misura di sicurezza: escluderli aumenta la sensibilità agli attacchi. Non devono essere esclusi senza un'attenta considerazione delle implicazioni di sicurezza e dei meccanismi alternativi per la protezione contro i vettori di attacco che i controlli CRL attenuano.

Per continuare con la connessione quando non è possibile recuperare un CRL, impostare la proprietà "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" su "true". Verrà comunque effettuato un tentativo per recuperare un CRL e gli errori verranno comunque generati nei log, ma i tentativi di connessione continueranno ad essere consentiti.

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 per 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 di un elenco di revoche di certificati

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

Alcune distribuzioni Linux non hanno TMP o una variabile di ambiente definita TMPDIR, quindi l'SDK di Voce non memorizza nella cache i CRL scaricati. Senza TMP o una variabile di ambiente definita TMPDIR, l'SDK di Voce scaricherà un nuovo CRL ad 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