[java] Apache ActiveMQ와 SSL/TLS 보안 설정

Apache ActiveMQ는 Java로 작성된 높은 성능의 오픈 소스 메시지 브로커입니다. SSL/TLS를 통해 통신을 암호화하는 것은 보안을 강화하는 중요한 단계입니다. 이번 블로그 포스트에서는 Apache ActiveMQ에서 SSL/TLS 보안을 설정하는 방법에 대해 알아보겠습니다.

SSL/TLS 인증서 생성

SSL/TLS 통신을 위해서는 인증서가 필요합니다. 자체 서명된 인증서를 생성하여 사용할 수도 있고, 신뢰할 수 있는 CA(Certificate Authority)로부터 발급 받은 인증서를 사용할 수도 있습니다. 여기서는 자체 서명된 인증서를 생성하는 방법을 설명하겠습니다.

  1. 먼저, JDK(Java Development Kit)를 설치해야 합니다.
  2. JDK가 설치되었다면, 다음과 같은 명령어를 사용하여 키스토어 파일을 생성합니다.
keytool -genkey -keyalg RSA -keystore broker.ks -storepass password -validity 365 -keysize 2048 -dname "CN=broker"
  1. 위의 명령어에서 -keystore는 키스토어 파일의 이름, -storepass는 키스토어의 비밀번호, -validity는 인증서의 유효 기간(일 수), -keysize는 RSA 키 크기, -dname은 인증서에 포함될 정보를 나타냅니다.
  2. 위의 명령어를 실행하면, broker.ks라는 키스토어 파일이 생성됩니다.

ActiveMQ에 SSL/TLS 설정 추가하기

  1. ActiveMQ를 설치한 디렉토리로 이동합니다.
  2. conf/activemq.xml 파일을 엽니다.
  3. <transportConnectors> 엘리먼트 안에 다음과 같이 SSL/TLS 연결을 추가합니다.
<transportConnector name="ssl" uri="ssl://0.0.0.0:61617?needClientAuth=true"/>
  1. <sslContext> 엘리먼트 안에 SSL/TLS 설정 정보를 추가합니다.
<sslContext>
    <sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="password"/>
</sslContext>

위의 설정에서 keyStore 속성은 앞서 생성한 키스토어 파일의 경로를, keyStorePassword 속성은 키스토어의 비밀번호를 나타냅니다.

ActiveMQ 서버 시작하기

이제 SSL/TLS 설정이 완료되었으므로 ActiveMQ 서버를 시작할 수 있습니다. 다음 명령어를 실행하여 ActiveMQ를 시작합니다.

./bin/activemq start

클라이언트 설정

ActiveMQ 서버에 연결할 클라이언트도 SSL/TLS 설정을 해주어야 합니다. 클라이언트의 프로듀서나 컨슈머에서 다음과 같은 설정을 추가해주어야 합니다.

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("ssl://localhost:61617");
factory.setTrustStore("client.ts");
factory.setTrustStorePassword("password");

위의 코드에서 ssl://localhost:61617은 ActiveMQ 서버의 SSL/TLS 연결 주소를 나타냅니다. setTrustStoresetTrustStorePassword 메서드를 통해 클라이언트의 신뢰할 수 있는 CA의 키스토어 파일과 비밀번호를 설정합니다.

마무리

이제 Apache ActiveMQ에서 SSL/TLS 보안 설정을 완료하였습니다. 이를 통해 메시지 브로커와 클라이언트 간의 통신이 안전하게 암호화될 것입니다. SSL/TLS는 중요한 보안 요소이므로, 실제 배포 환경에서는 신뢰할 수 있는 CA로부터 인증서를 발급 받는 것을 권장합니다.

참고 자료