tomcat 으로만 구동중인(톰캣만 가지고 80포트로 운영중인)서버에 ssl 인증서 적용하기

(인증서는 코모도같은 인증서발급업체에서 사가지고 csr,key파일까지 발급받은상태임)


구글링 해보면 많은곳에서 keytool 명령어를 이용하여 톰캣에 ssl인증서 적용하는방법을 많이 알려준다.

keytool이란 

Java provides a relatively simple command-line tool, called keytool, which can easily create a "self-signed" Certificate. Self-signed Certificates are simply user generated Certificates which have not been signed by a well-known CA and are, therefore, not really guaranteed to be authentic at all. While self-signed certificates can be useful for some testing scenarios, they are not suitable for any form of production use.


Java는 키툴이라고 하는 비교적 간단한 명령줄 도구를 제공하여 "자체 서명" 인증서를 쉽게 만들 수 있습니다. 자체 서명된 인증서는 단순히 사용자가 생성한 인증서이며, 잘 알려진 CA에서 서명한 것이 아니므로, 실제로 인증되지 않습니다. 자체 서명된 인증서는 일부 테스트 시나리오에 유용할 수 있지만 어떤 형태의 운영 사용에도 적합하지 않습니다.


톰캣 공홈에서 퍼옴  https://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html


설명만 가지고는 comodo나 rapid 같은 신뢰할 수 있는 인증기관에서 발급해준게 아닌 개인이 생성한 인증서에 대해서만이라고 설명돼있는데 공홈 설명보면 그 뒤로 

Importing the Certificate

Now that you have your Certificate you can import it into you local keystore. First of all you have to import a so called Chain Certificate or Root Certificate into your keystore. After that you can proceed with importing your Certificate.


Download a Chain Certificate from the Certificate Authority you obtained the Certificate from.

For Verisign.com commercial certificates go to: http://www.verisign.com/support/install/intermediate.html

For Verisign.com trial certificates go to: http://www.verisign.com/support/verisign-intermediate-ca/Trial_Secure_Server_Root/index.html

For Trustcenter.de go to: http://www.trustcenter.de/certservices/cacerts/en/en.htm#server

For Thawte.com go to: http://www.thawte.com/certs/trustmap.html

Import the Chain Certificate into your keystore

keytool -import -alias root -keystore <your_keystore_filename>

    -trustcacerts -file <filename_of_the_chain_certificate>

And finally import your new Certificate

keytool -import -alias tomcat -keystore <your_keystore_filename>

    -file <your_certificate_filename>


위와같은 내용이 있는데 즉 keytool 을 이용해서도 인증기관에서 발급된 인증서로 적용할 수 있다는 내용이다. 실제로도 정말많이. 뭐 톰캣은 거의 대부분 keytool로 하고 있다.


keytool을 이용한 인증서 적용은 구글링에서 많이 나오니까 패쓰하고.


여기서는 ssl.key , ssl.crt, 와 인증업체에서 제공하는 체인인증서만 가지고(즉 keytool을 이용하지 않고) 아파치에 적용하는것처럼 톰캣에 적용할꺼다.


그럴려면 tomcat 에 apr라이브러리가 들어가있어야 하낟. 


apr이란 .... 잘 모르겠다 그냥 많은 기능이 포함된 라이브러리(https://kenu.github.io/tomcat70/docs/apr.html 여기보면 아파치 2점대 핵심 라이브러리라는데 근데 왜 아파치 컴파일할 때 apr을 추가로 컴파일해야하지?)이고 이 라이브러리가 톰캣에도 들어가 있으니까 아파치에 인증서 설정하는것마냥 톰캣에도 할 수 있다라고 이해할란다.


하 그냥 이러지말고 애초부터 keytool로 할껄 그랬다.


여튼 다시 정리하자면..


jsse 환경에서는 keytool을 이용하여 인증서를 적용

apr 환경에서는 기존 아파치에 적용하는것마냥 인증서를 적용 인데(톰캣에 apr 라이브러리를 사용한 환경이냐는거지 apr 환경이라는게 아파치-톰캣이 연동된 환경을 말하는게 아니다.)


톰캣에 apr 라이브러리 들어가있으니 위에 말한것처럼 나는 keytool 을 이용하지 않고 아파치에 설정하듯이 하겠다.


엄청 쉽다.

    <Connector  

        port="443" SSLEnabled="true" 

        scheme="https" secure="true" sslProtocol="TLS" SSLEngine="on"

        SSLPassword="비밀번호" 

        SSLCertificateKeyFile="conf/ssl/ssl.key"

        SSLCertificateFile="conf/ssl/ssl.crt"

        SSLCertificateChainFile="conf/ssl/chain_ssl.crt"

        SSLCACertificateFile="conf/ssl/chain_all_ssl.crt"

    />


적당한곳에다가 위내용 넣고 재시작하면된다고 한다.

근데 안된다. 그래서 결국 keytool로 했다. 하 진작에 keytool로 할껄 2시간 버렸네 




ps.

트래픽이 많이나오는 무거운 웹서버에서는 keytool 이용한 jsse 방식보다는 apr 방식에다가 인증서를 적용하는게 퍼포먼스와 안정성이 더 좋다라는 내용(이건 구글링)이 있는데

내 결론은 

그냥 편한거 하는게 좋은거같다. 안정성이나 뭐 퍼포먼스가 더 좋다는데...옛날에야 하드웨어가 안좋으니 뭐 커널튜닝이니 뭐니 퍼포먼스에 신경썼겠지만 요새는 하드웨어가 워낙 짱짱한데.. 인증서 적용하는데 그런거까지 신경쓸필요있을까 ? 



  1. 123123 2020.02.12 16:11

    오랜만에 보다가 더 좋은 글 발견하여 코멘트 남긴다
    https://xinet.kr/?p=1674

+ Recent posts