SSL/TLS per impostazione predefinita ssl-tls-by-default

Nel tentativo di migliorare continuamente la sicurezza dell'AEM, Adobe ha introdotto una funzione chiamata SSL Per impostazione predefinita. L’obiettivo è incoraggiare l’utilizzo del protocollo HTTPS per connettersi alle istanze dell’AEM.

Abilitazione di SSL/TLS per impostazione predefinita enabling-ssl-tls-by-default

Puoi iniziare a configurare SSL/TLS per impostazione predefinita facendo clic sul messaggio della casella in entrata corrispondente nella schermata iniziale dell’AEM. Per raggiungere la Casella in entrata, premi l’icona a forma di campana nell’angolo superiore destro dello schermo. Quindi fare clic su Visualizza tutto. Viene visualizzato un elenco di tutti gli avvisi ordinati in una vista a elenco.

Nell'elenco, selezionare e aprire l'avviso Configura HTTPS:

chlimage_1-103

NOTE
Se l'avviso Configura HTTPS non è presente nella cartella Posta in arrivo, è possibile passare direttamente alla procedura guidata HTTPS da http://serveraddress:serverport/libs/granite/security/content/sslConfig.html?item=configuration%2Fconfiguressl&_charset_=utf-8

Per questa funzionalità è stato creato un utente del servizio denominato ssl-service. Dopo aver aperto l’avviso, segui la procedura guidata di configurazione seguente:

  1. Impostare innanzitutto le credenziali dell'archivio. Queste sono le credenziali per l'archivio chiavi del servizio ssl del sistema dell'utente che conterrà la chiave privata e l'archivio fonti attendibili per il listener HTTPS.

    chlimage_1-104

  2. Dopo aver immesso le credenziali, fai clic su Avanti nell'angolo superiore destro della pagina. Quindi, carica la chiave privata e il certificato associati per la connessione SSL/TLS.

    chlimage_1-105

    note note
    NOTE
    Per informazioni su come generare una chiave privata e un certificato da utilizzare con la procedura guidata, vedi questa procedura di seguito.
  3. Infine, specifica il nome host HTTPS e la porta TCP per il listener HTTPS.

    schermata_shot_2018-07-25at31658pm

Automatizzazione di SSL/TLS per impostazione predefinita automating-ssl-tls-by-default

Esistono tre modi per automatizzare SSL/TLS per impostazione predefinita.

Tramite HTTP POST via-http-post

Il primo metodo prevede la pubblicazione nel server SSLSetup utilizzato dalla procedura guidata di configurazione:

POST /libs/granite/security/post/sslSetup.html

Per automatizzare la configurazione, puoi utilizzare il seguente payload nel POST:

------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="keystorePassword"

test
------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="keystorePasswordConfirm"
test
------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="truststorePassword"
test
------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="truststorePasswordConfirm"
test
------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="privatekeyFile"; filename="server.der"
Content-Type: application/x-x509-ca-cert

------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="certificateFile"; filename="server.crt"
Content-Type: application/x-x509-ca-cert

------WebKitFormBoundaryyBO4ArmGlcfdGDbs
Content-Disposition: form-data; name="httpsPort"
8443

Il servlet, come qualsiasi servlet POST di Sling, risponderà con 200 OK o un codice di stato HTTP di errore. Puoi trovare i dettagli sullo stato nel corpo HTML della risposta.

Di seguito sono riportati alcuni esempi sia di risposta corretta che di errore.

ESEMPIO DI SUCCESSO (stato = 200):

<!DOCTYPE html>
<html lang='en'>
<head>
<title>OK</title>
</head>
<body>
<h1>OK</h1>
<dl>
<dt class='foundation-form-response-status-code'>Status</dt>
<dd>200</dd>
<dt class='foundation-form-response-status-message'>Message</dt>
<dd>SSL successfully configured</dd>
<dt class='foundation-form-response-title'>Title</dt>
<dd>OK</dd>
<dt class='foundation-form-response-description'>Description</dt>
<dd>HTTPS has been configured on port 8443. The private key and
certificate were stored in the key store of the user ssl-service.
Take note of the key store password you provided. You need
it for any subsequent updating of the private key or certificate.</dd>
</dl>
<h2>Links</h2>
<ul class='foundation-form-response-links'>
<li><a class='foundation-form-response-redirect' href='/'>Done</a></li>
</ul>
</body>
</html>

ESEMPIO DI ERRORE (stato = 500):

<!DOCTYPE html>
<html lang='en'>
<head>
<title>Error</title>
</head>
<body>
<h1>Error</h1>
<dl>
<dt class='foundation-form-response-status-code'>Status</dt>
<dd>500</dd>
<dt class='foundation-form-response-status-message'>Message</dt>
<dd>The provided file is not a valid key, DER format expected</dd>
<dt class='foundation-form-response-title'>Title</dt>
<dd>Error</dd>
</dl>
</body>
</html>

Tramite pacchetto via-package

In alternativa, puoi automatizzare la configurazione SSL/TLS caricando un pacchetto che contiene già gli elementi richiesti:

  • Il keystore dell’utente ssl-service. Si trova in /home/users/system/security/ssl-service/keystore nell'archivio.
  • Configurazione di GraniteSslConnectorFactory

Generazione di una coppia chiave privata/certificato da utilizzare con la procedura guidata generating-a-private-key-certificate-pair-to-use-with-the-wizard

Di seguito è riportato un esempio per la creazione di un certificato autofirmato in formato DER che può essere utilizzato dalla procedura guidata SSL/TLS. Installa OpenSSL in base al sistema operativo, apri il prompt dei comandi OpenSSL e cambia la directory con la cartella in cui desideri generare la chiave privata o il certificato.

NOTE
L’utilizzo di un certificato autofirmato ha solo scopo esemplificativo. Non utilizzare in produzione.
  1. Innanzitutto, crea la chiave privata:

    code language-shell
    openssl genrsa -aes256 -out localhostprivate.key 4096
    openssl rsa -in localhostprivate.key -out localhostprivate.key
    
  2. Quindi, genera una richiesta di firma del certificato (CSR, Certificate Signing Request) utilizzando una chiave privata:

    code language-shell
    openssl req -sha256 -new -key localhostprivate.key -out localhost.csr -subj "/CN=localhost"
    
  3. Genera il certificato SSL/TLS e firmalo con la chiave privata. In questo esempio, scadrà tra un anno:

    code language-shell
    openssl x509 -req -days 365 -in localhost.csr -signkey localhostprivate.key -out localhost.crt
    
  4. Converti la chiave privata in formato DER. Questo perché la procedura guidata SSL richiede che la chiave sia in formato DER:

    code language-shell
    openssl pkcs8 -topk8 -inform PEM -outform DER -in localhostprivate.key -out localhostprivate.der -nocrypt
    
  5. Infine, carica localhostprivate.der come chiave privata e localhost.crt come certificato SSL/TLS nel passaggio 2 della procedura guidata SSL/TLS grafica descritta all'inizio di questa pagina.

Aggiornamento della configurazione SSL/TLS tramite cURL updating-the-ssl-tls-configuration-via-curl

NOTE
Per un elenco centralizzato di comandi cURL utili nell'AEM, vedere Utilizzo di cURL con AEM.

Puoi anche automatizzare la configurazione SSL/TLS utilizzando lo strumento cURL. Per eseguire questa operazione, invia i parametri di configurazione a questo URL:

https://<serveraddress>:<serverport>/libs/granite/security/post/sslSetup.html

Di seguito sono riportati i parametri che è possibile utilizzare per modificare le varie impostazioni nella procedura guidata di configurazione:

  • -F "keystorePassword=password" - password del keystore;

  • -F "keystorePasswordConfirm=password" - confermare la password del keystore;

  • -F "truststorePassword=password" - password del truststore;

  • -F "truststorePasswordConfirm=password" - confermare la password del truststore;

  • -F "privatekeyFile=@localhostprivate.der" - specificare la chiave privata;

  • -F "certificateFile=@localhost.crt" - specificare il certificato;

  • -F "httpsHostname=host.example.com"- specificare il nome host;

  • -F "httpsPort=8443": la porta su cui lavorerà il listener HTTPS.

NOTE
Il modo più veloce per eseguire cURL per automatizzare la configurazione SSL/TLS è quello di utilizzare la cartella in cui si trovano i file DER e CRT. In alternativa, è possibile specificare il percorso completo negli argomenti privatekeyFile e certificateFile.
Per eseguire l'aggiornamento, è inoltre necessario essere autenticati, quindi assicurarsi di aggiungere il comando cURL con il parametro -u user:passeword.
Un comando post cURL corretto dovrebbe essere simile al seguente:
curl -u user:password -F "keystorePassword=password" -F "keystorePasswordConfirm=password" -F "truststorePassword=password" -F "truststorePasswordConfirm=password" -F "privatekeyFile=@localhostprivate.der" -F "certificateFile=@localhost.crt" -F "httpsHostname=host.example.com" -F "httpsPort=8443" https://host:port/libs/granite/security/post/sslSetup.html

Più certificati utilizzando cURL multiple-certificates-using-curl

Puoi inviare al servlet una catena di certificati ripetendo il parametro certificateFile come segue:

-F "certificateFile=@root.crt" -F "certificateFile=@localhost.crt"..

Dopo aver eseguito il comando, verifica che tutti i certificati siano stati inseriti nel keystore. Controlla le voci Registro chiavi da:
http://localhost:4502/libs/granite/security/content/v2/usereditor.html/home/users/system/security/ssl-service

Abilitazione di una connessione TLS 1.3 enabling-tls-connection

  1. Passa alla console Web

  2. Quindi, passa a OSGi - Configurazione - Adobe Granite SSL Connector Factory

  3. Vai al campo Suite di crittografia incluse e aggiungi le seguenti voci. È possibile confermare ogni aggiunta premendo il pulsante "+" a sinistra del campo, dopo averle aggiunte:

    • TLS_AES_256_GCM_SHA384
    • TLS_AES_128_GCM_SHA256
    • TLS_CHACHA20_POLY1305_SHA256
    • TLS_AES_128_CCM_SHA256
    • TLS_AES_128_CCM_8_SHA256
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2