사내에서 HTTPS를 적용한 소스를 실서버에 배포하게 되었습니다. 이에 HTTPS/SSL이란 무엇인지 간단히 알아보고, 톰캣서버에 어떻게 적용하는지 OpenSSL을 이용하여 알아보겠습니다.
쉽게 말하면 안전한 사이트 접속을 보장하는 인증체계입니다. HTTPS/SSL 통신을 하면 인증기관(CA)의 인증을 받아 안전한 사이트 접속이 가능해집니다.
아래 주소를 통해 다운로드 받으면 됩니다.
저장 위치는 C드라이브 바로 아래 저장하면 되고, 다운이 완료되면 /bin/openssl.exe를 실행합니다.
https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect%EF%BB%BF
genrsa -out [키이름] 2048 // 비밀번호가 없는 개인 키 생성
e.g. genrsa -out private.key 2048
genrsa -des3 -out [키이름] 2048 // 비밀번호가 담긴 개인 키 생성
e.g. genrsa -des3 -out private.pem 2048
개인키와 쌍이 되는 공개키를 만들어봅시다.
rsa -in [개인키] -pubout -out [공개키] rsa -in priavte.key -pubout -out public.keyCopy
e.g. rsa -in private.key -pubout -out public.key rsa -in priavte.key -pubout -out public.keyCopy
CSR이란 인증서 발급을 위해 필요한 정보가 암호화되어 담겨진 파일입니다. 일반적으로 조직명, 도메인명, 지역 및 국가와 같은 정보를 포함합니다.
req -new -key [키] -out [CSR이름.csr]
e.g. req -new -key private.key -out private.csr
// 명령어가 실행되면 여러 정보를 입력해야 하는데, 어차피 개발용이므로 자유롭게 입력하시면 됩니다.
나만의 사설 CA에서 인증까지 받은 인증서를 생성하는 방법입니다.
우선 인증서에 서명을 해줄 rootCA를 생성해줍니다.
genrsa [암호화 알고리즘] -out [키이름] 2048
e.g. genrsa -aes256 -out rootCA.key 2048
rootCA의 사설 CSR을 만들어줍시다.
req -x509 -new -nodes -key [개인키] -days [유효날수] -out [인증서파일명]
e.g. req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem
// 명령어가 실행되면 여러 정보를 입력해야 하는데, 어차피 개발용이므로 자유롭게 입력하시면 됩니다.
마지막으로 CRT를 만들어줍시다.
x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650
Tomcat에 인증서를 적용할 것이기 때문에 pkcs12라는 형식으로 바꿔줘야 합니다. 이 .keystore를 사용하여 SSL 통신을 구현할 수 있습니다.
pkcs12 -export -in private.crt -inkey private.key -out .keystore -name tomcatCopy
/톰캣경로/conf/server.xml를 열어 아래 설정을 추가합니다.
keystorepass와 keystorefile은 본인이 설정한 keystore의 비밀번호와 경로로 수정하면 됩니다.
<connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxthreads="150" sslenabled="true" scheme="https" secure="true"
clientauth="false" sslprotocol="TLS"
keystorepass="password" keystorefile="C:/OpenSSL/bin/.keystore" />
수정 후 https://[URL]:[port]로 접속 시 정상 동작한다면 SSL이 적용된 것입니다.
오랜만에 포스팅 하셨네용