본문

Jetty에서 SSL(HTTPS) 사용 하기

이전에 기초 Jetty 설치와 실행, 그리고 서블릿 작성(on Windows) 라는 글을 작성했었다. 그당시에는 7버전이었는데 어느새 8버전이 출시가 되었다. 이번에 https 호출에 대한 테스트를 진행하기 위하여 새로 설치하고 SSL 설정을 하였고, 이를 정리하여 글을 올린다. 이 글은 Jetty 홈페이지의 How to configure SSL 을 토대로 작성되었다

JDK를 설치하고 시스템변수도 등록했고 이미 Jetty가 설치되었다고 가정하고(아니라면 맨 위 링크를 참조) 글을 진행한다. JDK내에는 keytool이라는 프로그램이 있어서 키와 인증서를 만들어서 자동으로 키 저장소에 저장을 해준다. 명령 프롬프트를 실행하고 다음 명령을 입력한다.

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

그러면 [그림 1] 과 같은 화면이 뜨게 되는데 구동만 되는것이 이 글의 목표이기 때문에 아무것도 입력 안하고 엔터만 계속 눌렀다. 만약 CA에서 인증서를 발급하는것까지 다루게 된다면 위에있던 How to configure SSL 링크를 참고하면 된다

위 과정을 모두 마쳤다면 이제는 jetty에서 ssl에 대한 설정을 해주어야 한다. jetty에서는 두개의 ssl connector(SslSocketConnector, SslSelectChannelConnector)가 있는데 SslSocketConnector는 jetty에서 제작된 SocketConnector와 java의 SslSocket을 기반으로 하고, SslSelectChannelConnector는 jetty에서 제작된 SelectChannelConnector와 java NIO의 SslEngine를 기반으로 한다. 이 둘의 차이는 Blocking/Nonblocking의 차이로서, 동시 접속수가 많은 경우에는 후자가 더욱 유리하다. 이 둘은 실행방법만 차이날 뿐, 설정은 동일하게 하면 된다. 

아무튼 c:\jetty\etc\jetty.xml으로 들어가서 set connectors라는 부분을 찾으면 이미 http 접속에 대한 설정이 되어있으며, 이 아래에 추가로 다음과 같이 설정해 주면 된다. 원문과 동일하게 설정했다가 클래스 경로가 맞지 않아 오류가 발생하여 서버를 시작하지 못할 경우에는 이를 org.eclipse.jetty.server.ssl.SslSocketConnector으로 적어주면 실행이 된다. SslSelectChannelConnector를 사용하고자 한다면 마찬가지로 org.eclipse.jetty.server.ssl.SslSelectChannelConnector를 적어주면 된다.

그리고 만약 https 포트를 8443으로 지정해주었다면 http 설정부분에서 <Set name="confidentialPort">8443</Set>를 지정해 줌으로서 http 프로토콜로 8443포트에 접속할경우 이를 자동으로 https 프로토콜록 변경하여 접속하게 해줄 수 있다. 이 모든 셋팅이 끝나고 https://localhost:8443 으로 접속하면 [그림 2] 와 같은 화면이 뜬다. 참고로 이 서버에 사용된 인증서는 공인 인증이 되지 않았으므로 처음 접속시에 경고문이 뜨고, 확인을 누르면 주소창에 신뢰할 수 없는 인증서를 가진 페이지라는 표시가 뜬다.

<Call name="addConnector">
  <Arg>
    <New class="org.eclipse.jetty.server.ssl.SslSocketConnector">
   <Set name="Port">8443</Set>
   <Set name="maxIdleTime">30000</Set>
   <Set name="keystore"><SystemProperty name="jetty.home" default="." />/etc/keystore</Set>
   <Set name="password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
   <Set name="keyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
   <Set name="truststore"><SystemProperty name="jetty.home" default="." />/etc/keystore</Set>
   <Set name="trustPassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
    </New>
  </Arg>
   </Call>

 


[그림 1, 2] keytool 사용 화면과 https로 접속 성공한 localhost의 화면

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.