https://thiswooin.tistory.com/117
도메인을 구입하고, SSL 인증서를 발급받았다.
이제 이 파일을 Springboot파일에 적용시켜 https 포트로 동작시켜볼 시간이다.
참고로, 우분투에서 생성하긴 했지만 인증서는 OS에 의존성을 갖진 않는다.
진행한 과정이 우분투에서일뿐.
아래의 순서로 진행했다.
- pem파일로 p12파일 생성하기.
- p12 권한설정 후 로컬로 가져오기.
- SpringBoot 프로젝트 폴더로 가져오고 세팅하기.
- http 리다이렉트 설정 (추가)
1. pem파일로 p12파일 생성
cd /etc/letsencrypt/live/[도메인]
해당 위치를 이동하면 pem파일이 있고, 이 위치는 인증서 발급받을 때 알려준다.
SpringBoot에서는 pem파일을 읽지 못한다.
그래서 아래 명령어로 pem파일을 토대로 p12파일로 만들어준다. + 비밀번호 잘 입력해주고
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name [별칭 alias]
생성된 것을 확인했다.
2. p12 권한설정 후 로컬로 가져오기
keystore.p12파일이 생성됐는데, 파일 권한을 미리 바꿔줘야하는 경우도 있다.
sudo chmod 755 keystore.p12
권한을 바꿔준 모습.
' mv [해당파일] /home/ubuntu폴더 '명령어로 옮긴 후 가져왔다.
필자는 FileZilla를 통해서 로컬로 가져와 줬다. (각자 방법으로 가져오기)
3. SpringBoot 프로젝트 폴더로 가져와서 세팅하기
Root폴더에 두는 경우도 있는데 resources 폴더로 가져왔다.
applications.properties파일 수정
이처럼 각각 맞게 수정해준다.
근데 여기에 함정이 있었는데, 이것 때문에 5시간 날렸다.
아래 설정을 해줘야 한다..
그럼 이렇게 443(https) 포트로 실행되는 것을 알 수 있다.
4. http 리다이렉트 설정 (추가)
혹시나 http의 8080포트로 요청이 오면 https인 443포트로 리다이렉트 하는 설정도 추가했다.
config 폴더에 HttpsConfig를 생성해줬다.
@Configuration
public class HttpsConfig {
@Bean
public ServletWebServerFactory servletContainer() {
// Enable SSL Trafic
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
// Add HTTP to HTTPS redirect
tomcat.addAdditionalTomcatConnectors(httpToHttpsRedirectConnector());
return tomcat;
}
private Connector httpToHttpsRedirectConnector() {
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}
간략히 보자면 userconstraint를 none에서 confiential로 바뀌고 기본패턴 '/*' 추가해줬다.
그리고 밑에 private 메소드로 http로 포트를 하나 더 열어줬는데, 이는 443포트로 리다이렉트하게 해주는 역할로 지정해준 셈이다.
멀티커넥터라고 하기도 하는듯하다.
5. POSTMAN 테스트
이제 실행시켜보면 아래처럼 포트가 두 개 열린다.
https 요청 결과
응답코드200으로 잘 왔다.
하지만 로컬환경이기 때문에 인증서 도메인과는 달라 경고문구가 뜨긴한다.
http 요청 결과
302로 리다이렉션 후 200 응답을 받았다.
'Projects > 푸하하 - 개인 프로젝트' 카테고리의 다른 글
로컬, 개발환경 변수 따로 적용하기 (개발환경, 배포환경 분리하기, 크롬 SSL 인증서경고 무시) (0) | 2023.11.13 |
---|---|
https로 프론트, 백을 배포하며 마주한 트러블들 (0) | 2023.11.10 |
SSL인증서 발급 받기 (Let's encrypt, certbot, ubuntu, ec2, spring boot) (0) | 2023.11.09 |
도메인 등록하기, 네임서버 (0) | 2023.11.08 |
[트러블] 서버 배포하기 - 쿠키가 생성되지 않는 이슈. (Same-site : none 설정) (0) | 2023.11.06 |