Benutzerdefinierter Domain-Name mit kundenseitig verwaltetem CDN

Erfahren Sie, wie Sie einen benutzerdefinierten Domain-Namen zu einer AEM as a Cloud Service-Website hinzufügen, die ein kundenseitig verwaltetes CDN verwendet.

In diesem Tutorial wird das Branding der Beispiel-Website von AEM WKND erweitert, indem ein HTTPS-adressierbarer benutzerdefinierter Domain-Name wkndviaawscdn.enablementadobe.com mit Transport Layer Security (TLS) unter Verwendung eines kundenseitig verwalteten CDN hinzugefügt wird. In diesem Tutorial wird AWS CloudFront als kundenseitig verwaltetes CDN verwendet. Jeder CDN-Anbieter sollte jedoch mit AEM as a Cloud Service kompatibel sein.

Die allgemeinen Schritte lauten wie folgt:

Benutzerdefinierter Domain-Name mit Kunden-CDN {width="800" modal="regular"}

Voraussetzungen

  • OpenSSL und dig sind auf Ihrem lokalen Computer installiert.

  • Es besteht Zugang zu Drittanbieterdiensten:

    • Zertifizierungsstelle (ZS) – zum Anfordern des signierten Zertifikats für Ihre Sitedomain, z. B. DigitCert
    • Kunden-CDN : Zum Einrichten des Kunden-CDN und Hinzufügen von SSL-Zertifikaten und Domain-Informationen wie AWS CloudFront, Azure CDN oder Akamai.
    • Hosting-Dienst für Domain Name System (DNS) – zum Hinzufügen von DNS-Einträgen für Ihre benutzerdefinierte Domain, z. B. Azure DNS oder AWS Route 53.
  • Zugriff auf Adobe Cloud Manager, um die CDN-Regel für die HTTP-Header-Validierung in der AEM as a Cloud Service-Umgebung bereitzustellen.

  • Die Beispiel-Site AEM WKND wurde in einer AEM as a Cloud Service-Umgebung vom Typ Produktionsprogramm bereitgestellt.

Wenn Sie keinen Zugang zu Drittanbieterdiensten haben, führen Sie diese Schritte zusammen mit Ihrem Sicherheits- oder Hostingteam aus.

Generieren eines SSL-Zertifikats

Es gibt zwei Optionen:

  1. Mit dem Befehlszeilen-Tool openssl können Sie einen privaten Schlüssel und einen Certificate Signing Request (CSR) für Ihre Sitedomain generieren. Um ein signiertes Zertifikat anzufordern, reichen Sie den CSR bei einer Zertifizierungsstelle (CA) ein.
  2. Ihr Hostingteam stellt den erforderlichen privaten Schlüssel und das signierte Zertifikat für Ihre Site bereit.

Sehen wir uns die Schritte für die erste Option an.

Um einen privaten Schlüssel und einen CSR zu generieren, führen Sie die folgenden Befehle aus und geben Sie die erforderlichen Informationen ein, wenn Sie dazu aufgefordert werden:

# Generate a private key and a CSR
$ openssl req -newkey rsa:2048 -keyout <YOUR-SITE-NAME>.key -out <YOUR-SITE-NAME>.csr -nodes

Um ein signiertes Zertifikat anzufordern, stellen Sie der ZS den generierten CSR bereit, indem Sie die zugehörige Dokumentation befolgen. Nachdem die ZS den CSR signiert hat, erhalten Sie die signierte Zertifikatsdatei.

Überprüfen des signierten Zertifikats

Sie sollten das signierte Zertifikat überprüfen, bevor Sie es zu Cloud Manager hinzufügen. Um sich die Details zum Zertifikat anzusehen, können Sie den folgenden Befehl verwenden:

# Review the certificate details
$ openssl crl2pkcs7 -nocrl -certfile <YOUR-SIGNED-CERT>.crt | openssl pkcs7 -print_certs -noout

Das signierte Zertifikat kann die Zertifikatskette enthalten, die die Stamm- und Zwischenzertifikate zusammen mit dem Anwenderzertifikat umfasst.

Adobe Cloud Manager akzeptiert das Anwenderzertifikat und die Zertifikatskette in separaten Formularfeldern, sodass Sie das Anwenderzertifikat und die Zertifikatskette aus dem signierten Zertifikat extrahieren müssen.

In diesem Tutorial wird das DigitCert-signierte Zertifikat, das für die Domain *.enablementadobe.com ausgestellt wurde, als Beispiel verwendet. Das Anwenderzertifikat und die Zertifikatskette werden extrahiert, indem das signierte Zertifikat in einem Texteditor geöffnet und der Inhalt zwischen den Markern -----BEGIN CERTIFICATE----- und -----END CERTIFICATE----- kopiert wird.

Einrichten eines kundenseitig verwalteten CDN

Richten Sie das Kunden-CDN (wie AWS CloudFront, Azure CDN oder Akamai) ein und fügen Sie das SSL-Zertifikat und die Domain-Informationen hinzu. In diesem Tutorial wird AWS CloudFront als Beispiel verwendet. Je nach CDN-Anbieter können die Schritte jedoch unterschiedlich sein. Die wichtigsten Schritte sind:

  • Fügen Sie das SSL-Zertifikat zum CDN hinzu.
  • Fügen Sie den benutzerdefinierten Domain-Namen zum CDN hinzu.
  • Konfigurieren Sie das CDN, um Inhalte wie Bilder, CSS- und JavaScript-Dateien zwischenzuspeichern.
  • Fügen Sie den HTTP-Header X-Forwarded-Host zu den CDN-Einstellungen hinzu, damit Ihr CDN diesen Header in allen Anforderungen einbezieht, die an den AEMCD-Ursprung gesendet werden.
  • Stellen Sie sicher, dass der Wert des Headers Host auf die Standard-Domain von AEM as a Cloud Service festgelegt ist, die die Programm- und Umgebungs-ID enthält und mit adobeaemcloud.com endet. Der Header-Wert des HTTP-Hosts, der vom Kunden-CDN an Adobe CDN übergeben wird, muss die Standard-Domain von AEM as a Cloud Service sein. Jeder andere Wert führt zu einem Fehlerzustand.

Konfigurieren der DNS-Einträge

Gehen Sie wie folgt vor, um den DNS-Eintrag für Ihre benutzerdefinierte Domain zu konfigurieren:

  1. Fügen Sie einen CNAME-Eintrag für die benutzerdefinierte Domain hinzu, der auf den CDN-Domain-Namen verweist.

In diesem Tutorial wird dem Azure DNS für die benutzerdefinierte Domain wkndviaawscdn.enablementadobe.com ein CNAME-Eintrag hinzugefügt, der auf den Verteilungs-Domain-Namen von AWS CloudFront verweist.

Verifizieren der Site

Überprüfen Sie den benutzerdefinierten Domain-Namen, indem Sie mithilfe des benutzerdefinierten Domain-Namens auf die Site zugreifen.
Je nach der vhhost-Konfiguration in der AEM as a Cloud Service-Umgebung funktioniert es möglicherweise nicht.

Ein wichtiger Sicherheitsschritt besteht darin, die CDN-Regel für die HTTP-Header-Validierung in der AEM as a Cloud Service-Umgebung bereitzustellen. Die Regel stellt sicher, dass die Anfrage vom Kunden-CDN stammt und nicht von einer anderen Quelle.

Aktueller Arbeitsstatus ohne CDN-Regel für die HTTP-Header-Validierung

Ohne die CDN-Regel für die HTTP-Header-Validierung wird der Wert des Headers Host auf die Standard-Domain von AEM as a Cloud Service festgelegt, die die Programm- und Umgebungs-ID enthält und mit adobeaemcloud.com endet. Adobe CDN wandelt den Wert des Headers Host nur dann in den vom Kunden-CDN erhaltenen Wert von X-Forwarded-Host um, wenn die CDN-Regel für die HTTP-Header-Validierung bereitgestellt wird. Andernfalls wird der Wert des Headers Host unverändert an die AEM as a Cloud Service-Umgebung übergeben und der Header X-Forwarded-Host nicht verwendet.

Beispiel-Servlet-Code zum Drucken des Host-Header-Werts

Der folgende Servlet-Code druckt die Werte der HTTP-Header Host, X-Forwarded-*, Referer und Via in der JSON-Antwort.

package com.adobe.aem.guides.wknd.core.servlets;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Servlet;
import javax.servlet.ServletException;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.ServletResolverConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component(service = Servlet.class, property = {
        ServletResolverConstants.SLING_SERVLET_PATHS + "=/bin/verify-headers",
        ServletResolverConstants.SLING_SERVLET_METHODS + "=" + HttpConstants.METHOD_GET
})
public class VerifyHeadersServlet extends SlingSafeMethodsServlet {

    @Reference
    private ResourceResolverFactory resourceResolverFactory;

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");

        // Create JSON response
        StringBuilder jsonResponse = new StringBuilder();
        jsonResponse.append("{");

        Enumeration<String> headerNames = request.getHeaderNames();
        boolean firstHeader = true;

        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();

            if (headerName.startsWith("X-Forwarded-") || headerName.startsWith("Host")
                    || headerName.startsWith("Referer") || headerName.startsWith("Via")) {
                if (!firstHeader) {
                    jsonResponse.append(",");
                }
                jsonResponse.append("\"").append(headerName).append("\": \"").append(request.getHeader(headerName))
                        .append("\"");
                firstHeader = false;
            }
        }

        jsonResponse.append("}");

        response.getWriter().write(jsonResponse.toString());
    }
}

Um das Servlet zu testen, aktualisieren Sie die Datei ../dispatcher/src/conf.dispatcher.d/filters/filters.any mit der folgenden Konfiguration. Stellen Sie außerdem sicher, dass das CDN so konfiguriert ist, dass der Pfad /bin/* NICHT zwischengespeichert wird.

# Testing purpose bin
/0300 { /type "allow" /extension "json" /path "/bin/*"}
/0301 { /type "allow" /path "/bin/*"}
/0302 { /type "allow" /url "/bin/*"}

Konfigurieren und Bereitstellen der CDN-Regel für die HTTP-Header-Validierung

Führen Sie die folgenden Schritte aus, um die CDN-Regel für die HTTP-Header-Validierung zu konfigurieren und bereitzustellen:

  • Fügen Sie die CDN-Regel für die HTTP-Header-Validierung der Datei cdn.yaml hinzu. Nachfolgend finden Sie ein Beispiel.

    code language-yaml
    kind: "CDN"
    version: "1"
    metadata:
    envTypes: ["prod"]
    data:
    authentication:
        authenticators:
        - name: edge-auth
            type: edge
            edgeKey1: ${{CDN_EDGEKEY_080124}}
            edgeKey2: ${{CDN_EDGEKEY_110124}}
        rules:
        - name: edge-auth-rule
            when: { reqProperty: tier, equals: "publish" }
            action:
            type: authenticate
            authenticator: edge-auth
    
  • Erstellen Sie mit der Cloud Manager-Benutzeroberfläche geheime Umgebungsvariablen (CDN_EDGEKEY_080124, CDN_EDGEKEY_110124).

  • Stellen Sie die CDN-Regel für die HTTP-Header-Validierung mithilfe der Cloud Manager-Pipeline in der AEM as a Cloud Service-Umgebung bereit.

Übergeben des Geheimnisses im HTTP-Header „X-AEM-Edge-Schlüssel“

Aktualisieren Sie das Kunden-CDN, um das Geheimnis im HTTP-Header X-AEM-Edge-Key zu übergeben. Das Geheimnis wird von Adobe CDN verwendet, um zu überprüfen, ob die Anfrage vom Kunden-CDN stammt, und den Wert des Headers Host in den Wert des vom Kunden-CDN empfangenen X-Forwarded-Host umzuwandeln.

Vollständiges Video

Sie können sich auch das End-to-End-Video ansehen, in dem die oben beschriebenen Schritte zum Hinzufügen eines benutzerdefinierten Domain-Namens mit einem kundenseitig verwalteten CDN zu einer von AEM as a Cloud Service gehosteten Website beschrieben werden.

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69