Generieren eines selbstsignierten Azure Application Gateway-Zertifikats mit einer benutzerdefinierten Stammzertifizierungsstelle

Die Anwendungsgateway-SKU v2 führt die Verwendung vertrauenswürdiger Stammzertifikate ein, um TLS-Verbindungen mit den Back-End-Servern zuzulassen. Diese Bereitstellung entfernt die Verwendung von Authentifizierungszertifikaten (einzelne Leaf-Zertifikate), die in der v1-SKU erforderlich waren. Das Stammzertifikat ist ein Base64-kodiertes Stammzertifikat im X.509-Format (.CER) vom Back-End-Zertifikatserver. Es kennzeichnet die Stammzertifizierungsstelle, die das Serverzertifikat ausgestellt hat. Das Serverzertifikat wird dann für die TLS/SSL-Kommunikation verwendet.

Application Gateway vertraut standardmäßig dem Zertifikat Ihrer Website, wenn es von einer bekannten Zertifizierungsstelle (etwa GoDaddy oder DigiCert) signiert ist. In diesem Fall müssen Sie das Stammzertifikat nicht explizit hochladen. Weitere Informationen finden Sie unter Übersicht über TLS-Beendigung und End-to-End-TLS mit Application Gateway. Wenn Sie jedoch über eine Entwicklungs-/Testumgebung verfügen und kein überprüftes Zertifizierungsstellenzertifikat erwerben möchten, können Sie ihre eigene benutzerdefinierte Stammzertifizierungsstelle und ein blattbasiertes Zertifikat erstellen, das von dieser Stammzertifizierungsstelle signiert ist.

Hinweis

Selbst generierte Zertifikate sind standardmäßig nicht vertrauenswürdig und können schwer Standard tain sein. Außerdem kann es sein, dass für sie veraltete Hash- und Verschlüsselungssammlungen verwendet werden, die möglicherweise nicht stark sind. Um eine bessere Sicherheit zu erreichen, sollten Sie ein Zertifikat kaufen, das von einer bekannten Zertifizierungsstelle signiert ist.

Sie können die folgenden Optionen verwenden, um Ihr privates Zertifikat für Back-End-TLS-Verbindungen zu generieren.

  1. Verwenden Sie das Tool zum Erstellen eines privaten Zertifikats mit nur einem Klick. Mithilfe des von Ihnen bereitgestellten Do Standard namens (allgemeiner Name) führt dieses Tool die gleichen Schritte wie in diesem Artikel dokumentiert aus, um Stamm- und Serverzertifikate zu generieren. Mit den generierten Zertifikatdateien können Sie das Stammzertifikat sofort hochladen (. CER)-Datei in der Back-End-Einstellung Ihres Gateways und der entsprechenden Zertifikatkette (). PFX) zum Back-End-Server. Das Kennwort für die PFX-Datei wird auch in der heruntergeladenen ZIP-Datei angegeben.

  2. Verwenden Sie OpenSSL-Befehle, um Zertifikate entsprechend Ihren Anforderungen anzupassen und zu generieren. Folgen Sie den Anweisungen in diesem Artikel weiterhin, wenn Sie dies ganz alleine tun möchten.

In diesem Artikel wird Folgendes behandelt:

  • Erstellen einer eigenen benutzerdefinierten Zertifizierungsstelle
  • Erstellen eines selbstsignierten Zertifikats, das von Ihrer benutzerdefinierten Zertifizierungsstelle signiert wird
  • Hochladen eines selbstsignierten Stammzertifikats auf ein Application Gateway, um den Back-End-Server zu authentifizieren

Voraussetzungen

  • OpenSSL auf einem Computer mit Windows oder Linux

    Zwar gibt es möglicherweise andere Tools für die Zertifikatverwaltung, in diesem Tutorial wird aber OpenSSL verwendet. OpenSSL gehört zu vielen Linux-Distributionen, so z. B. Ubuntu.

  • Ein Webserver

    Beispielsweise Apache, IIS oder NGINX, um die Zertifikate zu testen.

  • Eine Application Gateway v2-SKU

    Wenn Sie noch nicht über ein Anwendungsgateway verfügen, finden Sie unter Schnellstart: Weiterleiten von Webdatenverkehr per Azure Application Gateway – Azure-Portal weitere Informationen.

Erstellen eines Stammzertifikats der Zertifizierungsstelle

Erstellen Sie Ihr Stammzertifikat der Zertifizierungsstelle mit OpenSSL.

Erstellen des Stammschlüssels

  1. Melden Sie sich bei dem Computer an, auf dem OpenSSL installiert ist, und führen Sie den folgenden Befehl aus. Dadurch wird ein verschlüsselter Schlüssel erstellt.

    openssl ecparam -out contoso.key -name prime256v1 -genkey
    

Erstellen eines Stammzertifikats und Selbstsignieren dieses Zertifikats

  1. Verwenden Sie den folgenden Befehl, um die Zertifikatsignieranforderung (Certificate Signing Request, CSR) zu generieren.

    openssl req -new -sha256 -key contoso.key -out contoso.csr
    
  2. Wenn Sie dazu aufgefordert werden, geben Sie das Kennwort für den Stammschlüssel und die Organisationsinformationen für die benutzerdefinierte Zertifizierungsstelle, z. B. Land, Bundesland/Region, Organisation, Organisationseinheit, und den vollqualifizierten Domänennamen (dies ist die Domäne des Zertifikatausstellers) ein.

    create root certificate

  3. Verwenden Sie den folgenden Befehl, um das Stammzertifikat zu generieren.

    openssl x509 -req -sha256 -days 365 -in contoso.csr -signkey contoso.key -out contoso.crt
    

    Mit den vorherigen Befehlen wird das Stammzertifikat erstellt. Sie verwenden dieses Zertifikat, um Ihr Serverzertifikat zu signieren.

Erstellen eines Serverzertifikats

Im nächsten Schritt erstellen Sie mit OpenSSL ein Serverzertifikat.

Erstellen des Zertifikatschlüssels

Verwenden Sie den folgenden Befehl, um den Schlüssel für das Serverzertifikat zu generieren.

openssl ecparam -out fabrikam.key -name prime256v1 -genkey

Erstellen der Zertifikatsignieranforderung

Die Zertifikatsignieranforderung ist ein öffentlicher Schlüssel, der einer Zertifizierungsstelle erteilt wird, wenn ein Zertifikat angefordert wird. Die Zertifizierungsstelle gibt das Zertifikat für diese spezielle Anforderung aus.

Hinweis

Der allgemeine Name (Common Name, CN) für das Serverzertifikat muss sich von der Domäne des Zertifikatausstellers unterscheiden. In diesem Fall lautet der CN für den Aussteller z. B. www.contoso.com, und der CN des Serverzertifikats ist www.fabrikam.com.

  1. Verwenden Sie den folgenden Befehl, um die Zertifikatsignieranforderung zu generieren:

    openssl req -new -sha256 -key fabrikam.key -out fabrikam.csr
    
  2. Wenn Sie dazu aufgefordert werden, geben Sie das Kennwort für den Stammschlüssel und die Organisationsinformationen für die benutzerdefinierte Zertifizierungsstelle ein: Land/Region, Bundesland, Organisation, Organisationseinheit sowie den vollqualifizierten Domänennamen. Dies ist die Domäne der Website, und diese Domäne muss sich vom Aussteller unterscheiden.

    Server certificate

Generieren des Zertifikats mit der Zertifikatsignieranforderung und dem Schlüssel sowie Signieren des Zertifikats mit dem Stammschlüssel der Zertifizierungsstelle

  1. Verwenden Sie den folgenden Befehl, um das Zertifikat zu erstellen:

    openssl x509 -req -in fabrikam.csr -CA  contoso.crt -CAkey contoso.key -CAcreateserial -out fabrikam.crt -days 365 -sha256
    

Überprüfen des neu erstellten Zertifikats

  1. Verwenden Sie den folgenden Befehl, um die Ausgabe der CRT-Datei zu drucken und deren Inhalt zu überprüfen:

    openssl x509 -in fabrikam.crt -text -noout
    

    Certificate verification

  2. Überprüfen Sie die Dateien in Ihrem Verzeichnis, und vergewissern Sie sich, dass Sie folgende Dateien haben:

    • contoso.crt
    • contoso.key
    • fabrikam.crt
    • fabrikam.key

Konfigurieren des Zertifikats in den TLS-Einstellungen Ihres Webservers

Konfigurieren Sie TLS in Ihrem Webserver mit den Dateien „fabrikam.crt“ und „fabrikam.key“. Wenn Ihr Webserver nicht in der Lage ist, zwei Dateien zu akzeptieren, können Sie diese mit OpenSSL-Befehlen zu einer einzigen PEM- oder PFX-Datei kombinieren.

IIS

Anweisungen zum Importieren eines Zertifikats und Hochladen als Serverzertifikat in IIS finden Sie unter Installieren importierter Zertifikate auf einem Webserver in Windows Server 2003.

Anweisungen zur TLS-Bindung finden Sie unter Einrichtung von SSL auf IIS 7.

Apache

Die folgende Konfiguration ist ein Beispiel für einen für SSL konfigurierten virtuellen Host in Apache:

<VirtualHost www.fabrikam:443>
      DocumentRoot /var/www/fabrikam
      ServerName www.fabrikam.com
      SSLEngine on
      SSLCertificateFile /home/user/fabrikam.crt
      SSLCertificateKeyFile /home/user/fabrikam.key
</VirtualHost>

NGINX

Die folgende Konfiguration ist ein Beispiel für einen NGINX-Serverblock mit TLS-Konfiguration:

NGINX with TLS

Zugreifen auf den Server, um die Konfiguration zu überprüfen

  1. Fügen Sie das Stammzertifikat dem vertrauenswürdigen Stammspeicher Ihres Computers hinzu. Wenn Sie auf die Website zugreifen, vergewissern Sie sich, dass im Browser die gesamte Zertifikatkette angezeigt wird.

    Trusted root certificates

    Hinweis

    Es wird vorausgesetzt, dass DNS so konfiguriert ist, dass der Webservername (in diesem Beispiel www.fabrikam.com) auf die IP-Adresse Ihres Webservers verweist. Ist dies nicht der Fall, können Sie die hosts-Datei bearbeiten, um den Namen aufzulösen.

  2. Navigieren Sie zu Ihrer Website, und klicken Sie im Adressfeld Ihres Browsers auf das Schlosssymbol, um die Website- und Zertifikatinformationen zu überprüfen.

Überprüfen der Konfiguration mit OpenSSL

Alternativ können Sie OpenSSL verwenden, um das Zertifikat zu überprüfen.

openssl s_client -connect localhost:443 -servername www.fabrikam.com -showcerts

OpenSSL certificate verification

Hochladen des Stammzertifikats in die HTTP-Einstellungen von Application Gateway

Um das Zertifikat nach Application Gateway hochzuladen, müssen Sie das CRT-Zertifikat in ein Base64-codiertes CER-Format exportieren. Da die CRT-Datei den öffentlichen Schlüssel bereits im Base64-codierten Format enthält, ändern Sie einfach die Dateierweiterung von „.crt“ in „.cer“.

Azure-Portal

Um das vertrauenswürdige Stammzertifikat aus dem Portal hochzuladen, wählen Sie die Back-End-Einstellungen und dann im Back-End-Protokoll die Option HTTPS aus.

Screenshot of adding a certificate using the portal.

Azure PowerShell

Alternativ können Sie die Azure-Befehlszeilenschnittstelle oder Azure PowerShell verwenden, um das Stammzertifikat hochzuladen. Der folgende Code ist ein Azure PowerShell Beispiel.

Hinweis

Im folgenden Beispiel wird dem Anwendungsgateway ein vertrauenswürdiges Stammzertifikat hinzugefügt, wird eine neue HTTP-Einstellung erstellt und wird eine neue Regel hinzugefügt, wobei vorausgesetzt wird, dass der Back-End-Pool und der Listener bereits vorhanden sind.

## Add the trusted root certificate to the Application Gateway

$gw=Get-AzApplicationGateway -Name appgwv2 -ResourceGroupName rgOne

Add-AzApplicationGatewayTrustedRootCertificate `
   -ApplicationGateway $gw `
   -Name CustomCARoot `
   -CertificateFile "C:\Users\surmb\Downloads\contoso.cer"

$trustedroot = Get-AzApplicationGatewayTrustedRootCertificate `
   -Name CustomCARoot `
   -ApplicationGateway $gw

## Get the listener, backend pool and probe

$listener = Get-AzApplicationGatewayHttpListener `
   -Name basichttps `
   -ApplicationGateway $gw

$bepool = Get-AzApplicationGatewayBackendAddressPool `
  -Name testbackendpool `
  -ApplicationGateway $gw

Add-AzApplicationGatewayProbeConfig `
  -ApplicationGateway $gw `
  -Name testprobe `
  -Protocol Https `
  -HostName "www.fabrikam.com" `
  -Path "/" `
  -Interval 15 `
  -Timeout 20 `
  -UnhealthyThreshold 3

$probe = Get-AzApplicationGatewayProbeConfig `
  -Name testprobe `
  -ApplicationGateway $gw

## Add the configuration to the HTTP Setting and don't forget to set the "hostname" field
## to the domain name of the server certificate as this will be set as the SNI header and
## will be used to verify the backend server's certificate. Note that TLS handshake will
## fail otherwise and might lead to backend servers being deemed as Unhealthy by the probes

Add-AzApplicationGatewayBackendHttpSettings `
  -ApplicationGateway $gw `
  -Name testbackend `
  -Port 443 `
  -Protocol Https `
  -Probe $probe `
  -TrustedRootCertificate $trustedroot `
  -CookieBasedAffinity Disabled `
  -RequestTimeout 20 `
  -HostName www.fabrikam.com

## Get the configuration and update the Application Gateway

$backendhttp = Get-AzApplicationGatewayBackendHttpSettings `
  -Name testbackend `
  -ApplicationGateway $gw

Add-AzApplicationGatewayRequestRoutingRule `
  -ApplicationGateway $gw `
  -Name testrule `
  -RuleType Basic `
  -BackendHttpSettings $backendhttp `
  -HttpListener $listener `
  -BackendAddressPool $bepool

Set-AzApplicationGateway -ApplicationGateway $gw

Überprüfen der Back-End-Integrität eines Anwendungsgateways

  1. Klicken Sie auf die Back-End-Integrität-Ansicht Ihres Anwendungsgateways, um zu prüfen, ob der Test fehlerfrei ist.
  2. Sie sollten sehen, dass für den HTTPS-Test der Status Fehlerfrei angezeigt wird.

HTTPS probe

Nächste Schritte

Weitere Informationen zu SSL/TLS in Application Gateway finden Sie unter Übersicht über TLS-Beendigung und End-to-End-TLS mit Application Gateway.