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 unacerts
sottodirectory con molti.crt
o.pem
file. Impostare la variabileSSL_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 unacerts
sottodirectory con un file bundle del certificato, ad esempioca-bundle.crt
. Impostare la variabileSSL_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 SpeechConfig
oggetto . 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.