SSL em aplicativo Spring Boot Standalone

De Wiki Integrator do Brasil
Ir para: navegação, pesquisa

Índice

Antes de Começar

Seu plano deve ter acesso ao painel Integrator Spring Boot Standalone. Caso não tenha, poderá requisitar a mudança de plano ao suporte ou na sua área de cliente.

Sobre exemplos de programação

A Integrator Host exemplifica sem o compromisso de analisar ou codificar aplicativos que o desenvolvedor queira hospedar. Este tutorial assume que o desenvolvedor compreende o que está sendo realizado e tem conhecimento adequado para adaptar seu aplicativo.
Qualquer pedido de análise de código ou referência a este artigo como sugestão para falha do aplicativo do usuário será negado como suporte de hospedagem.

O SSL em domínio que aponta para a Integrator

O SSL é configurado automaticamente quando o domínio, ou subdomínio, está apontando para a Integrator. Caso tenha alterado os DNS em menos de 24 horas, pedimos que aguarde para verificar no dia seguinte.
Caso precise conferir, veja o tópico Como Funciona o SSL em Seu Site.

SSL contratado

Caso tenha obtido um SSL, os passos abaixo são os mesmos.

SSL configurado manualmente

Caso tenha configurado um certificado SSL gratuito manualmente, os passos abaixo são os mesmos.

Tempo do SSL

O SSL gratuito que fornecemos tem duração de 90 dias, a contar da data que foi automaticamente configurado em seu domínio e renovado sempre, antes desta data expirar.

Gerando a chave para utilizar o SSL diretamente no servidor Java

Siga os passos atentamente para não obter erro na configuração:
1. Logue no cPanel e pesquise por Terminal ( está localizado no painel em Avançado » Terminal).
2. Na Interface do Terminal, digite o comando abaixo, onde seudominio.com.br é o seu domínio na Integrator.

genp12 seudominio.com.br

3. No Terminal, assim que estiver realizado o comando, uma mensagem surgirá, destacando em cores, com o nome da chave e a respectiva senha. Anote o nome da chave e a senha.

Alt text

4. Use o próprio Gerenciador de arquivos do painel cPanel para localizar o caminho exato de onde foi gerado o arquivo com a extensão .p12. 5. O caminho não é fixo e você pode mover o arquivo para o caminho que desejar usar. Desde que configure corretamente em seu arquivo properties o caminho real da key gerada.

Localizando o alias da chave gerada

Para listar o alias da sua chave keystore gerada, você pode usar o comando de exemplo abaixo,executando dentro do TERMINAL de seu usuario no qual sera solicitado senha da chave:

keytool -list -keystore /home/USUARIO_CPANEL/caminho/ARQUIVO.p12 -storetype PKCS12

Lembre-se de substituir /home/USUARIO_CPANEL/caminho/ARQUIVO.p12 pelo caminho completo de onde esta sua chave.


Utilizando o certificado no seu aplicativo Spring Boot Standalone

O exemplo abaixo assume que uma segunda porta será usada para o trabalho com SSL. Caso use a principal, saiba que isso causará falhas no mapeamento do seu aplicativo no domínio e o suporte não vai corrigir.
Para o exemplo apresentado na classe ConnectorConfig há uma configuração da porta de acesso ao uso de SSL diferente da HTTP.

package meupacote.config;
import java.io.File;

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConnectorConfig {

    @Value("${cap30.https.keystore.file:}")
    private String keystoreFile;
    @Value("${cap30.https.keystore.password:}")
    private String keystorePass;
    @Value("${cap30.https.keystore.type:}")
    private String keystoreType;
    @Value("${cap30.https.key.password:}")
    private String keyPass;
    @Value("${cap30.https.key-alias:}")
    private String keyAlias;
    @Value("${cap30.https.port:8443}")
    private int tlsPort;


    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); 
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); 
        final String absoluteKeystoreFilePath = new File(keystoreFile).getAbsolutePath(); 

        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(tlsPort);
        protocol.setKeystoreType(keystoreType);
        protocol.setSSLEnabled(true);
        protocol.setKeystoreFile(absoluteKeystoreFilePath);
        protocol.setKeystorePass(keystorePass);
        protocol.setKeyPass(keyPass);
        protocol.setTruststorePass(keystorePass);
        protocol.setKeyAlias(keyAlias);
        return connector;
    }

    @Bean
    public ServletWebServerFactory servletContainer() { 
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }
}

A classe ConnectorConfig é baseada na classe apresentada na documentação do Spring, no endereço https://www.docs4dev.com/docs/en/spring-boot/2.1.1.RELEASE/reference/howto-embedded-web-servers.html#howto-enable-multiple-connectors-in-tomcat.

O trecho a seguir apresenta o arquivo application.yml, contendo os valores que representam as configurações específicas para cada opção. Isso possibilitará a personalização em qualquer aplicação com Spring Boot.

server:
  port: '${port:6029}'
cap30:
  https:
    keystore:
      file: /home/USUARIO/appservers/crt/chaveaqui.p12
      password: trocar123
      type: pkcs12
    key:
      password: trocar123
    key-alias: edson
    port: 6030

Onde USUARIO é seu usuário cPanel e chaveaqui.p12 é a chave criada, no nome respectivo ao usuário.

Caso prefira usar um arquivo application.properties, o trecho a seguir apresenta as chaves personalizadas, criadas para definição de valores das propriedades específicas do protocolo HTTPS.

cap30.https.keystore.file=/home/USUARIO/chaveaqui.p12
cap30.https.keystore.password= trocar123
cap30.https.keystore.type= pkcs12
cap30.https.key.password= trocar123
cap30.https.key-alias= edson
cap30.https.port= 6030 

O acesso via domínio sem porta

No painel da Integrator Host, o Integrator Spring Boot usa a porta selecionada para realizar um proxy na porta 80/443 no domínio/subdomínio selecionado. Quando o desenvolvedor altera para HTTPS, o proxy se perde.
O correto é o desenvolvedor usar outra porta para o HTTPS.


Quando devo usar HTTPS diretamente no Spring Boot Standalone?

Quando o aplicativo for utilizar Websocket, por exemplo, ou tenha algum acesso que necessite ser diretamente no programa e possua informações que trafegam no qual devem ser criptografadas.

Sobre exemplos que exibem programação

A Integrator Host é uma empresa fornecedora de serviço de hospedagem com painéis próprios embutidos no cPanel, como neste caso. O suporte de hospedagem se reserva no direito de explicar o uso dos painéis de controle e comandos de ferramentas que automatizamos. A Integrator Host se exime de pedidos para orientações de códigos ou erros que estes apresentarem por má configurações ou desconhecimento do desenvolvedor.