남잭슨의 개발 블로그

[SSL]HTTPS 통신을 위한 Tomcat SSL 설정하기 본문

개발일지

[SSL]HTTPS 통신을 위한 Tomcat SSL 설정하기

남잭슨 2018. 2. 6. 00:14

HTTPS 및 SSL 암호화 통신을 위해 Tomcat 설정을 해보자


일단 HTTPS, SSL 사용할까?

링크를 통해 어떠한 사이트에 접속하게된다.

이 사이트가 아무 문제가 없는 사이트라면,  상관이없지만,

개인정보를 뻇는 사이트인지, 해킹당하고 있는사이트인지 ,해킹 위험이 있는 사이트인지 우리는 알수가 없다.


이 웹사이트가 어떤 사이트인지, 누가 만든사이트인지, 통신이 안전한지 등의 정보알아야 하기때문에 HTTPS 통신을한다.

HTTPS/ SSL 통신을 하면 ,  인증기관( CA )에서 해당 사이트가 누구의 소유인가, 누가만든것인가등의 정보를

인증해주고 , 이러한 인증기관의 인증으로 안전한 사이트접속을 하게한다.




먼저, HTTPS / SSL 암호화 통신 방법에 대해 알아보자!


1. 서버측에서는 서버에 대한 정보와 인증등이 담긴 인증서와, 공개키 (비대칭키)를 인증기관( CA : 공인, 사설 이 존재한다 )에 등록한다.

※ 비대칭키 = 공개키, 개인키가 존재한다. 공개키로 암호화를 하고, 개인키로 복호화한다.

   개인키가 분실되지 않는 한, 안전하지만, 리소스를 많이 잡아먹는다.

   주로 개인키는 서버측에서 관리하고, 공개키는 인증기관에 등록하며 이런한 키는 웹브라우저 보안기능내에 내장되어있다.


2. 클라이언트가 등록되어있는 공개키(비대칭키)로 공통키( 대칭키)를 암호화 하여 서버측에 전송한다.

※ 대칭키 (공통키) = 암호화와 복호화에 사용하는 키가 같다. 비대칭키에 비해 리소스를 덜 잡아먹지만, 해당 키를 분실하게 되면 면 보안에 매우 취약해진다.


>> 중간에 누군가 가로채더라도, 공통키는 공개키(비대칭키)로 암호화되어 있기때문에 안전하다.

( 공개키로 암호화되어있으면, 개인키로만 복호화가 가능하다.)


3. 서버측에서 클라이언트에서 전송된 암호( 공통키로 암호화된 )를 개인키( 비대칭키 )를 사용하여 복호화하여 공통키를 흭득한다.



4. 서버 및 클라이언트는 공통키를 사용하여 보안 통신을 한다!


이렇게 통신전 공통키를 암호화해서 주고 받는 단계를 핸드쉐이크( Handshake )라고 한다.




자 이제 기다리던 Tomcat 서버에 HTTPS / SSL 을 적용해보자



먼저 ,HTTPS/SSL 암호화 통신을 하기위해서는 SSL 인증서가 필요하다.

SSL 인증서를 발급해주는 전문적인 기관( CA )이 있다.

많은 다양한 기관이 있다 Verisign , comodo, thawte 등 여러 유료/무료 기관이 있다.


나는 내가 CA를 만들고 SSL 인증서를 인증을 했다.

아래 링크에 들어가서 따라하면 , 나만의 SSL 인증서를 발급할수 있다. ( 테스트 및 개발용 )


2018/01/31 - [개발일지] - [SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL)


SSL 인증서 ( 인증서이름.crt )가 준비되었다면, OpenSSL을 통해 Tomcat에 맞는 형식으로 바꿔준다. ( OpenSSL 사용법은 위에 링크 참조 )


pkcs12 -export -in private.crt(인증서이름) -inkey private.key(인증서키이름) -out .keystore -name tomcat


를 하면 .keystore가 생긴다.


1. .keystore 파일 경로를 원하는 위치에 이동시킨다!!!


2. Tomcat 서버의 server.xml을 연다 .  (보통은 톰캣위치\conf 경로에 존재한다. )


server.xml을 열어보자!


3. 아래의 소스코드를 추가한다.

HTTPS통신을 할 포트번호를 정한다 ( https는 Port 443이 기본이다.  혹시 기존에 해당 포트가 사용중이라면 , 다른포트를 이용하자)

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-Win64/bin/.keystore" >



매우 간단하게 HTTPS / SSL 통신을 위한 Tomcat 설정이 끝났다.



비록 인증서가 공인CA에서 인증된 인증서가 아니라 안전하지 않음 이지만

SSL 적용이 완료되었다!



비록 인증되지않아.

공인CA에 인증서가 등록되어있지않아서,

정상적으로 접근할수 없지만


[고급]버튼을 누르면



[localhost(안전하지않음) 으로 이동 ]을 통해 웹사이트에 우회하여 접근할수 있다.


개발인증서가 아닌, 실제 인증서를 설정하면 , 정상적으로 아래와 같이 웹사이트에 접속이 될것이다.









Comments