HTTPS를 개발환경(Localhost)에서 적용하는 방법
Self-signed SSL 인증서 만들기
keytool -genkeypair -alias myshop -keyalg RSA -keystore keystore.p12 -storetype PKCS12 -storepass 123456 -validity 3650
HTTPS 적용을 위해 테스트용 인증서를 만드는 명령어이다. Java의 keytool 명령어로 공개키와 개인키 쌍을 생성하고, 이를 keystore.p12라는 파일에 저장했다. 생성된 kestore.p12파일을 resource 폴더에 위치시키면 스프링 부트에서 HTTPS 설정에 사용된다.
2. application.yml 설정 확인
server:
port: 8443
ssl:
enabled: true
key-store: classpath:keystore.p12
key-store-password: 123456
key-store-type: PKCS12
key-alias: myshop
application.yml 통해 아래와 같은 설정을 할 수 있다.
resources/keystore.p12 파일에 저장된 myshop 인증서를 이용해, 포트 8443으로 HTTPS 서버를 실행한다.
https://localhost:8443 으로 접속해보았다.
self-signed 인증서는 공식 인증기관(CA)에서 발급받은 게 아니기 때문에 이런 페이지가 뜬다.
하지만 로컬 서버에서 테스트 하기 때문에 개발환경에선 무시하고 접속해도 괜찮다.
HTTP -> HTTPS 리다이렉트 설정
HTTP → HTTPS 리다이렉트 설정을 추가해서 사용자가 실수로 http://localhost:8080 같은 주소로 접속해도 자동으로 https://localhost:8443로 이동하게 만들어보자.
일단 application.yml 파일에서는 8080 port가 열려있으면 안된다.
@Configuration
public class WebServerConfig {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addAdditionalTomcatConnectors(httpToHttpsRedirectConnector());
return factory;
}
private Connector httpToHttpsRedirectConnector() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}
리다이렉트 설정 클래스를 만들어서 Spring이 자동으로 읽을 수 있도록 반드시 @Configuration을 붙여야 한다.
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>home</title>
</head>
<body>
<p>home.html</p>
</body>
</html>
테스트를 위해 templates/home.html 파일을 만들고 HomeController를 만들어서 http://localhost:8080에 접속해보면
잘 열리는걸 확인할 수 있다,
'ShoppingMall Project' 카테고리의 다른 글
[Shop Project] HTTP vs HTTPS, SSL인증서 생성하기 (1) (1) | 2025.05.28 |
---|---|
[Shop Project] 전략 패턴(Strategy Pattern)을 활용한 결제 방식 구현 (0) | 2025.05.28 |
[Shop Project] 팩토리 메소드 패턴(Factory Method Pattern)을 활용한 주문 방식 분리 (0) | 2025.05.26 |