본문 바로가기

Java/Spring Boot

[Spring Boot] 내장 웹 서버 응용 - HTTPS와 HTTP2

1. HTTPS 설정하기

# 키스토어 만들기

keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000

cf) Spring Boot Terminal 내에서 keytool command not found 발생 시

CMD 관리자권한으로 JDK 경로 내(C:\Program Files\Java\jdk1.8.0_161\bin)에서 실행하고 생긴 파일을 옮겨주면 됨

(위치는 pom.xml과 동일)

 

 

 

# application.properties

server.ssl.key-store=keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=xxxxxx
server.ssl.key-alias=spring

 

 

https://localhost:8081

인증서가 로컬 환경(위에서 만든 키스토어)에 있기 때문에 https로 접근하게 되면

브라우저는 인증서의 public key를 모르는 상태이기 때문에 다음과 같은 화면이 보이게 됨

고급>localhost(안전하지 않음)(으)로 이동 클릭 시 화면 이동 가능

 

 

 

# Terminal 에서 확인하기

curl -I --http2 https://localhost:8081/hello

: 마찬가지로 인증서의 public key를 모르기 때문에 오류

 

curl -I -k --http2 https://localhost:8081/hello

: -k를 주면 실행 가능

 

 

 

# Controller 추가하기

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

	@GetMapping("/hello")
	public String hello() {
		return "Hello Spring";
	}

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

 

 

 

 

 

 

 

2. HTTP Connector 추가하기

https를 적용하고 나면 http는 못쓰게 됨

: http Connector가 하나기 때문에 Connector에 https를 적용하게 되면 http는 사용할 수 없음

 

 

# Connector 추가하기

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

private Connector createStandardConnector() {
   Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
   connector.setPort(8081);
   return connector;
}

: http port를 8081로 했기 때문에 위에서 설정한 https port를 바꿔줘야 함

 

-> https port : 8443 / http port : 8081

 

 

 

 

 

 

 

 

 

 

 

3. HTTP2 설정하기

application.properties 내에 추가

server.http2.enabled=true

 

Undertow의 경우 HTTPS만 적용이 되어 있으면 아무런 추가 없이 HTTP, HTTP2 사용 가능

톰캣 9.0.X와 JDK9 이상의 경우에는 추가 설정 필요 없음(톰캣 8.5.X의 경우 방법이 복잡함)

 

HTTP2는 위에서 적어준 SSL 세팅이 되어있어야 함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com