Show Menu
TÓPICOS×

SSL por padrão

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

Ativar SSL por padrão

Você pode começar a configurar SSL por padrão clicando na mensagem Caixa de entrada relevante em sua tela inicial do AEM. Para acessar a Caixa de entrada, pressione o ícone do sino no canto superior direito da tela. Em seguida, clique em Exibir tudo . Isso exibirá uma lista de todos os alertas solicitados em uma exibição de lista.
Na lista, selecione e abra o alerta Configurar HTTPS :
Um usuário de serviço chamado ssl-service foi criado para esse recurso. Após abrir o alerta, você será guiado pelo seguinte assistente de configuração:
  1. Primeiro, configure as Credenciais da Loja. Essas são as credenciais do armazenamento de chave do usuário do sistema ssl-service que conterão a chave privada e o armazenamento de confiança do ouvinte HTTPS.
  2. Depois de inserir as credenciais, clique em Avançar no canto superior direito da página. Em seguida, carregue a chave privada e o certificado associados para a conexão SSL.
    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 do host HTTPS e a porta TCP para o ouvinte HTTPS.

Automatizando SSL por padrão

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

Via HTTP POST

O primeiro método envolve a publicação 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 HTML da resposta.
Veja a seguir 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>

Via Pacote

Como alternativa, você pode automatizar a configuração SSL fazendo upload de um pacote que já contenha estes itens necessários:
  • O armazenamento de chaves do usuário do serviço ssl. Está localizado em /home/users/system/security/ssl-service/keystore no repositório.
  • A GraniteSslConnectorFactory configuração

Gerando um par de chave privada/certificado para usar com o assistente

Abaixo você encontrará um exemplo para a criação de um certificado autoassinado no formato DER que o Assistente SSL pode usar.
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 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 no formato DER. Isso ocorre porque o assistente SSL exige 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 na etapa 2 do Assistente gráfico SSL descrito no início desta página.

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

Consulte Usar cURL com AEM para obter uma lista centralizada de comandos cURL úteis no AEM.
Você também pode automatizar a configuração SSL usando a ferramenta cURL. Você pode fazer isso ao postar os parâmetros de configuração neste URL:
https://<nomedoservidor>:<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 armazenamento de chaves;
  • -F "truststorePassword=password" - a senha da Truststore;
  • -F "truststorePasswordConfirm=password" - confirmar a senha da Truststore;
  • -F " privatekeyFile=@localhostprivate.der " - especificar 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á.
A maneira mais rápida de executar cURL para automatizar a configuração SSL é a partir da pasta onde os arquivos DER e CRT estão. Como alternativa, você pode especificar o caminho completo nos argumentos privatekeyFile e certificateFile.
Você também precisa ser autenticado para executar a atualização, portanto, anexe o comando cURL ao -u user:passeword parâmetro.
Um comando cURL post correto deve ter a seguinte 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 desta forma:
Depois de executar o comando, verifique se todos os certificados foram feitos no keystore. Verifique o armazenamento de chaves de: http://localhost:4502/libs/granite/security/content/userEditor.html/home/users/system/security/ssl-service