Konfigurieren von OpenSSL für Linux

Achtung

Dieser Artikel bezieht sich auf CentOS, eine Linux-Distribution, die sich dem End-of-Life-Status (EOL) nähert. Sie sollten Ihre Nutzung entsprechend planen. Weitere Informationen finden Sie im CentOS End-of-Life-Leitfaden.

Mit dem Speech SDK wird OpenSSL dynamisch auf die Version des Hostsystems konfiguriert.

Hinweis

Dieser Artikel gilt nur, wenn das Speech SDK unter Linux unterstützt wird.

Um Konnektivität sicherzustellen, überprüfen Sie, ob OpenSSL-Zertifikate auf Ihrem System installiert wurden. Ausführen eines Befehls:

openssl version -d

Die Ausgabe auf Ubuntu/Debian-basierten Systemen sollte wie folgt aussehen:

OPENSSLDIR: "/usr/lib/ssl"

Überprüfen Sie, ob ein Unterverzeichnis certs unter OPENSSLDIR vorhanden ist. Im Beispiel oben wäre das /usr/lib/ssl/certs.

  • Wenn /usr/lib/ssl/certs vorhanden ist und viele einzelne Zertifikatdateien (mit der Erweiterung .crt oder .pem) enthält, ist keine weitere Aktion erforderlich.

  • Wenn OPENSSLDIR nicht /usr/lib/ssl ist oder eine einzelne Zertifikatpaketdatei anstatt vieler einzelner Dateien vorhanden ist, müssen Sie eine geeignete SSL-Umgebungsvariable festlegen, um anzugeben, wo die Zertifikate zu finden sind.

Beispiele

Hier sind einige Beispielumgebungsvariablen, die pro OpenSSL-Verzeichnis konfiguriert werden sollen.

  • OPENSSLDIR ist /opt/ssl. Es gibt ein Unterverzeichnis certs mit vielen .crt- oder .pem-Dateien. Legen Sie die Umgebungsvariable SSL_CERT_DIR fest, um auf /opt/ssl/certs zu verweisen, bevor das Speech SDK verwendet wird. Beispiel:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR ist /etc/pki/tls (wie bei RHEL-/CentOS-basierten Systemen). Es ist ein certs-Unterverzeichnis mit einer Zertifikatpaketdatei vorhanden, z. B. ca-bundle.crt. Legen Sie die Umgebungsvariable SSL_CERT_FILE fest, um auf diese Datei zu verweisen, bevor das Speech SDK verwendet wird. Beispiel:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Überprüfung von Zertifikatswiderrufen

Wenn das Speech SDK mit dem Speech-Dienst verbunden wird, wird das Transport Layer Security (TLS/SSL)-Zertifikat geprüft. Das Speech SDK überprüft, dass das Zertifikat, das vom Remote-Endpunkt gemeldet wird, vertrauenswürdig ist und nicht widerrufen wurde. Diese Prüfung bietet eine Schutzebene vor Angriffen mit Spoofing und anderen verwandten Vektoren. Die Überprüfung wird durch Abrufen einer Zertifikatsperrliste (Certificate Revocation List, CRL) von einer von Azure verwendeten Zertifizierungsstelle (Certificate Authority, CA) durchgeführt. Eine Liste der Downloadspeicherorte der Azure-Zertifizierungsstelle für aktualisierte TLS-CRLs finden Sie in diesem Dokument.

Wenn ein Ziel, das sich als der Speech-Dienst ausgibt, ein Zertifikat meldet, das in einer abgerufenen Zertifikatsperrliste widerrufen wurde, beendet das SDK die Verbindung und meldet einen Fehler über ein Canceled-Ereignis. Die Echtheit eines gemeldeten Zertifikats kann ohne eine aktualisierte Zertifikatssperrliste nicht überprüft werden. Deshalb behandelt das Speech SDK auch den Fehler, wenn eine Sperrliste von einem Azure-ZS-Speicherort als Fehler heruntergeladen wird.

Warnung

Wenn in Ihrer Lösung ein Proxy oder eine Firewall verwendet wird, sollten sie so konfiguriert werden, dass der Zugriff auf alle von Azure verwendeten Zertifikatssperrlisten-URLs zugelassen wird. Beachten Sie, dass sich viele dieser URLs außerhalb der Domäne microsoft.com befinden, sodass der Zugriff auf *.microsoft.com allein nicht ausreicht. Ausführliche Informationen dazu finden Sie in diesem Dokument. In Ausnahmefällen können Sie CRL-Fehler ignorieren (siehe entsprechenden Abschnitt). Von einer solchen Konfiguration wird jedoch dringend abgeraten – insbesondere in Produktionsszenarien.

Große Zertifikatsperrlisten-Dateien (> 10 MB)

Eine Ursache für CRL-bezogene Fehler ist die Verwendung großer Zertifikatssperrlistendateien. Diese Fehlerklasse gilt normalerweise nur für spezielle Umgebungen mit erweiterten CA-Ketten. Standard (öffentliche)-Endpunkte sollten bei dieser Problemklasse nicht auftreten.

Die maximale CRL-Standardgröße, die vom Speech SDK verwendet wird (10 MB), kann pro Konfigurationsobjekt angepasst werden. Der Eigenschaftsschlüssel für diese Anpassung ist CONFIG_MAX_CRL_SIZE_KB, und der als Zeichenfolge angegebene Wert ist standardmäßig „10000“ (10 MB). Wenn Sie z. B. ein SpeechRecognizer-Objekt erstellen (das eine Verbindung mit dem Speech-Dienst verwaltet), können Sie diese Eigenschaft in der SpeechConfig-Eigenschaft festlegen. Im folgenden Schnipsel wird die Konfiguration angepasst, um eine CRL-Dateigröße von bis zu 15 MB zuzulassen.

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

Umgehen oder Ignorieren von CRL-Fehlern

Wenn eine Umgebung nicht für den Zugriff auf einen Azure-ZS-Speicherort konfiguriert werden kann, kann das Speech SDK keine aktualisierte Sperrliste abrufen. Sie können das SDK so konfigurieren, dass es entweder fortgesetzt wird und Downloadfehler protokolliert oder alle Sperrlistenüberprüfungen umgeht.

Warnung

Sperrlistenüberprüfungen sind eine Sicherheitsmaßnahme, und deren Umgehung erhöht die Anfälligkeit für Angriffe. Sie sollten nicht umgangen werden, ohne die Sicherheitsauswirkungen und alternativen Mechanismen zum Schutz vor den Angriffsvektoren zu berücksichtigen, die durch Sperrlistenüberprüfungen abgeschwächt werden.

Um die Verbindung fortzusetzen, wenn keine Zertifikatsperrliste abgerufen werden kann, legen Sie die Eigenschaft "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" auf "true" fest. Es wird weiterhin versucht, eine Sperrliste abzurufen, und Fehler werden weiterhin in Protokollen ausgegeben, aber Verbindungsversuche dürfen fortgesetzt werden.

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

Legen Sie die "OPENSSL_DISABLE_CRL_CHECK"-Eigenschaft auf "true" fest, um Zertifikatsperrprüfungen zu deaktivieren. Beim Herstellen einer Verbindung mit dem Speech-Dienst wird dann weder versucht, eine Zertifikatsperrliste zu überprüfen oder herunterzuladen, noch erfolgt eine automatische Überprüfung eines gemeldeten TLS/SSL-Zertifikats.

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

Zwischenspeicherung von Zertifikatssperrlisten und Leistung

Standardmäßig speichert das Speech SDK eine erfolgreich heruntergeladene Zertifikatssperrliste auf dem Datenträger zwischen, um die anfängliche Latenz zukünftiger Verbindungen zu verbessern. Wenn keine zwischengespeicherte Sperrliste vorhanden ist oder die zwischengespeicherte Sperrliste abgelaufen ist, wird eine neue Liste heruntergeladen.

Für einige Linux-Distributionen ist keine Umgebungsvariable TMP oder TMPDIR definiert, sodass das Speech SDK keine heruntergeladenen Sperrlisten zwischenspeichert. Ohne definierte Umgebungsvariablen TMP oder TMPDIR lädt das Speech SDK eine neue Sperrliste für jede Verbindung herunter. Um die Leistung bei der Verbindungsherstellung zu verbessern, können Sie eine Umgebungsvariable namens TMPDIR erstellen und auf den Pfad des von Ihnen ausgewählten temporären Verzeichnisses festlegen.

Nächste Schritte