본문 바로가기
프로그래밍/네트워크, 보안

Windows에서 TOMCAT에 개발용으로 SSL 적용하기

by pentode 2018. 4. 21.

사이트에 SSL을 적용하려면 인증기관으로부터 인증서를 발급받아 웹서버에 설치해야 합니다. 개발용으로 자신이 인증기관이 되어 인증서를 발급하여 Tomcat에 적용하는 방법을 알아봅니다.



1. openssl 설치하기


키와 인증서를 만들기 위해서 openssl을 설치합니다. 다음 사이트에서 자신의 PC에 맞는 파일을 다운 받습니다. 이 글에서는 윈도우에서 테스트하므로 openssl-0.9.8k_X64.zip 파일 다운로드 받았습니다.


https://code.google.com/archive/p/openssl-for-windows/downloads


다운 받은 파일은 압축을 풀어서 적당한곳에 복사해두면 됩니다. 여기에서는  D:\util\openssl-0.9.8k_X64 에 설치하였습니다. D:\util\openssl-0.9.8k_X64\bin 폴더 PATH 에 추가하면 편리하게 사용할 수 있습니다.



2. 인증기관(CA, Certificate Authority)


공인인증기관이 아닌 내가 인증기관처럼 작업을 해야 하므로 인증기관용 개인키를 먼저 만들고, 웹브라우저에 설치될 루트 인증서도 만듭니다. 공인인증기관의 루트 인증서와 중간 인증서는 이미 웹브라우저에 설치되어 있으므로 바로 인증이 되는 것입니다.


openssl 명령을 실행하기 위해서 명령창을 관리자 권한으로 실행합니다. 관리자 권한이 아니면 unable to write 'random state' 오류가 발생할 수 있습니다.



2.1. CA가 사용할 RSA  key 쌍(public, private key)을 만들기


2048bit 개인키를 생성하는데, 분실에 대비해서 AES256으로 암호화 합니다. 그러므로 암호를 잊어버리면 개인키를 사용할 수 없게 됩니다. 암호화 하지 않으려면 -aes256 옵션을 빼고 만들면 됩니다. 여기서는 D:\cert 폴더를 만들고 그곳에서 작업을 합니다.


D:\cert>openssl genrsa -aes256 -out rootca_private.key 2048




테스트용 이므로 암호는 적당히 넣으면 되겠습니다. 잊어 먹으면 진행이 안되니 잘 적어두기 바랍니다. D:\cert\rootca_private.key 파일이 생성되었습니다.



※ 참고 : 개인키로 공개키를 직접 만드는 방법 입니다.

D:\cert>openssl rsa -in rootca_private.key -out rootca_public_key.pem -pubout



2.2. 인증서 요청 파일 (.csr) 만들기


인증서를 발급받기 위해서는 나의 공개키와 도메인 정보를 담은 .csr 파일을 만들어서 인증기관에 보내게 되는데, 여기서는 내가 인증기관이 되어 인증서를 발급하여야 하므로 인증기관의 공개키를 나의 개인키로 서명하여 만들게 됩니다.


D:\cert>openssl req -new -key rootca_private.key -out rootca.csr -config D:\util\openssl-0.9.8k_X64\openssl.cnf




- Enter pass phrase for rootca_private.key: 에는 개인키 비밀번호를 입력합니다.

- A challenge password[]: 와 An optional company name []: 은 엔터만 치고 넘어갑니다.

- rootca.csr 파일이 만들어졌습니다.



2.3. 10년짜리 self-signed 인증서 만들기


내가 인증기관이므로 .csr 파일을 나의 인증기관 개인키로 서명합니다. X.509 버전 3 인증서를 만듭니다.


D:\cert>openssl x509 -req -days 3650 -extensions v3_ca -set_serial 1 -in rootca.csr -signkey rootca_private.key -out rootca.crt




- Enter pass phrase for rootca_privatge.key: 에는 인증기관 개인키 비밀번호를 입력합니다.

- rootca.crt 파일이 생성되었습니다. 이것이 루트 인증서 입니다.

- 다음 명령으로 인증서 내용을 확인할 수 있습니다.

  D:\cert>openssl x509 -text -in rootca.crt




- 인증기관의 공개키가 포함된 인증서를 확인할 수 있습니다.



3. 웹서버를 위한 인증서를 생성합니다.


위에서 인증기관에 필요한 것들이 준비가 되었습니다. 이제 웹서버에 필요한 키와 인증서를 생성합니다. 생성 방법은 위에서 작업한 것과 거의 비슷한 과정을 거치게 됩니다.



3.1 웹서버를 위한 개인키 만들기


D:\cert>openssl genrsa -aes256 -out localhost_private.key 2048




- 개인키 비밀번호는 잊어먹지 않도록 주의합니다.

- localhost_private.key 파일이 생성되었습니다.



3.2. 인증서 요청파일(.csr) 만들기


인증서 발급을 위한 .csr 파일을 생성합니다.


D:\cert>openssl req -new -key localhost_private.key -out localhost.csr -config D:\util\openssl-0.9.8k_X64\openssl.cnf




- Enter pass phrase for localhost_private.key: 에는 개인키 비밀번호를 입력합니다.

- Common Name(eg, YOUR name) []: 에는 도메인명 또는 hostname을 입력합니다.

- A challenge password[]: 와 An optional company name []: 은 엔터만 치고 넘어갑니다.

- localhost.csr 파일이 만들어졌습니다.



3.3. 5년짜리 localhost용 SSL 인증서 발급하기(CA 개인키로 서명)


D:\cert>openssl x509 -req -days 1825 -extensions v3_user -in localhost.csr -CA rootca.crt -CAcreateserial -CAkey rootca_private.key -out localhost.crt




- Enter pass phrase for rootca_privatge.key: 에는 인증기관 개인키 비밀번호를 입력합니다.

- localhost.crt 파일이 생성되었습니다. 이것이 웹서버용 인증서 입니다.



4. Tomcat용 인증서 파일 생성


인증서와 웹서버용 개인키를 이용해서 Tomcat용 keystore를 생성합니다.


D:\cert>openssl pkcs12 -export -in localhost.crt -inkey localhost_private.key -out keystore -name "localhost cert"




- (-name) 옵션은 keystore의 alias 가 됩니다.

- Enter pass phrase for localhost_private.key: 에 웹서버용 개인키 비밀번호를 입력합니다.

- Enter Export Password: 에는 키스토어 비밀번호를 입력합니다.

- Verifying - Enter Export Password: 에는 키스토어 비밀번호를 입력합니다.

- keystore 파일이 만들어 졌습니다.



5. Tomcat 설정


server.xml 파일이 https 설정을 추가하고, 실행합니다.


<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"

           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

           keystoreFile="D:/cert/keystore" keystorePass="keystorepwd"

           clientAuth="false" sslProtocol="TLS" />





6. 웹 브라우저로 https://localhost:8443/pentode 를 호출한 결과 입니다.




웹서버로 부터 받은 인증서를 보증 해줄 인증기관의 인증서가 웹브라우저에는 없으므로 신뢰할 수 없다고 나옵니다. 추가정보를 클릭하고 억지로 실행할 수 있습니다.



7. 사설 root 인증서 설치하기


- IE 웹 브라우저에서  도구 -> 인터넷 옵션 -> 내용 -> 인증서를 클릭합니다.

- 신뢰할 수 있는 루트 인증기관 탭에서 "가져오기" 를 실행하여 앞에서 만든 rootca.crt 를 가져옵니다.




- 웹브라우저로 요청하면 에러 없이 페이지가 열립니다.




이것으로 개발, 테스트용으로 Tomcat 에 사설 인증서를 설치하는 방법을 알아보았습니다.


반응형