Se você está desenvolvendo uma aplicação Spring Boot, já deve ter notado que por padrão ela roda apenas com HTTP. Mas e se você quiser ativar o HTTPS (a versão segura do HTTP)? E mais: e se quiser que tanto HTTP quanto HTTPS funcionem ao mesmo tempo?
Neste artigo, vou te mostrar como fazer isso passo a passo, explicando de forma bem clara o que está acontecendo. Vamos nessa?
☑️ O que é HTTPS (e por que ele importa)?
O HTTPS é como o cadeado de segurança que você vê ao lado da URL no navegador. Ele garante que os dados enviados entre o navegador e o servidor estejam protegidos com criptografia. Isso evita que alguém no meio do caminho (como um hacker numa rede pública) consiga ver ou modificar os dados da sua aplicação.
No mundo real, usar HTTPS não é mais opcional — é essencial.
🔐 O que é uma Keystore?
Antes de ativar o HTTPS no Spring Boot, precisamos falar da keystore. Em resumo:
-
É um arquivo que guarda sua chave de segurança e um certificado digital.
-
Ela diz para o navegador: “Sim, eu sou um servidor confiável, pode conversar comigo com segurança.”
Para testes locais, usamos um certificado autoassinado. Em produção, você usaria um certificado oficial (como os da Let’s Encrypt).
🛠️ Gerando uma Keystore com o Keytool
Vamos usar uma ferramenta chamada keytool
, que já vem junto com o Java (JDK).
Abra o terminal e digite:
keytool -genkeypair \
-alias meu-certificado \
-keyalg RSA \
-keysize 2048 \
-storetype PKCS12 \
-keystore keystore.p12 \
-validity 365 \
-storepass senha123 \
-keypass senha123 \
-dname "CN=localhost, OU=Dev, O=MinhaEmpresa, L=Cidade, S=Estado, C=BR"
Esse comando vai criar um arquivo chamado keystore.p12
com tudo que o Spring Boot precisa para ativar o HTTPS.
📁 Dica: Coloque o arquivo keystore.p12
dentro da pasta src/main/resources
do seu projeto.
🧾 Explicação dos parâmetros:
Parâmetro | Descrição |
-alias | Nome do certificado dentro da keystore |
-keyalg | Algoritmo da chave (RSA) |
-keysize | Tamanho da chave (2048 bits) |
-storetype | Tipo da keystore (PKCS12 é moderno e compatível com Spring Boot) |
-keystore | Nome do arquivo gerado |
-validity | Quantos dias o certificado será válido |
-storepass | Senha da keystore |
-keypass | Senha da chave (geralmente igual à storepass) |
-dname | DN (Distinguished Name) do certificado, com CN, OU, etc. |
⚙️ Configurando HTTPS no application.yml
Agora vamos ativar o HTTPS no Spring Boot:
server:
port: 8443
ssl:
enabled: true
key-store: classpath:keystore.p12
key-store-password: senha123
key-store-type: PKCS12
key-alias: meu-certificado
Pronto! Agora sua aplicação vai funcionar com HTTPS na porta 8443.
Teste no navegador:
https://localhost:8443
Você verá um aviso de segurança (porque o certificado é autoassinado), mas pode prosseguir normalmente para fins de teste.
🌐 E se eu quiser que o HTTP continue funcionando?
Boa pergunta! Por padrão, quando o HTTPS está ativado, o Spring Boot para de responder no HTTP (porta 8080).
Mas podemos fazer os dois funcionarem juntos, com um pequeno ajuste no código.
🧩 Adicionando o suporte ao HTTP via código
Crie uma nova classe chamada TomcatHttpConfig.java
:
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatHttpConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addAdditionalTomcatConnectors(httpConnector());
return factory;
}
private Connector httpConnector() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
return connector;
}
}
Isso vai ativar novamente a porta HTTP (8080), enquanto o HTTPS continua funcionando na 8443.
Agora você pode acessar:
-
http://localhost:8080
(sem segurança) -
https://localhost:8443
(com segurança)
🚦 Quer redirecionar tudo de HTTP para HTTPS?
Se você quiser que todas as requisições HTTP sejam redirecionadas automaticamente para HTTPS, adicione este código:
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class HttpsRedirectFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (!req.isSecure()) {
String redirectUrl = "https://" + req.getServerName() + ":8443" + req.getRequestURI();
res.sendRedirect(redirectUrl);
} else {
chain.doFilter(request, response);
}
}
}
Agora, qualquer acesso via HTTP será automaticamente redirecionado para HTTPS. 🛡️
✅ Conclusão
Com poucos passos, você ativou o HTTPS e manteve o HTTP funcionando na sua aplicação Spring Boot. Isso te dá flexibilidade para testar localmente, lidar com integrações legadas e ainda manter segurança com HTTPS.
👉 Para produção, é recomendável usar um certificado de uma autoridade confiável, como a Let’s Encrypt, que é gratuito.
Ficou com dúvidas ou quer ver mais tutoriais como esse? Deixe um comentário! 🚀
Share this content: