Herstellen einer Verbindung mit einem sicheren Dienst mit dem ReverseproxyConnect to a secure service with the reverse proxy

In diesem Artikel wird erläutert, wie eine sichere Verbindung zwischen dem Reverseproxy und Diensten hergestellt und so ein sicherer End-to-End-Kanal ermöglicht wird.This article explains how to establish secure connection between the reverse proxy and services, thus enabling an end to end secure channel. Weitere Informationen zum Reverseproxy finden Sie unter Reverseproxy in Azure Service Fabric.To learn more about reverse proxy, see Reverse proxy in Azure Service Fabric

Die Herstellung einer Verbindung mit sicheren Diensten wird nur unterstützt, wenn der Reverseproxy für das Lauschen von HTTPS konfiguriert ist.Connecting to secure services is supported only when reverse proxy is configured to listen on HTTPS. In diesem Artikel wird davon ausgegangen, dass dies der Fall ist.This article assumes this is the case. Informationen zum Konfigurieren des Reverseproxys in Service Fabric finden Sie unter Setup reverse proxy in Azure Service Fabric (Reverseproxy-Setup in Azure Service Fabric).Refer to Setup reverse proxy in Azure Service Fabric to configure the reverse proxy in Service Fabric.

Herstellung einer sicheren Verbindung zwischen dem Reverseproxy und DienstenSecure connection establishment between the reverse proxy and services

Reverseproxy authentifiziert sich bei Diensten:Reverse proxy authenticating to services:

Der Reverseproxy identifiziert sich bei Diensten selbst über sein Zertifikat.The reverse proxy identifies itself to services using its certificate. Für Azure-Cluster wird das Zertifikat mit der reverseProxyCertificate-Eigenschaft im Ressourcentypenabschnitt Microsoft.ServiceFabric/clusters der Resource Manager-Vorlage angegeben.For Azure clusters the certificate is specified with reverseProxyCertificate property in the Microsoft.ServiceFabric/clusters Resource type section of the Resource Manager template. Für eigenständige Cluster wird der Cluster entweder mit der ReverseProxyCertificate- oder der ReverseProxyCertificateCommonNames-Eigenschaft im Abschnitt Security der Datei „ClusterConfig.json“ angegeben.For standalone clusters, the certificate is specified with either the ReverseProxyCertificate or the ReverseProxyCertificateCommonNames property in the Security section of ClusterConfig.json. Weitere Informationen finden Sie unter Aktivieren des Reverseproxys auf eigenständigen Clustern.To learn more, see Enable reverse proxy on standalone clusters.

Die Dienste können die Logik implementieren, um das vom Reverseproxy bereitgestellte Zertifikat zu überprüfen.Services can implement the logic to verify the certificate presented by the reverse proxy. Die Dienste können die Details des akzeptierten Clientzertifikats als Konfigurationseinstellungen im Konfigurationspaket angeben.The services can specify the accepted client certificate details as configuration settings in the configuration package. Dieses kann zur Laufzeit gelesen und zum Überprüfen des vom Reverseproxy bereitgestellten Zertifikats verwendet werden.This can be read at runtime and used to validate the certificate presented by the reverse proxy. Informationen zum Hinzufügen der Konfigurationseinstellungen finden Sie unter Verwalten von Anwendungsparametern.Refer to Manage application parameters to add the configuration settings.

Reverseproxy überprüft die Identität des Diensts über das vom Dienst bereitgestellte Zertifikat:Reverse proxy verifying the service's identity via the certificate presented by the service:

Der Reverseproxy unterstützt für die Ausführung der Serverzertifikatüberprüfung der von den Diensten bereitgestellten Zertifikate die folgenden Richtlinien: „Keine“ (None), „ServiceCommonNameAndIssuer“ und „ServiceCertificateThumbprints“.Reverse proxy supports the following policies to perform server certificate validation of the certificates presented by services: None, ServiceCommonNameAndIssuer, and ServiceCertificateThumbprints. Um die vom Reverseproxy zu verwendende Richtlinie auszuwählen, geben Sie ApplicationCertificateValidationPolicy im Abschnitt ApplicationGateway/Http unter fabricSettings an.To select the policy for reverse proxy to use, specify the ApplicationCertificateValidationPolicy in the ApplicationGateway/Http section under fabricSettings.

Der nächste Abschnitt enthält die Konfigurationsdetails für die einzelnen Optionen.The next section shows configuration details for each of these options.

Optionen für die DienstzertifikatüberprüfungService certificate validation options

  • Keine: Der Reverseproxy überspringt die Überprüfung des an den Proxy übermittelten Dienstzertifikats und stellt die sichere Verbindung her.None: Reverse proxy skips verification of the proxied service certificate and establishes the secure connection. Dies ist das Standardverhalten.This is the default behavior. Geben Sie ApplicationCertificateValidationPolicy mit dem Wert None im Abschnitt ApplicationGateway/Http ein.Specify the ApplicationCertificateValidationPolicy with value None in the ApplicationGateway/Http section.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "None"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCommonNameAndIssuer: Der Reverseproxy überprüft das vom Dienst bereitgestellte Zertifikat anhand des allgemeinen Namens des Zertifikats und des Fingerabdrucks des unmittelbaren Ausstellers: Geben Sie ApplicationCertificateValidationPolicy mit dem Wert ServiceCommonNameAndIssuer im Abschnitt ApplicationGateway/Http an.ServiceCommonNameAndIssuer: Reverse proxy verifies the certificate presented by the service based on certificate's common name and immediate issuer's thumbprint: Specify the ApplicationCertificateValidationPolicy with value ServiceCommonNameAndIssuer in the ApplicationGateway/Http section.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "ServiceCommonNameAndIssuer"
                   }
                 ]
               }
             ],
             ...
    }
    

    Um die Liste der allgemeinen Namen des Diensts und der Fingerabdrücke des Ausstellers anzugeben, fügen Sie wie weiter unten dargestellt einen ApplicationGateway/Http/ServiceCommonNameAndIssuer-Abschnitt unter fabricSettings ein.To specify the list of service common name and issuer thumbprints, add a ApplicationGateway/Http/ServiceCommonNameAndIssuer section under fabricSettings, as shown below. Im Array parameters können mehrere Paare von allgemeinen Namen des Zertifikats und Fingerabdrücken des Ausstellers hinzugefügt werden.Multiple certificate common name and issuer thumbprint pairs can be added in the parameters array.

    Wenn der Endpunkt, mit dem der Reverseproxy eine Verbindung herstellt, ein Zertifikat bereitstellt, dessen allgemeiner Name und Fingerabdruck des Ausstellers mit einem der hier angegebenen Werte übereinstimmt, wird der SSL-Kanal eingerichtet.If the endpoint reverse proxy is connecting to presents a certificate who's common name and issuer thumbprint matches any of the values specified here, SSL channel is established. Bei Nichtübereinstimmung der Zertifikatdetails gibt der Reverseproxy für die Anforderung des Clients eine Fehlermeldung mit dem Statuscode 502 (Ungültiges Gateway) aus.Upon failure to match the certificate details, reverse proxy fails the client's request with a 502 (Bad Gateway) status code. Zudem enthält die HTTP-Statuszeile den Ausdruck „Invalid SSL Certificate“.The HTTP status line will also contain the phrase "Invalid SSL Certificate."

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http/ServiceCommonNameAndIssuer",
                 "parameters": [
                   {
                     "name": "WinFabric-Test-Certificate-CN1",
                     "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 b4 22 11"
                   },
                   {
                     "name": "WinFabric-Test-Certificate-CN2",
                     "value": "b3 44 9b 01 8d 0f 68 39 a2 c5 d6 2b 5b 6c 6a c8 22 11 33 44"
                   }
                 ]
               }
             ],
             ...
    }
    
  • ServiceCertificateThumbprints: Der Reverseproxy überprüft das an den Proxy übermittelte Dienstzertifikat anhand des zugehörigen Fingerabdrucks.ServiceCertificateThumbprints: Reverse proxy will verify the proxied service certificate based on its thumbprint. Diese Option können Sie auswählen, wenn die Dienste mit selbstsignierten Zertifikaten konfiguriert sind: Geben Sie ApplicationCertificateValidationPolicy mit dem Wert ServiceCertificateThumbprints im Abschnitt ApplicationGateway/Http an.You can choose to go this route when the services are configured with self signed certificates: Specify the ApplicationCertificateValidationPolicy with value ServiceCertificateThumbprints in the ApplicationGateway/Http section.

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                   {
                     "name": "ApplicationCertificateValidationPolicy",
                     "value": "ServiceCertificateThumbprints"
                   }
                 ]
               }
             ],
             ...
    }
    

    Geben Sie zudem die Fingerabdrücke mit einem ServiceCertificateThumbprints-Eintrag im Abschnitt ApplicationGateway/Http an.Also specify the thumbprints with a ServiceCertificateThumbprints entry in the ApplicationGateway/Http section. Mehrere Fingerabdrücke können, wie im Folgenden dargestellt, als eine durch Trennzeichen getrennte Liste im Wertfeld angegeben werden:Multiple thumbprints can be specified as a comma-separated list in the value field, as shown below:

    {
    "fabricSettings": [
               ...
               {
                 "name": "ApplicationGateway/Http",
                 "parameters": [
                     ...
                   {
                     "name": "ServiceCertificateThumbprints",
                     "value": "78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 bf,78 12 20 5a 39 d2 23 76 da a0 37 f0 5a ed e3 60 1a 7e 64 b9"
                   }
                 ]
               }
             ],
             ...
    }
    

    Wenn der Fingerabdruck des Serverzertifikats in diesem Konfigurationseintrag aufgeführt ist, stellt der Reverseproxy die SSL-Verbindung her.If the thumbprint of the server certificate is listed in this config entry, reverse proxy succeeds the SSL connection. Andernfalls beendet er die Verbindung und gibt für die Anforderung des Clients eine Fehlermeldung mit dem Statuscode 502 (Ungültiges Gateway) aus.Otherwise, it terminates the connection and fails the client's request with a 502 (Bad Gateway). Zudem enthält die HTTP-Statuszeile den Ausdruck „Invalid SSL Certificate“.The HTTP status line will also contain the phrase "Invalid SSL Certificate."

Logik der Endpunktauswahl, wenn Dienste sichere und nicht sichere Endpunkte bereitstellenEndpoint selection logic when services expose secure as well as unsecured endpoints

Service Fabric unterstützt die Konfiguration mehrerer Endpunkte für einen Dienst.Service fabric supports configuring multiple endpoints for a service. Weitere Informationen finden Sie unter Angeben von Ressourcen in einem Dienstmanifest.For more information, see Specify resources in a service manifest.

Der Reverseproxy wählt einen der Endpunkte zum Weiterleiten der Anforderung basierend auf dem Abfrageparameter ListenerName im Dienst-URI aus.Reverse proxy selects one of the endpoints to forward the request based on the ListenerName query parameter in the service URI. Wird der Parameter ListenerName nicht angegeben, kann der Reverseproxy einen beliebigen Endpunkt in der Liste der Endpunkte auswählen.If the ListenerName parameter is not specified, reverse proxy can pick any endpoint from the endpoints list. Abhängig von den für den Dienst konfigurierten Endpunkten kann der ausgewählte Endpunkt ein HTTP- oder ein HTTPS-Endpunkt sein.Depending on the endpoints configured for the service, the endpoint selected can be an HTTP or HTTPS endpoint. Unter Umständen gibt es Szenarien oder Anforderungen, bei denen der Reverseproxy im „ausschließlich sicheren Modus“ ausgeführt werden soll. Das bedeutet, dass der sichere Reverseproxy keine Anforderungen an nicht sichere Endpunkte weiterleiten soll.There might be scenarios or requirements where you want the reverse proxy to operate in a "secure-only mode"; that is, you don't want the secure reverse proxy to forward requests to unsecured endpoints. Um für den Reverseproxy den ausschließlich sicheren Modus festzulegen, geben Sie den Konfigurationseintrag SecureOnlyMode im Abschnitt ApplicationGateway/Http mit dem Wert true an.To set reverse proxy to secure-only mode, specify the SecureOnlyMode configuration entry with value true in the ApplicationGateway/Http section.

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
                ...
              {
                "name": "SecureOnlyMode",
                "value": true
              }
            ]
          }
        ],
        ...
}

Hinweis

Wenn im SecureOnlyMode der Client ein ListenerName-Element angegeben hat, das einem HTTP-Endpunkt (ungesichert) entspricht, gibt der Reverseproxy für die Anforderung eine Fehlermeldung mit dem HTTP-Statuscode 404 (Nicht gefunden) aus.When operating in SecureOnlyMode, if a client has specified a ListenerName corresponding to an HTTP(unsecured) endpoint, reverse proxy fails the request with a 404 (Not Found) HTTP status code.

Einrichten der Clientzertifikatauthentifizierung über den ReverseproxySetting up client certificate authentication through the reverse proxy

Die SSL-Terminierung erfolgt auf dem Reverseproxy, und alle Daten des Clientzertifikats gehen verloren.SSL termination happens at the reverse proxy and all the client certificate data is lost. Damit die Dienste die Clientzertifikatauthentifizierung durchführen, legen Sie die Einstellung ForwardClientCertificate im Abschnitt ApplicationGateway/Http fest.For the services to perform client certificate authentication, specify the ForwardClientCertificate setting in the ApplicationGateway/Http section.

  1. Wenn ForwardClientCertificate auf false festgelegt ist, fordert der Reverseproxy das Clientzertifikat während des SSL-Handshakes mit dem Client nicht an.When ForwardClientCertificate is set to false, reverse proxy will not request the client certificate during its SSL handshake with the client. Dies ist das Standardverhalten.This is the default behavior.

  2. Wenn ForwardClientCertificate auf true festgelegt ist, fordert der Reverseproxy das Clientzertifikat während des SSL-Handshakes mit dem Client an.When ForwardClientCertificate is set to true, reverse proxy requests the client's certificate during its SSL handshake with the client. Dann leitet er die Daten des Clientzertifikats in einem benutzerdefinierten HTTP-Header mit dem Namen X-Client-Certificate weiter.It will then forward the client certificate data in a custom HTTP header named X-Client-Certificate. Der Headerwert ist die Base64-codierte Zeichenfolge im PEM-Format des Clientzertifikats.The header value is the base64 encoded PEM format string of the client's certificate. Der Dienst kann die Anforderung nach dem Überprüfen der Zertifikatdaten mit dem entsprechenden Statuscode annehmen oder ablehnen.The service can succeed/fail the request with appropriate status code after inspecting the certificate data. Wenn der Client kein Zertifikat bereitstellt, leitet der Reverseproxy einen leeren Header weiter. Die weitere Verarbeitung erfolgt durch den Dienst.If the client does not present a certificate, reverse proxy forwards an empty header and let the service handle the case.

Hinweis

Der Reverseproxy führt lediglich die Weiterleitung durch.Reverse proxy is a mere forwarder. Er führt keine Überprüfung des Clientzertifikats durch.It will not perform any validation of the client's certificate.

Nächste SchritteNext steps