[Spring] HTTPS 적용하기
2024. 2. 17. 20:54ㆍWeb/Spring
[Spring] HTTPS 적용하기
학습하던 스프링 프로젝트에 HTTPS를 적용하고자 한다. 단계는 다음과 같이 이루어진다
- SSL/TLS인증서 생성
- Spring Boot - application.yml 작성
- 코드 수정
- 실행 후 postman으로 테스트
SSL/TLS 인증서 생성
먼저 SSL/TLS 인증서를 생성해야 한다. 방법은 두 가지가 있다. 첫 번째는 자체적으로 서명한 인증서를 사용하거나 혹은 인증기관에서 구매한 SSL 인증서를 사용하면 된다. 하지만 이번 프로젝트 같은 경우 학습을 위한 개인 프로젝트이기에 keytool을 사용하여 자체적으로 서명한 인증서를 만들어서 사용했다.
// 터미널에 입력
keytool -genkey -alias myapp -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
- -genkeypair : 키 쌍을 생성하는 옵션
- -alias [mykeypair] : 해당 키 쌍에 맞는 별칭을 지정
- -storetype : 키 저장 형식 : PKCS12 사용
- PKCS12 : 공개 키 기반 보안 표준, 개인 키와 해당 인증서를 단일 보안 파일에 저장하는 데 사용되는 파일 형식
- -keyalg : 사용하고자 하는 key의 알고리즘 지정 : RSA 알고리즘 사용
- RSA : 비대칭 키 암호화 알고리즘, 공개 키와 개인 키를 사용하여 데이터를 암호화 및 복호화하는 데 사용
- -keysize : key의 크기 지정 : 2048 비트로 지정
- -validity : 인증서의 유효기간 지정
해당 명령어가 실행이 되면 사용자는 여러 질문들을 받게 된다. 해당 질문에 맞게 답변을 하면 된다.
Spring Boot - application.yml
생성한 인증서를 사용할 수 있게 application.yml 혹은 properties에 내용을 작성해야한다.
server:
port: 8443
ssl:
key-store: [키가 저장된 경로]
key-store-type: [키 저장 형식]
key-alias: [키 지정 별칭]
key-store-password: [키 저장 비밀번호]
코드 수정
Spring security 관련하여 코드를 수정해야 한다.
해당 어노테이션을 사용해야 하며 이전까지는 WebSecurityConfigurerAdapter를 상속하여 사용을 했지만 spring security가 업데이트되면서 WebSecurityConfigurerAdapter는 사용불가가 되었다.
@EnableWebSecurity
변경된 방식으로는 filterChain을 통해서 작성이 되어야 하며 이때 filterChain의 경우 직접 @Bean으로 설정을 등록해야 한다
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable())
.cors(Customizer.withDefaults()); // cors 설정
http.headers((headers) ->
headers.xssProtection(Customizer.withDefaults())
.contentSecurityPolicy(Customizer.withDefaults())); //xss 설정
http.authorizeHttpRequests(
(auth) -> auth
.anyRequest().authenticated()
);
return http.build();
}
실행 후 PostMan으로 테스트
주어진 조건에 맞게 값을 body에 넣어서 전달하였다. 이때 확인을 위해서 https의 적용 및 포트 번호를 변경해서 요청과 응답 값을 확인하였다.
'Web > Spring' 카테고리의 다른 글
[Spring] Category 구현하기 (0) | 2024.02.21 |
---|---|
[Spring] 휴대폰 인증 - 네이버 sens 사용 (0) | 2023.08.26 |
[Spring] 이메일 인증 (0) | 2023.08.26 |
[Error] java.lang.ClassNotFoundException: org.apache.hc.client5.http.classic.HttpClient (0) | 2023.08.17 |
[Etc] application.yml 변경 및 Jasypt (0) | 2023.08.09 |