프로젝트/CICD

[CI/CD] 스프링부트에 HTTPS 적용

SY 키키 2024. 6. 21. 15:36

프론트엔드와 백엔드가 소통을 하지 못하는 일이 발생하였습니다.

프론트에서 백으로 HTTPS 요청을 보내도록 하였는데 HTTPS이 인증이 안되어 에러가 발생하는 것처럼 보였습니다.

그래서 스프링부트 컨테이너에 직접 HTTPS 옵션을 걸어보도록 하겠습니다.

 

 

1️⃣ 먼저 스프링에서는 .pem을 인식하지 못하기 때문에 springboot key 생성을 해줍니다.

 openssl pkcs12 -export -in /etc/letsencrypt/live/restagram.shop/fullchain.pem -inkey /etc/letsencrypt/live/restagram.shop/privkey.pem -out keystore.p12 -name restagram -CAfile /etc/letsencrypt/live/restagram.shop/fullchain.pem -caname root

openssl : OpenSSL 명령어 시작
-export: PKCS#12 형식으로 키스토어를 내보내는 옵션
-in: 인증서 파일의 경로를 지정
-inkey: 개인 키 파일의 경로를 지정
-out: 출력될 PKCS#12 파일의 경로를 지정
-name: 키스토어에 저장될 인증서 체인의 이름을 지정
-CAfile: 인증서 체인 파일의 경로를 지정
-caname: 인증서 체인 내에서 검증된 루트 인증서의 이름을 지정

만약 권한 오류가 발생하면 다음과 같이 권한을 부여하고 실행합니다.
sudo chmod 644 /etc/letsencrypt/live/restagram.shop/privkey.pem​

 

 

2️⃣ 비밀번호를 입력해줍니다. 꼭 기억해야 합니다.

 

3️⃣ 해당 파일을 젠킨스 내부로 복사합니다.

docker cp keystore.p12 [젠킨스 컨테이너 ID]:[복사할 경로]/keystore.p12

저는 다음과 같이 해주었습니다.

docker cp keystore.p12 e3878101f910:/var/jenkins_home/restagram/api/keystore.p12

 

4️⃣ 잘 복사 되었는지 확인해보겠습니다.

docker exec -it e3878101f910 ls -l /var/jenkins_home/restagram/api/keystore.p12
-rw-r--r-- 1 root root 2803 Jun 21 15:00 /var/jenkins_home/restagram/api/keystore.p12

 

root root 뒤의 2803은 파일 크기입니다. 만약 0이라면 복사가 잘못된 것이니, 권한 설정 등을 한 후 다시 복사해주세요.

권한 오류가 발생하면 다음 명령어를 실행해줍니다.
 sudo chmod 644 keystore.p12

 

5️⃣ 스프링 부트 application.yml을 수정해줍니다.

server:
  ssl:
    key-store: classpath:keystore.p12 # 파일 경로
    key-store-password: yourpassword # 2번에서 입력한 비밀번호
    key-store-type: PKCS12
    key-alias: restagram

 

6️⃣ 젠킨스 파이프라인에 해당 파일을 /src/main/resource 로 복사하는 명령어를 추가합니다.

dir('/var/jenkins_home/restagram/api') {
    sh '''
        mkdir -p ${WORKSPACE}/src/main/resources/
        cp application.yml ${WORKSPACE}/src/main/resources/
        cp keystore.p12 ${WORKSPACE}/src/main/resources/ # 추가
    '''
}

 

 

7️⃣ 새로 빌드를 하면 끝 !

 

 

참고

https://firstblog912.tistory.com/233

 

[Spring Boot] ssl 적용

frontend에서 ssl을 적용하여 https 프로토콜을 사용하는 순간, 콘솔에서 api 서버가 https 가 아니라 안전하지 않다는 에러를 계속 뿌렸다. 또, network 탭에서는 preflight 가 계속 error였다. 아무리 화면은

firstblog912.tistory.com