[java] Jetty에서 SSL 지원 설정 방법

Jetty는 자바 기반의 경량 웹 서버이며, SSL (Secure Sockets Layer)을 지원합니다. 이 문서에서는 Jetty에서 SSL을 사용하기 위한 설정 방법을 안내하겠습니다.

1. SSL 인증서 생성

먼저, SSL 인증서를 생성해야 합니다. SSL 인증서는 공인된 인증기관(Certificate Authority)에서 발급 받을 수도 있지만, 테스트 환경에서는 자체 서명된 인증서를 생성해 사용할 수도 있습니다. 아래 명령을 사용하여 자체 서명된 인증서를 생성합니다.

keytool -genkeypair -alias mycertificate -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 -storepass password -keypass password -dname "CN=localhost, OU=MyOrganization, O=MyOrganization, L=MyCity, ST=MyState, C=MyCountry"

위 명령에서 keystore.jks는 인증서를 저장할 파일 이름이며, -storepass-keypass는 저장할 인증서의 패스워드를 나타냅니다. 인증서를 생성할 때 위에서 지정한 패스워드를 기억해 두세요.

2. Jetty 서버 설정 파일 수정

Jetty 서버의 설정 파일을 수정하여 SSL을 사용하도록 설정해야 합니다. 일반적으로 jetty.xml 파일을 찾을 수 있습니다. 해당 파일을 편집기로 열고, 아래와 같이 수정합니다.

<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
    <Set name="KeyStorePath">/path/to/keystore.jks</Set>
    <Set name="KeyStorePassword">password</Set>
    <Set name="KeyManagerPassword">password</Set>
</New>

<Call name="addConnector">
    <Arg>
        <New class="org.eclipse.jetty.server.ServerConnector">
            <Arg name="server"><Ref refid="Server"/></Arg>
            <Arg name="acceptors" type="int"><Property name="jetty.ssl.acceptors" deprecated="ssl.acceptors" default="-1"/></Arg>
            <Arg name="selectors" type="int"><Property name="jetty.ssl.selectors" deprecated="ssl.selectors" default="-1"/></Arg>
            <Arg name="factories">
                <Array type="org.eclipse.jetty.server.ConnectionFactory">
                    <Item>
                        <New class="org.eclipse.jetty.server.SslConnectionFactory">
                            <Arg name="next">http/1.1</Arg>
                            <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
                        </New>
                    </Item>
                    <Item>
                        <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                            <Arg name="config"><Ref refid="httpConfig"/></Arg>
                        </New>
                    </Item>
                </Array>
            </Arg>
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="8443" /></Set>
            <Set name="idleTimeout"><Property name="http.timeout" deprecated="idleTimeout" default="30000"/></Set>
            <Set name="name"><Property name="jetty.ssl.name" default="ssl"/></Set>
        </New>
    </Arg>
</Call>

위 설정에서 /path/to/keystore.jks를 생성한 인증서 파일의 경로로 변경하고, password를 생성한 인증서의 패스워드로 변경합니다.

3. Jetty 서버 실행

이제 SSL을 지원하는 Jetty 서버를 실행할 준비가 되었습니다. 아래 명령을 사용하여 Jetty 서버를 실행합니다.

java -jar jetty-runner.jar --config jetty.xml [war 파일 경로]

위 명령에서 jetty-runner.jar는 Jetty 실행 파일의 경로를 나타냅니다. jetty.xml은 앞에서 수정한 Jetty 서버 설정 파일의 경로를 나타내며, [war 파일 경로]는 서비스할 웹 애플리케이션의 WAR 파일 경로를 나타냅니다.

Jetty 서버가 성공적으로 실행되면, HTTPS 포트(기본값은 8443)로 접속하여 SSL로 암호화된 웹 서비스를 확인할 수 있습니다.

참고 자료