분명히 당신은 tomcat 5.5 또는 6.0에 SSL을 설치해서, 그것도 사설인증서까지 잘 만들어서 쓰고 있었다.
그러던 어느날, 여느때와 같이 출근해서 톰캣을 올리고 웹브라우저로 접속을 하는 순간 “ssl_error_rx_record_too_long” 라는 오류가 화면아 나타나는 것을 확인하게 된다.
당신이 만약 IE 계열을 쓴다면 그냥 화면이 pending되는 현상을 한참 목격했을 것이고, 파이어폭스 유저라면 단방에 ssl_error_rx_record_too_long 오류를 토해내는 화면을 확인했을 것이다.
자, 그래서 원인을 찾아보려고 구글에다가 ssl_error_rx_record_too_long 라는 단어를 밀어넣어 본다.
99.99% 파이어폭스 플러그인과 관련된 기사다.
서너시간을, 아니 어쩌면 톰켓을 다 지우고 JDK까지 지우고 새로 설치했는데도 증상이 없어지지 않아서 하루이틀을 허비했을지도 모른다.
그러다 문득 깨닫는다. 얼마전에 톰캣 띄울때마다 뜨는 APR 라이브러리 관련 오류를 없애기 위해서 윈도우(어쩌면 Unix/Linux)용 tcnative-1.dll ( 또는 so ) 를 다운받아서 c:\windows\system32 따위의 디렉토리에 복사해 넣은 적이 있다는 것을. 게다가 윈도우용 tcnative-1.dll은 SSL도 함께 들어가 있다.
자 여기서 문제는 그냥 tomcat을 설치했을때를 기준으로 하는 SSL세팅과, 이놈의 tcnative-1의 SSL을 이용하는 경우의 configuration이 다르다는 것이다.
Tomcat 6.0 문서를 기준으로 (http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html), JSSE를 이용한 tomcat의 server.xml SSL설정은 다음과 같다.
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"/>
-->
APR 을 쓴다면
<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<!--
<Connector
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
SSLCertificateFile="/usr/local/ssl/server.crt"
SSLCertificateKeyFile="/usr/local/ssl/server.pem"
clientAuth="optional" SSLProtocol="TLSv1"/>
-->
이렇다.
삽질하다 정리차원에서 적는거라 언젠가 다시 한번 테스트해서 올려야겠지만, 일단 가장 먼저 해야 할 일은 tomcat을 내리고 그놈의 tcnative-1.dll 을 삭제한 다음 톰캣을 다시 띄우는 것.
원래대로 돌아간 당신의 웹 어플리케이션을 확인할 수 있을 것이다.(아니면 말고 –_-;;)
이 글이 당신의 야근/주말 삽질을 종료시켜주는데 기여하길 바라며 이만.
-P.S-
내 경우를 이야기하자면 분명 tcnative-1.dll을 windows\system32에도 넣어봤고 tomcat/bin에도 넣어봤으나 tomcat을 띄울때마다 APR이 없다는 메세지가 계속 나왔다. 그리고 한 일주일 다른 프로젝트를 하다가 ( with WindowXP 32bit version + Eclipse 갈릴레오 + WTP ) 다시 해당 프로젝트를 열었을때 문제가 발생했다.