SSL/TLS por padrão

Em um esforço para melhorar continuamente a segurança do AEM, o Adobe introduziu um recurso chamado SSL por padrão. O objetivo é incentivar o uso de HTTPS para se conectar a instâncias AEM.

Habilitar SSL/TLS por padrão

Você pode começar a configurar SSL/TLS por padrão clicando na mensagem relevante da Caixa de entrada na tela inicial do AEM. Para acessar a Caixa de entrada, pressione o ícone de sino no canto superior direito da tela. Clique em Exibir todos. Isso exibirá uma lista de todos os alertas ordenados em uma exibição de lista.

Na lista, selecione e abra a variável Configurar HTTPS alerta:

chlimage_1-103

OBSERVAÇÃO

Se a variável Configurar HTTPS alerta não estiver presente na Caixa de entrada, você poderá navegar diretamente para o Assistente HTTPS acessando http://serveraddress:serverport/libs/granite/security/content/sslConfig.html?item=configuration%2Fconfiguressl&_charset_=utf-8

Um usuário de serviço chamado ssl-service foi criada para este recurso. Depois de abrir o alerta, você será guiado pelo seguinte assistente de configuração:

  1. Primeiro, configure as Credenciais de armazenamento. Estas são as credenciais para o ssl-service armazenamento de chaves do usuário do sistema que conterá a chave privada e o armazenamento de confiança para o ouvinte de HTTPS.

    chlimage_1-104

  2. Depois de inserir as credenciais, clique em Próxima no canto superior direito da página. Em seguida, faça upload da chave privada e do certificado associados para a conexão SSL/TLS.

    chlimage_1-105

    OBSERVAÇÃO

    Para obter informações sobre como gerar uma chave privada e um certificado para usar com o assistente, consulte este procedimento abaixo.

  3. Por fim, especifique o nome de host HTTPS e a porta TCP para o ouvinte HTTPS.

    screen_shot_2018-07-25at31658pm

Automatização de SSL/TLS por padrão

Há três maneiras de automatizar o SSL/TLS por padrão.

Via POST HTTP

O primeiro método envolve publicar no servidor SSLSetup que está sendo usado pelo assistente de configuração:

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

Você pode usar a seguinte carga no POST para automatizar a configuração:

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

O servlet, como qualquer servlet POST sling, responderá com 200 OK ou um código de status HTTP de erro. Você pode encontrar detalhes sobre o status no corpo do HTML da resposta.

Abaixo estão exemplos de uma resposta bem-sucedida e um erro.

EXEMPLO DE SUCESSO (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>

EXEMPLO DE ERRO (status = 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>

Através do pacote

Como alternativa, você pode automatizar a configuração de SSL/TLS carregando um pacote que já contém os seguintes itens necessários:

  • O keystore do usuário do serviço ssl. Está localizado em /home/users/system/security/ssl-service/keystore no repositório.
  • A variável GraniteSslConnectorFactory configuração

Geração de um par de chave privada/certificado para uso com o assistente

Abaixo você encontrará um exemplo para criar um certificado autoassinado no formato DER que o Assistente SSL/TLS pode usar. Instale o OpenSSL com base no sistema operacional, abra o prompt de comando do OpenSSL e altere o diretório para a pasta onde deseja gerar a Chave privada/Certificado.

OBSERVAÇÃO

O uso de um certificado autoassinado é apenas para fins de exemplo e não deve ser usado na produção.

  1. Primeiro, crie a chave privada:

    openssl genrsa -aes256 -out localhostprivate.key 4096
    openssl rsa -in localhostprivate.key -out localhostprivate.key
    
  2. Em seguida, gere uma Solicitação de assinatura de certificado (CSR) usando a chave privada:

    openssl req -sha256 -new -key localhostprivate.key -out localhost.csr -subj "/CN=localhost"
    
  3. Gere o certificado SSL/TLS e assine-o com a chave privada. Neste exemplo, expirará daqui a um ano:

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

Converta a chave privada para o formato DER. Isso ocorre porque o assistente SSL requer que a chave esteja no formato DER:

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

Por fim, carregue o localhostprivate.der como a Chave privada e localhost.crt como o Certificado SSL/TLS na etapa 2 do Assistente gráfico SSL/TLS descrito no início desta página.

Atualização da configuração SSL/TLS via cURL

OBSERVAÇÃO

Consulte Uso do cURL com AEM para obter uma lista centralizada de comandos cURL úteis no AEM.

Você também pode automatizar a configuração de SSL/TLS usando a ferramenta cURL. Você pode fazer isso publicando os parâmetros de configuração neste URL:

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

Abaixo estão os parâmetros que você pode usar para alterar as várias configurações no assistente de configuração:

  • -F "keystorePassword=password" - a senha do keystore;

  • -F "keystorePasswordConfirm=password" - confirme a senha do keystore;

  • -F "truststorePassword=password" - a senha do truststore;

  • -F "truststorePasswordConfirm=password" - confirme a senha do truststore;

  • -F "privatekeyFile=@localhostprivate.der" - especifique a chave privada;

  • -F "certificateFile=@localhost.crt" - especificar o certificado;

  • -F "httpsHostname=host.example.com"- especificar o nome do host;

  • -F "httpsPort=8443" - a porta em que o ouvinte HTTPS funcionará.

OBSERVAÇÃO

A maneira mais rápida de executar o cURL para automatizar a configuração SSL/TLS é a partir da pasta em que os arquivos DER e CRT estão. Como alternativa, você pode especificar o caminho completo na variável privatekeyFile e certificateFile.

Você também precisa ser autenticado para executar a atualização. Portanto, anexe o comando cURL à -u user:passeword parâmetro.

Um comando cURL post correto deve ter esta aparência:

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

Vários certificados usando cURL

Você pode enviar ao servlet uma cadeia de certificados repetindo o parâmetro certificateFile da seguinte maneira:

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

Depois de executar o comando, verifique se todos os certificados chegaram ao keystore. Verifique o armazenamento de chaves de:
http://localhost:4502/libs/granite/security/content/userEditor.html/home/users/system/security/ssl-service

Habilitação de uma conexão TLS 1.3

  1. Ir para o Console da Web

  2. Em seguida, navegue até OSGi - Configuração - Fábrica de conectores SSL do Adobe Granite

  3. Vá para a Conjuntos de cifras incluídos e adicione as seguintes entradas. Você pode confirmar cada adição pressionando o botão "+" à esquerda do campo, depois de adicionar cada um em:

    • 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

Nesta página