HTTPS 사용을 위한 SSL 인증서 발급 및 설치, 적용

2020. 6. 15. 16:13포트폴리오/SSL 인증서

프로젝트에 FCM을 사용하면서 local 환경 외에서는 https를 사용해야하는 상황이 일어났다.

https 사용을 위해서는 SSL(Secure Sockets Layer, SSL) 인증서에 의해 보안이 증명된 페이지여야 하기 때문에

SSL 인증서 발급이 필요하다.

또 인증서 발급을 위해선 도메인이 필요하다. 

 

따라서 HTTPS를 사용하기 위해선 도메인과 SSL 인증서가 필요하다고 보면 되겠다.

 

SSL 인증서는 렛츠인크립트를 포함하여 다양한 무료 인증서 발급 서비스를 통해 발급 받을 수 있다.

도메인 또한 무료도메인을 제공해주는 여러 서비스 사이트가 있기 때문에 걱정이 없다.

(다만, 무료 서비스이므로 빠른 서비스는 기대하지 말도록 하자)

 

사용된 서비스 사이트

도메인 : 내도메인.한국

인증서: ZeroSSL

 

우선, 도메인을 받아 내 IP와 연결해주고 기타 리다이렉트 설정을 해준다.

 

다음으로, 해당 도메인으로 SSL 인증서 신청을 한 뒤 인증이 필요하다.

인증은 인증 파일을 통해 인증을 하는 방식을 선택하였다.

인증을 위해 root 디렉토리에 .well-known/pki-validation/ 경로를 만들어주고 해당 경로에 인증파일을 넣어준다.

이 과정에서 본인은 일반 윈도우OS 환경에서 진행하였기 때문에 .이 들어간 폴더는 일반적인 방법으로는 생성이 안된다.

root 디렉토리에서 cmd를 열고 mkdir 명령어를 통해 .well-known 폴더를 생성해주었다.

 

그 후 홈페이지에 제시된 인증 확인 링크를 통해 제대로 인증 파일을 확인하고 인증 확인을 통해 다음으로 넘어간다.

 

이제 비로소 SSL 인증서가 포함된 .zip 압축파일을 사이트에서 받아 인증서를 사용할 수 있다.

해당 ZeroSSL에서 제공하는 파일은

certificate.crt

ca_bundle.crt

privatekey.key

로 구성되어 있다.

 

이중 certificate.crt 파일을 실행하여

로컬 컴퓨터 > 모든 인증서를 다음 저장소에 저장 체크 > 찾아보기 중 신뢰할 수 있는 루트 인증 기관 선택 > 마침

순서대로 설치를 해주면 된다.

 

적용

적용에 관련해서는 다음 링크에 게시된 사이트의 가이드를 보고 하면 된다.

https://www.securesign.kr/

 

SSL 인증서 국내 최저가 Sectigo Comodo GeoTrust Thawte RapidSSL - SecureSign

글로벌 SSL 인증서 최저가 발급. 와일드카드, 멀티도메인. CSR 자동 생성. PEM, PFX, JKS 포맷 제공. 재발급 무제한. 서버 무제한 설치. 모바일지원. 간편인증, SecureSign, SSLCERT

www.securesign.kr

Spring 적용

Spring 적용에 관련해서는 다소 시행착오가 많아 따로 정리하도록 하겠다.

 

우선, 위 인증서 구성 중 certificate.crt와 ca_bundle.crt 파일을 합친 뒤 privatekey 파일을 keystore 파일으로 변환하는 과정이 필요하다.

 

윈도우에서는 cat이 없고 type을 통해 바로 합칠 경우 파일 내용 간 구분이 되지 않아 오류가 발생한다.

따라서 텍스트 에디터를 통해 연 뒤 start라인과 end라인이 서로 겹치지 않게 합쳐준 뒤 (이름).crt 파일로 저장한다.

 

그 후 openssl을 통해 합친 파일과 privatekey를 pfx파일로 변환한다.

openssl pkcs12 -export -in (이름).crt -inkey private.key -out (생성파일 이름).pfx

 

다음으로 keystore파일로 다시 변환한다.

keytool -importkeystore -srckeystore (생성파일 이름).pfx -srcstoretype pkcs12 -destkeystore (keystore파일이름).jks -deststoretype jks

(keytool은 jdk를 설치한 뒤 사용할 수 있다)

jks는 Java Key Store 파일 형식이며 최근에는 pkcs12의 p12형식을 권장하는것 같다.

 

그 후 TrustStore라는 TrustKeyStore를 만들어준다.

keytool -export -alias (도메인이름) -keystore (위에서 만들어준 jks파일) -rfc -file server.cer

//위에서 따로 alias를 지정하지 않았기 때문에 초기에 1 또는 mykey 등으로 되어 있다.

keytool -import -alias (도메인이름) -file server.cer -keystore trustcert.jks

//새로 생성할 trustkeystore 파일에 alias로 도메인이름을 적어준다.

 

이로서 파일 변환은 완료되었다.

마지막으로 첫번째 jks의 alias를 수정해주도록 하자.

keytool.exe -changealias -keystore (첫번째).jks -alias www.securesign.kr -destalias 변경될 Alias 이름

 

모든 작업이 완료되면 스프링부트의 application.properties에 서버 설정을 적어준다.

server.ssl.enabled=true

server.ssl.key-store= keystore 파일 경로(첫번째 jks파일)

server.ssl.key-store-password= keystore 파일 만들 때 설정한 비밀번호

server.ssl.key-password= 키 비밀번호

server.ssl.key-alias= alias 이름(첫번째 jks파일의 수정해준 alias)

server.ssl.trust-store= truststore 파일 경로

server.ssl.trust-store-password= truststore 파일 만들 때 설정한 비밀번호

 

이상으로 Spring에 대한 https 설정도 끝이 났다.