Let’s encrypt 의 경우 일반적인 apache / nginx 에서 사용이 가능한 pem 파일을 생성 한다.
때문에 tomcat 에서 사용을 하기 위해서는 jks 로의 변환을 해서 org.apache.coyote.http11.Http11NioProtocol 프로토콜로 사용을 하거나
apr 및 tomcat-native 설치 하여 org.apache.coyote.http11.Http11AprProtocol 을 사용할 수 있다.
먼저 pem 파일을 jks 로 만드는 스크립트 이다. 중요한 부분은 18~22 줄이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash LETSENCRYPT_PATH="/etc/letsencrypt" PASSPHRASE="P@$$W0RD" # 파서패스 - 변경 하여 사용한다. if [ -z $1 ];then echo -e "\e[32m" echo -e $(find $LETSENCRYPT_PATH/live -maxdepth 1 -type d ! -name live|awk -F/ '{print $NF}'|paste -s -d " ") echo -e "\e[31;1minput url. \e[33m~]# ./pem2jks.sh [URL] \e[32m" echo -e "\e[0m" exit 1 fi if [ ! -d $LETSENCRYPT_PATH/live/$1 ];then echo -e "\e[31;1mcan't found certifcate input correct url.\e[0m" exit 1 else rm -f ${1}.jks openssl pkcs12 -export -in $LETSENCRYPT_PATH/live/${1}/cert.pem -inkey $LETSENCRYPT_PATH/live/${1}/privkey.pem \ -out ./${1}.p12 -name tomcat -CAfile chain.pem -caname root -password pass:$PASSPHRASE > /dev/null 2>&1 keytool -importkeystore -srckeystore ./${1}.p12 -destkeystore ./${1}.jks -deststoretype pkcs12 -alias tomcat \ -deststorepass $PASSPHRASE -srcstorepass $PASSPHRASE > /dev/null 2>&1 keytool -import -trustcacerts -alias root -file ${1}/chain.pem -keystore ./${1}.jks -storepass $PASSPHRASE > /dev/null 2>&1 rm -f ./${1}.p12 fi unset LETSENCRYPT_PATH PASSPHRASE exit 0 |
이후 server.xml 설정에서 아래와 같이 설정하여 https 를 활성화 할 수 있다.
1 2 3 4 |
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="150" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/폴더/인증서.jks" keystorePass="파서패스" clientAuth="false" sslProtocol="TLS" /> |
다른 방법으로 Http11AprProtocol 프로토콜을 사용하여 pem 파일을 jks 로 변환 없이 사용할 수 있다.
또한 apr 프로토콜을 사용할하고 tomcat 8.5 혹은 tomcat 9 의 경우 http/2 를 지원 한다.
활성화 하기 위해서는 tomcat-native 을 설치해야 한다.
1 |
yum install tomcat-native |
server.xml 에서는 아래와 같이 설정 한다.
1 2 3 4 5 6 7 8 9 10 |
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" acceptCount="10" enableLookups="false"> <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="/폴더/키파일.key" certificateFile="/폴더/인증서.pem" certificateChainFile="/폴더/루트체인.pem" type="RSA" certificateKeyPassword="파서패스" /> </SSLHostConfig> </Connector> |