본문 바로가기
걸어서 개발 속으로

https 지원(ssl)

by 손건호 2024. 2. 25.

 

https 접속을 위한 ssl 공인인증 적용

 

http 접속으로 발생하는 보안 경고는 사용자에게 불편함을 느끼게 한다
또한 최근 유저정보의 비밀번호 해싱작업중

클라이언트에서 해싱하는것이아닌 서버에서 해싱하는것이 보안에 더욱 안전하며

클라이언트에서 서버로 전송되는 유저정보중 비밀번호가 노출 될수있다는 고민은

https를 지원하는 서비스에서 해당사항이 없다는것을 알게 되었다

 

즉 https 를 지원하면서 해싱을 서버에서 처리하면

해사방법을 노출시키지도, 유저정보를 노출시키지노 않는 안전한 방법이라는 결론을 내렸다

그리하여 내 사이트에 https 접속을 지원하도록 했다

 

작업시간은 3일 소요되었고

zeroSSL 공인인증 과 kro.kr 도메인으로 지출은 없으면서 https 인증을 성공 하였다

 

개발환경

로컬 - 맥 환경에서

클라우드 - OCI 의 오라클 리눅스8 (트라이얼)

환경에서 구현했으며

Springboot 3.1.4 의 임베디드 톰캣10.1.13 에 yml파일에 ssl설정을 세팅했다

 

작업 순서

 

  1. 도메인 구매 (kro.kr)
  2. ssl 인증서 발행 (zeroSSL, cname)
  3. keystore.p12 인증서 생성(openssl)
  4. springboot ssl 설정 (yml)
  5. 네트워크,방화벽 설정
  6. 배포(jar)
  7. 접근 확인

이 기록은 서드파티 웹,앱서버 없이 spring boot의 기본 서버를 활용했으며 구현을위한 요금이 발생하지않고 오라클 vcn설정과 리눅스8을 사용했다, 도메인과 ssl 인증은 기록하지않고 인증서 사용과 성공여부를 확인하는것을 기록했다

 

 

zeroSSl 에서 도메인을 인증 후 발급받은 인증서 파일은 다음과 같다

 

 

공개키 인증서, 중간인증서, 개인키파일 3개가 압축파일로 받아진다

 

 

keystore.p12 파일을 생성한다

# openssl pkcs12 -export -out keystore.p12 -inkey private.key -in certificate.crt -certfile ca_bundle.crt

명령어 입력시 비밀번호를 보관한다

 

해당 인증서의 생성 위치는 상관없으며 나는 로컬에서 생성 했다

하지만 서버에서 생성시 파일을 사용할수있도록 그룹권한을 열어줘야 한다

그리고 트러스트스토어는 생성하지않았다

 

keystore.p12 파일을 서버에 저장한다 (해당 디랙터리 위치가 ssl의 설정 key-store 에 반영된다)

 

server:
  port: 443
  ssl:
    enabled: true
    key-store: /myPath/myServiceIs/SML/ssl/keystore.p12
    key-store-password: xxxx
    key-store-type: PKCS12

 

오라클인스턴스의 vcn 규칙중 https 에 대한 네트워크규칙을 설정한다(443)

 

 

ssl 설정이 포함된 빌드 파일을 리눅스 서버에 배포하기전에

새로운 포트로 네트워크 연결이 가능한지 확인해본다

 

리눅스 방화벽에 443포트를 설정한다

 

# sudo firewall-cmd --add-port=443/tcp --permanent

 

 

# sudo firewall-cmd --reload

 

 

빌드파일을 백그라운드 실행

nohup java -jar myservice.0.0.0jar &

 

접속 확인

 

 

 

+

이번작업이 오래 걸린 이유 -

방화벽 설정중 리눅스 버전에따라 바뀐 명령어로 443 포트가 닫혀있는것을 인지하지 못한것

인증된 도메인을 로컬에서 확인하려함

인증서에 대한 기본지식을 먼저 공부하지않음

 

2024 02/29 https 접속 지원 완료

댓글