DocumentatieAEMTutorials voor AEMTutorials voor AEM Foundation

Mutual Transport Layer Security (mTLS)-verificatie van AEM

Last update: Mon May 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • Van toepassing op:
  • Experience Manager 6.5
  • Experience Manager as a Cloud Service
  • Onderwerpen:

Gemaakt voor:

  • Ervaren
  • Beheerder
  • Ontwikkelaar

Leer hoe te om vraag HTTPS van AEM aan Web APIs te maken die de Wederzijdse authentificatie van de Veiligheid van de Laag van het Vervoer (mTLS) vereisen.

video poster

https://video.tv.adobe.com/v/3447865?quality=12&learn=on&captions=dut

De mTLS of bidirectionele authentificatie van TLS verbetert de veiligheid van het protocol TLS door zowel de cliënt als de server te vereisen om elkaar voor authentiek te verklaren. Voor deze verificatie worden digitale certificaten gebruikt. Het wordt algemeen gebruikt in scenario's waar de sterke veiligheid en identiteitscontrole kritiek zijn.

Wanneer u probeert een HTTPS-verbinding te maken met een web-API waarvoor mTLS-verificatie is vereist, mislukt de verbinding standaard met de fout:

javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_required

Dit probleem doet zich voor wanneer de client geen certificaat voor verificatie presenteert.

Leer hoe te met succes APIs roepen die mTLS authentificatie door Apache HttpClienten AEM KeyStore en TrustStore vereisen te gebruiken.

HttpClient en laad AEM KeyStore-materiaal

Op hoog niveau zijn de volgende stappen vereist om een met mTLS beveiligde API vanuit AEM aan te roepen.

AEM-certificaatgeneratie

Vraag het AEM-certificaat aan door samen te werken met het beveiligingsteam van uw organisatie. Het beveiligingsteam geeft of vraagt de certificaatgerelateerde details, zoals sleutel, CSR (Certificate signing Request) en het gebruik van CSR, als het certificaat is uitgegeven.

Voor demo-doeleinden genereert u de certificaatgerelateerde details, zoals sleutel, CSR (Certificate Signing Request). In het onderstaande voorbeeld wordt een zelfondertekende CA gebruikt om het certificaat uit te geven.

  • Eerst genereert u het certificaat van de interne certificeringsinstantie (CA).

    # Create an internal Certification Authority (CA) certificate
    openssl req -new -x509 -days 9999 -keyout internal-ca-key.pem -out internal-ca-cert.pem
    
  • Genereer het AEM-certificaat.

    # Generate Key
    openssl genrsa -out client-key.pem
    
    # Generate CSR
    openssl req -new -key client-key.pem -out client-csr.pem
    
    # Generate certificate and sign with internal Certification Authority (CA)
    openssl x509 -req -days 9999 -in client-csr.pem -CA internal-ca-cert.pem -CAkey internal-ca-key.pem -CAcreateserial -out client-cert.pem
    
    # Verify certificate
    openssl verify -CAfile internal-ca-cert.pem client-cert.pem
    
  • Converteer AEM Private Key naar DER-indeling. AEM KeyStore vereist de persoonlijke sleutel in DER-indeling.

    openssl pkcs8 -topk8 -inform PEM -outform DER -in client-key.pem -out client-key.der -nocrypt
    
TIP
De zelfondertekende CA-certificaten worden alleen gebruikt voor ontwikkelingsdoeleinden. Voor productie, gebruik een vertrouwde op Instantie van het Certificaat (CA) om het certificaat uit te geven.

Certificaatuitwisseling

Als u een zelfondertekende CA voor het AEM-certificaat gebruikt, zoals hierboven, verzendt u het certificaat of het certificaat van de interne certificeringsinstantie (CA) naar de API-provider.

Als de API-provider een zelfondertekend CA-certificaat gebruikt, ontvangt u het certificaat of het certificaat van de interne certificeringsinstantie (CA) van de API-provider.

Certificaat importeren

Voer de volgende stappen uit om een AEM-certificaat te importeren:

  1. Login aan de Auteur van AEM als beheerder.

  2. Navigeer aan Auteur van AEM > Hulpmiddelen > Veiligheid > Gebruikers > creëren of selecteren een bestaande gebruiker.

    creeer of selecteer een bestaande gebruiker

    Voor demo-doeleinden wordt een nieuwe gebruiker met de naam mtl-demo-user gemaakt.

  3. Om de Eigenschappen van de Gebruiker te openen, klik de gebruikersnaam.

  4. Klik Keystore lusje en klik dan creëren Keystore knoop. Dan in de Vastgestelde dialoog van het Wachtwoord van de Toegang KeyStore, plaats een wachtwoord voor keystore van deze gebruiker en klik sparen.

    creeer Keystore

  5. In het nieuwe scherm, onder VOEG PRIVATE SLEUTEL VAN DER DOSSIER sectie TOE, volg de hieronder stappen:

    1. Alias invoeren

    2. Importeer de bovenstaande AEM Private Key in de indeling DER.

    3. Importeer de bovenstaande certificaatkettingbestanden.

    4. Klik op Verzenden

      de Privé Sleutel van AEM van de Invoer

  6. Controleer of het certificaat is geïmporteerd.

    Geïmporteerde de Privé Sleutel en Certificaat van AEM

Als de API leverancier een zelfondertekend certificaat van CA gebruikt, voer het ontvangen certificaat in AEM TrustStore in, volg de stappen van hier.

En als AEM een zelfondertekend CA-certificaat gebruikt, vraagt u de API-provider om dit te importeren.

Prototypische mTLS API-aanroepcode met gebruik van HttpClient

Java™-code bijwerken zoals hieronder. Als u @Reference -annotatie wilt gebruiken om AEM KeyStoreService -service te krijgen, moet de aanroepende code een OSGi-component/service zijn of een Sling Model (en wordt @OsgiService daar gebruikt).

...

// Get AEM's KeyStoreService reference
@Reference
private com.adobe.granite.keystore.KeyStoreService keyStoreService;

...

// Get AEM KeyStore using KeyStoreService
KeyStore aemKeyStore = getAEMKeyStore(keyStoreService, resourceResolver);

if (aemKeyStore != null) {

    // Create SSL Context
    SSLContextBuilder sslbuilder = new SSLContextBuilder();

    // Load AEM KeyStore material into above SSL Context with keystore password
    // Ideally password should be encrypted and stored in OSGi config
    sslbuilder.loadKeyMaterial(aemKeyStore, "admin".toCharArray());

    // If API provider cert is self-signed, load AEM TrustStore material into above SSL Context
    // Get AEM TrustStore
    KeyStore aemTrustStore = getAEMTrustStore(keyStoreService, resourceResolver);
    sslbuilder.loadTrustMaterial(aemTrustStore, null);

    // Create SSL Connection Socket using above SSL Context
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
            sslbuilder.build(), NoopHostnameVerifier.INSTANCE);

    // Create HttpClientBuilder
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    httpClientBuilder.setSSLSocketFactory(sslsf);

    // Create HttpClient
    CloseableHttpClient httpClient = httpClientBuilder.build();

    // Invoke API
    closeableHttpResponse = httpClient.execute(new HttpGet(MTLS_API_ENDPOINT));

    // Code that reads response code and body from the 'closeableHttpResponse' object
    ...
}

/**
 * Returns the AEM KeyStore of a user. In this example we are using the
 * 'mtl-demo-user' user.
 *
 * @param keyStoreService
 * @param resourceResolver
 * @return AEM KeyStore
 */
private KeyStore getAEMKeyStore(KeyStoreService keyStoreService, ResourceResolver resourceResolver) {

    // get AEM KeyStore of 'mtl-demo-user' user, you can create a user or use an existing one.
    // Then create keystore and upload key, certificate files.
    KeyStore aemKeyStore = keyStoreService.getKeyStore(resourceResolver, "mtl-demo-user");

    return aemKeyStore;
}

/**
 *
 * Returns the global AEM TrustStore
 *
 * @param keyStoreService OOTB OSGi service that makes AEM based KeyStore
 *                         operations easy.
 * @param resourceResolver
 * @return
 */
private KeyStore getAEMTrustStore(KeyStoreService keyStoreService, ResourceResolver resourceResolver) {

    // get AEM TrustStore from the KeyStoreService and ResourceResolver
    KeyStore aemTrustStore = keyStoreService.getTrustStore(resourceResolver);

    return aemTrustStore;
}

...
  • Injecteer de OOTB com.adobe.granite.keystore.KeyStoreService OSGi-service in uw OSGi-component.
  • Haal de AEM KeyStore van de gebruiker op met KeyStoreService en ResourceResolver , de methode getAEMKeyStore(...) doet dat.
  • Als de API-provider een zelfondertekend CA-certificaat gebruikt, haalt u de algemene AEM TrustStore op, de methode getAEMTrustStore(...) doet dat.
  • Creeer een voorwerp van SSLContextBuilder, zie Java™ API details.
  • Laad de AEM KeyStore van de gebruiker in SSLContextBuilder gebruikend loadKeyMaterial(final KeyStore keystore,final char[] keyPassword) methode.
  • Het keystore wachtwoord is het wachtwoord dat toen het creëren van keystore werd geplaatst, zou het in OSGi config moeten worden opgeslagen, zie {de Waarden van de Configuratie 0} Geheime 🔗.

Wijzigingen in JVM-sleutelarchief vermijden

Een conventionele benadering om mTLS APIs met privé certificaten effectief aan te halen impliceert het wijzigen van JVM Keystore. Het wordt bereikt door de privé certificaten in te voeren gebruikend het Java™ keytoolbevel.

Nochtans, wordt deze methode niet gericht op veiligheid beste praktijken en AEM biedt een superieure optie door het gebruik van User-specific KeyStores en Global TrustStore en KeyStoreServiceaan.

Oplossingspakket

Het steekproefproject Node.js dat in de video wordt gedemoed kan van hierworden gedownload.

De servletcode van AEM is beschikbaar in de 0} tak van het Project van Plaatsen WKND {, zie.tutorial/web-api-invocation

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6