OpenSSL voor Linux configureren
Met de Speech SDK is OpenSSL dynamisch geconfigureerd voor de hostsysteemversie.
Notitie
Dit artikel is alleen van toepassing als de Speech SDK wordt ondersteund in Linux.
Controleer of OpenSSL-certificaten zijn geïnstalleerd in uw systeem om de connectiviteit te garanderen. Voer een opdracht uit:
openssl version -d
De uitvoer van Ubuntu-/Debian-systemen moet zijn:
OPENSSLDIR: "/usr/lib/ssl"
Controleer of er een certs
submap is onder OPENSSLDIR. In het vorige voorbeeld zou dit zijn /usr/lib/ssl/certs
.
Als het
/usr/lib/ssl/certs
bestaat en als deze veel afzonderlijke certificaatbestanden (met.crt
of.pem
extensie) bevat, hoeft u geen verdere acties uit te voeren.Als OPENSSLDIR iets anders is dan
/usr/lib/ssl
of als er één certificaatbundelbestand is in plaats van meerdere afzonderlijke bestanden, moet u een geschikte SSL-omgevingsvariabele instellen om aan te geven waar de certificaten kunnen worden gevonden.
Voorbeelden
Hier volgen enkele voorbeeldomgevingsvariabelen die u per OpenSSL-directory wilt configureren.
- OPENSSLDIR is
/opt/ssl
. Er is eencerts
submap met veel.crt
of.pem
bestanden. Stel de omgevingsvariabeleSSL_CERT_DIR
in op/opt/ssl/certs
voordat u de Speech SDK gebruikt. Voorbeeld:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR is
/etc/pki/tls
(zoals op RHEL gebaseerde systemen). Er is bijvoorbeeld eencerts
submap met een certificaatbundelbestandca-bundle.crt
. Stel de omgevingsvariabeleSSL_CERT_FILE
in om naar dat bestand te verwijzen voordat u de Speech SDK gebruikt. Voorbeeld:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
Certificaatintrekkingscontroles
Wanneer de Speech SDK verbinding maakt met de Speech-service, wordt het TLS/SSL-certificaat (Transport Layer Security) gecontroleerd. De Speech SDK controleert of het certificaat dat door het externe eindpunt is gerapporteerd, wordt vertrouwd en wordt niet ingetrokken. Deze verificatie biedt een beveiligingslaag tegen aanvallen waarbij spoofing en andere gerelateerde vectoren betrokken zijn. De controle wordt uitgevoerd door een certificaatintrekkingslijst (CRL) op te halen van een certificeringsinstantie (CA) die wordt gebruikt door Azure. In dit document vindt u een lijst met Azure CA-downloadlocaties voor bijgewerkte TLS-CRL's.
Als een doel dat als de Speech-service opstelt, een ingetrokken certificaat in een opgehaalde CRL rapporteert, beëindigt de SDK de verbinding en rapporteert deze een fout via een Canceled
gebeurtenis. De echtheid van een gerapporteerd certificaat kan niet worden gecontroleerd zonder een bijgewerkte CRL. Daarom behandelt de Speech SDK ook een fout bij het downloaden van een CRL van een Azure CA-locatie als een fout.
Waarschuwing
Als uw oplossing gebruikmaakt van proxy of firewall, moet deze worden geconfigureerd om toegang te verlenen tot alle URL's van certificaatintrekkingslijsten die door Azure worden gebruikt. Houd er rekening mee dat veel van deze URL's zich buiten microsoft.com
het domein bevinden, waardoor het niet voldoende is om toegang te *.microsoft.com
verlenen. Zie dit document voor meer informatie. In uitzonderlijke gevallen kunt u CRL-fouten negeren (zie de sectie Correspondent), maar deze configuratie wordt sterk afgeraden, met name voor productiescenario's.
Grote CRL-bestanden (>10 MB)
Een oorzaak van CRL-gerelateerde fouten is het gebruik van grote CRL-bestanden. Deze foutklasse is doorgaans alleen van toepassing op speciale omgevingen met uitgebreide CA-ketens. Standaard openbare eindpunten mogen deze klasse van probleem niet tegenkomen.
De standaard maximale CRL-grootte die wordt gebruikt door de Speech SDK (10 MB) kan per configuratieobject worden aangepast. De eigenschapssleutel voor deze aanpassing is CONFIG_MAX_CRL_SIZE_KB
en de waarde, opgegeven als tekenreeks, is standaard '10000' (10 MB). Wanneer u bijvoorbeeld een SpeechRecognizer
object maakt (waarmee een verbinding met de Speech-service wordt beheerd), kunt u deze eigenschap instellen in de eigenschap SpeechConfig
. In het volgende codefragment wordt de configuratie aangepast om een CRL-bestandsgrootte van maximaal 15 MB toe te laten.
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")
CRL-fouten overslaan of negeren
Als een omgeving niet kan worden geconfigureerd voor toegang tot een Azure CA-locatie, kan de Speech SDK geen bijgewerkte CRL ophalen. U kunt de SDK configureren om door te gaan en downloadfouten te registreren of om alle CRL-controles te omzeilen.
Waarschuwing
CRL-controles zijn een beveiligingsmaatregel en het omzeilen ervan verhoogt de gevoeligheid voor aanvallen. Ze mogen niet worden overgeslagen zonder grondig rekening te houden met de gevolgen van de beveiliging en alternatieve mechanismen voor de bescherming tegen de aanvalsvectoren die door CRL worden gecontroleerd.
Als u wilt doorgaan met de verbinding wanneer een CRL niet kan worden opgehaald, stelt u de eigenschap "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE"
in op "true"
. Er wordt nog steeds geprobeerd om een CRL op te halen en fouten worden nog steeds verzonden in logboeken, maar verbindingspogingen mogen worden voortgezet.
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")
Als u certificaatintrekkingscontroles wilt uitschakelen, stelt u de eigenschap "OPENSSL_DISABLE_CRL_CHECK"
in op "true"
. Wanneer u vervolgens verbinding maakt met de Speech-service, is er geen poging om een CRL te controleren of te downloaden en geen automatische verificatie van een gerapporteerd TLS/SSL-certificaat.
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")
CRL-caching en -prestaties
De Speech SDK slaat standaard een gedownloade CRL op de schijf in de cache op om de initiële latentie van toekomstige verbindingen te verbeteren. Wanneer er geen CRL in de cache aanwezig is of wanneer de CRL in de cache is verlopen, wordt er een nieuwe lijst gedownload.
Voor sommige Linux-distributies is TMP
geen omgevingsvariabele TMPDIR
gedefinieerd, dus de Speech SDK slaat gedownloade CRL's niet in de cache op. Zonder TMP
of TMPDIR
omgevingsvariabele gedefinieerd, downloadt de Speech SDK een nieuwe CRL voor elke verbinding. Als u de initiële verbindingsprestaties in deze situatie wilt verbeteren, kunt u een TMPDIR
omgevingsvariabele maken en deze instellen op het toegankelijke pad van een tijdelijke map.