외장톰캣에서 SSL 인증서 적용

행하던 프로젝트에서 개발이 막바지에 올때 쯤 HTTPS 호스팅을 해야한다는 요청이 왔다.

http는 보안이 약하고,, https 가 안전한거,,, 정도로만 이해하고 있었기에 호스팅을 위해 공부를 시작했다.

일단 HTTPS 를 사용할려면 인증서가 필요하다. 해당 인증서를 등록해야 SSL 이 적용되어 웹페이지에서 교환되는 정보들을 암호화 할 수 있다.

받은 인증서는 아파치용, 방화벽용 으로 나눠져있었다.

또 그 안에서 pem, pfx 가 나눠져있다.

PEM

  • PEM은 텍스트 형식이며 개인키, 루트인증서, 체인 인증서, 서버 인증서, 개인키 모두 호환한다. 텍스트 형식이므로 노트패드로 쉽게 확인, 수정 가능

  • 텍스트 형식이기 때문에 개인키는 비밀번호로 보호되지만 텍스트 자체는 누구나 쉽게 볼 수 있다.

PFX

  • pfx 는 바이너리 형식이며 하나의 파일에 인증서와 키를 포함할 수 있다.

  • 하나의 파일에 개인키, 여러 인증서를 모두 담을 수 있다. 주로 WINDOW 에서 주로 사용한다.

  • 파일에 암호화가 되어있어 접근 할려면 암호가 필요하다. 하나의 파일에 다 담겨있어 인증서 적용, 이전에 용이하다.

톰캣 SSL 인증서는 안정성을 우선으로 생각하여 PEM 으로 선택하였다.

PFX, PEM 둘 다 톰캣을 지원하지만 PEM 이 호환성이 높다고 하고 PFX 가 WINDOW 에서 주로 사용되어진다하여 안정성을 고려해 PEM 을 선택했다.

웹 방화벽은 IIS 서버 였기에 PFX 파일을 사용했다.

IIS 방화벽 인증서 설정은 간단하다.

IIS 관리자 에 들어가서 서버 인증서에 PFX 파일과 암호를 입력하면 된다. 거기다 방화벽 인바운드 규칙에 443(HTTPS 기본 포트)를 열어주면 끝이다.

톰캣에선 conf 폴더 안에 server.xml 파일을 수정해야한다.

<Connector port="443" protocol="HTTP/1.1"
           maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
        <Certificate certificateKeyFile="파일 경로/newkey.pem"
                     certificateFile="파일 경로/cert.pem"
                     certificateChainFile="파일 경로/DigiCertCA.pem"/>
    </SSLHostConfig>
   
</Connector>

가장 햇갈렸던 것은 각 파일이 무엇을 의미하는지를 모르니 어디에 경로설정을 해야할지 였다.

그걸 알기위해 각 파일을 모두 복호화 하여 해당 파일이 어떤건지 알게되었다. 복호화에는 openssl 을 사용하였다.

별거 아닌데 구글링 했을땐 각자 방법이 다 다르고 톰캣 버젼이 다르다보니 몇시간 동안 이것저것 바꾸다가 찾게되었다. 필자의 톰캣은 10.1 버젼이다.

대부분 코드는 SSLHostConfig 없이 Connector 안에 각 경로를 입력해주는 방식으로 나와있는데 그렇게하면 필자 같은 경우 해당 파일 인식이 안됬다.

그리고 SSL 인증서는 인증서 마다 각자 고유의 등록된 주소가 있는데 해당 주소로 들어갈때 HTTPS 가 적용된다는 것 이다.

그렇기에 server.xml 의 defaultHost, Hostname 을 해당하는 주소로 애플리케이션 기본 주소를 변경하여야 정상적으로 호스팅 된다.

Last updated