SSL Per impostazione predefinita

Nel tentativo di migliorare continuamente la sicurezza dei AEM, Adobe ha introdotto una funzione chiamata SSL By Default. Lo scopo è incoraggiare l'uso di HTTPS per connettersi alle istanze AEM.

Abilitazione di SSL per impostazione predefinita

Per iniziare a configurare SSL per impostazione predefinita, fai clic sul messaggio Inbox corrispondente nella schermata iniziale AEM. Per raggiungere la casella in entrata, premere l'icona a forma di campana nell'angolo superiore destro dello schermo. Quindi fare clic su Visualizza tutto. Verrà visualizzato un elenco di tutti gli avvisi ordinati in una vista a elenco.

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

chlimage_1-341

[NOTA!]

Se l'avviso Configura HTTPS non è presente nella casella in entrata, è possibile accedere direttamente alla procedura guidata HTTPS andando a http://serveraddress:serverport/libs/granite/security/content/sslConfig.html?item=configuration%2Fconfiguressl&_charset_=utf-8

Per questa funzione è stato creato un utente di servizio denominato ssl-service. Una volta aperto l’avviso, verrà visualizzata la seguente procedura guidata di configurazione:

  1. Innanzitutto, impostare le credenziali store. Queste sono le credenziali per l'archivio chiavi dell'utente di sistema ssl-service che conterrà la chiave privata e l'archivio delle credenziali per il listener HTTPS.

    chlimage_1-342

  2. Una volta immesse le credenziali, fate clic su Next nell'angolo superiore destro della pagina. Quindi, caricate la chiave privata e il certificato associati per la connessione SSL.

    chlimage_1-343

    NOTA

    Per informazioni su come generare una chiave privata e un certificato da utilizzare con la procedura guidata, vedere questa procedura di seguito.

  3. Infine, specificate il nome host HTTPS e la porta TCP per il listener HTTPS.

    screen_shot_2018-07-25at31658pm

Automatizzazione SSL per impostazione predefinita

Sono disponibili tre modi per automatizzare SSL per impostazione predefinita.

Tramite POST HTTP

Il primo metodo prevede l'invio al server SSLSetup utilizzato dalla procedura guidata di configurazione:

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

Puoi utilizzare il payload seguente nel tuo POST per automatizzare la configurazione:

------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 Sling, risponderà con 200 OK o con un codice di stato HTTP di errore. Potete trovare i dettagli sullo stato nel corpo HTML della risposta.

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

ESEMPIO DI SUCCESSO(status = 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.
Please take note of the key store password you provided. You will 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>

Via pacchetto

In alternativa, potete automatizzare la configurazione SSL caricando un pacchetto che contiene già i seguenti elementi richiesti:

  • Keystore dell'utente ssl-service. Questo si trova in /home/users/system/security/ssl-service/keystore nella directory archivio.
  • La configurazione GraniteSslConnectorFactory

Generazione di una coppia chiave/certificato privata da utilizzare con la procedura guidata

Di seguito è riportato un esempio per la creazione di un certificato autofirmato in formato DER utilizzabile dalla procedura guidata SSL.

NOTA

L'uso di un certificato autofirmato è ad esempio solo a scopo e non deve essere utilizzato in produzione.

  1. Innanzitutto, create la chiave privata:

    openssl genrsa -aes256 -out localhostprivate.key 4096
    openssl rsa -in localhostprivate.key -out localhostprivate.key
    
  2. Quindi, generate una richiesta di firma dei certificati (CSR) utilizzando la chiave privata:

    openssl req -sha256 -new -key localhostprivate.key -out localhost.csr -subj '/CN=localhost'
    
  3. Generate il certificato SSL e firmatelo con la chiave privata. In questo esempio, scadrà tra un anno:

    openssl x509 -req -days 365 -in localhost.csr -signkey localhostprivate.key -out localhost.crt
    

Converti la chiave privata in formato DER. Questo perché la procedura guidata SSL richiede che la chiave sia in formato DER:

openssl pkcs8 -topk8 -inform PEM -outform DER -in localhostprivate.key -out localhostprivate.der -nocrypt

Infine, caricate localhostprivate.der come Chiave privata e localhost.crt come Certificato SSL al punto 2 della procedura guidata SSL grafica descritta all'inizio di questa pagina.

Aggiornamento della configurazione SSL tramite cURL

NOTA

Per un elenco centralizzato di utili comandi cURL in AEM, vedere Utilizzo di cURL con AEM.

Potete anche automatizzare la configurazione SSL usando lo strumento cURL. A questo scopo, potete inserire i parametri di configurazione nel seguente URL:

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

Di seguito sono riportati i parametri che potete usare per modificare le varie impostazioni della procedura guidata di configurazione:

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

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

  • -F "truststorePassword=password" - la password del trust store;

  • -F "truststorePasswordConfirm=password" - confermare la password dell’archivio attendibili;

  • -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.

NOTA

Il modo più veloce per eseguire cURL per automatizzare la configurazione SSL è dalla cartella in cui si trovano i file DER e CRT. In alternativa, è possibile specificare il percorso completo negli argomenti privatekeyFile e certificateFile.

È inoltre necessario essere autenticati per eseguire l'aggiornamento, quindi assicurarsi di aggiungere il comando cURL con il parametro -u user:passeword.

Il comando cURL post 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

Potete inviare il servlet a una catena di certificati ripetendo il parametro certificateFile come segue:

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

Dopo aver eseguito il comando, verificate che tutti i certificati siano stati inviati all'archivio chiavi. Controllare l'archivio di chiavi da:
http://localhost:4502/libs/granite/security/content/userEditor.html/home/users/system/security/ssl-service

In questa pagina