Kotlin/Spring
(Spring) HTTP 프로젝트 HTTPS로 업그레이드 하기
너어디사니
2024. 5. 31. 23:17
HTTP와 HTTPS란??
HTTP
- Hyper Text Transfer Protocol의 약자
- 서로 다른 시스템들 사이에서 통신을 주고 받게 하는 가장 기본적인 프로토콜
- 서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용한다
- 전송되는 요청 / 응답 정보가 기본적으로는 암호화 되어 있지 않아서 보안 정보 도난의 위험이 있다
HTTPS
- Hyper Text Transfer Protocol Secure 의 약자
- HTTP의 보안정보와 도난의 단점을 보완하기 위해 사용하는 프로토콜
- SSL / TLS 프로토콜을 사용하여 HTTP를 암호화 하여 주고 받을 때 쓰는 통신 프로토콜
진행 방식
- 인증서를 발급해준다
- 로컬에서 테스트 할 경우 인증서를 application에 등록해준다
- 코드로 HTTP 접속을 전부 HTTPS로 이동 시킨다
인증서 발급
- 여러가지가 있지만 우선 도메인이 있다면 certBot을 설치하여 무료 인증서를 다운하는 방법이 가장 편하다
https://certbot.eff.org/instructions <- CertBot 가이드
- 하지만 도메인이 없는 경우에는 KeyTool을 사용하여 가상 인증서를 발급 받는 것이 중요하다
keytool -genkeypair -alias {별명} -storetype {스토어 타입} -keyalg {알고리즘 타입} -keysize {키사이즈} -keystore {키 이름}.p12 -validity 4000
- 위와 같이 입력해주고 스토어 타입에는 주로 PKCS12, 알고리즘은 RSA를 주로 사용한다
- 작성하면 하라는 대로 입력하면 가상 인증서 파일을 하나 발급해준다
인증서를 Application.yml 파일에 등록
server:
ssl:
enabled: true
key-store: {인증서 파일 경로}
key-store-type: (스토어 타입}
key-store-password : {설정한 비밀번호}
key-alias : {별명}
port : 8443 <- 여기는 HTTPS로 변환될 때 사용하는 포트 번호이다
코드로 HTTP 접속을 전부 HTTPS로 이동 시키면 끝난다
@Bean
fun servletContainer(): ServletWebServerFactory {
val tomcat = object : TomcatServletWebServerFactory() {
override fun postProcessContext(context: Context) {
val securityConstraint = SecurityConstraint()
securityConstraint.userConstraint = "CONFIDENTIAL"
val collection = SecurityCollection()
collection.addPattern("/*")
securityConstraint.addCollection(collection)
context.addConstraint(securityConstraint)
}
}
tomcat.addAdditionalTomcatConnectors(createStandardConnector())
return tomcat
}
fun createStandardConnector(): Connector {
val connector = Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL)
connector.scheme = "http"
connector.port = 8080
connector.secure = false
connector.redirectPort = 8443
return connector
}
- 위 코드는 Spring Security를 사용하지 않고 직접 사용하였는데 ServletWebServerFactory를 상속을 받은 후에 TomcatServletWebServerFactory 정보를 HTTPS 로 변경 시켜주는 작업을 해주는 방법이다
위와 같이 실행을 하면 http://localhost:8080 으로 접속할 경우 https://localhost:8443으로 자동으로 변환되어 접속이 확인 되는 것을 볼 수 있다