[java] Axis2와 SSL/TLS

Axis2는 Apache Software Foundation에서 개발한 웹 서비스 프레임워크입니다. 이 프레임워크를 사용하여 안전한 통신을 위해 SSL/TLS(Transport Layer Security)를 구성할 수 있습니다. SSL/TLS는 네트워크 통신에 암호화와 인증을 적용하여 보안을 강화하는 프로토콜입니다. 이 글에서는 Axis2 웹 서비스에 SSL/TLS를 적용하는 방법에 대해 알아보겠습니다.

1. SSL/TLS 인증서 생성

먼저 SSL/TLS 인증서를 생성해야 합니다. 인증서는 보안 접속을 위해 사용자의 신뢰를 증명하기 위한 전자 문서입니다.

다음 명령어를 사용하여 OpenSSL을 이용하여 인증서를 생성할 수 있습니다.

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

위 명령어를 실행하면 비밀 키인 server.key와 인증서 신청인 서명(server.csr)이 생성됩니다.

2. SSL/TLS 인증서 발급

인증 기관(CA)에게 생성한 인증서를 제출하여 인증서를 발급받아야 합니다. 이 과정은 인증서를 얻는 신뢰할 수 있는 기관으로부터 실제 서비스의 독립성을 보장받기 위해 필요합니다.

  1. SSL/TLS 인증서 설치

인증 기관으로부터 발급받은 인증서를 설치해야 합니다. 이 과정은 Axis2에서 SSL/TLS를 사용하여 웹 서비스에 안전한 연결을 설정하는 데 필요합니다.

Axis2 설정 파일인 axis2.xml에서 다음과 같이 SSL/TLS 설정을 추가합니다.

<transportReceiver name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLListener">
   <parameter name="port" locked="false">8443</parameter>
   <parameter name="non-blocking" locked="false">true</parameter>
   <parameter name="bind-address" locked="false">localhost</parameter>
   <parameter name="ws" locked="false">true</parameter>
   <parameter name="httpGetProcessor" locked="false">org.wso2.carbon.transport.nhttp.api.PassThroughNHttpGetProcessor</parameter>
   <parameter name="https.protocols">SSLv3,TLSv1,TLSv1.1,TLSv1.2</parameter>
   <parameter name="keystore" locked="false">repository/resources/security/wso2carbon.jks</parameter>
   <parameter name="keystorePass" locked="false">wso2carbon</parameter>
   <parameter name="clientAuth" locked="false">false</parameter>
   <parameter name="sslProtocol" locked="false">TLS</parameter>
   <parameter name="sslVerifyClient" locked="false">require</parameter>
   <parameter name="proxyPort">80</parameter>
   <parameter name="proxyHost">localhost</parameter>
   <parameter name="HttpsKeyStore">repository/resources/security/wso2carbon.jks</parameter>
   <parameter name="HttpsKeyStorePass">wso2carbon</parameter>
   <parameter name="HttpsTrustStore">repository/resources/security/client-truststore.jks</parameter>
   <parameter name="HttpsTrustStorePass">wso2carbon</parameter>
   <parameter name="responseCode">200</parameter>
</transportReceiver>

위 설정에서 keystorekeystorePass는 SSL/TLS 인증서와 비밀 키의 경로와 암호를 설정하는 부분입니다. 즉, 인증서를 경로에 맞게 설정하고, 비밀 키의 암호를 입력해야 합니다.

  1. Axis2 웹 서비스에 SSL/TLS 적용

Axis2 웹 서비스에 SSL/TLS를 적용하려면 Axis2 클라이언트 코드에 SSL/TLS 연결 설정을 추가해야 합니다. 이는 클라이언트가 서버와의 통신에 SSL/TLS 암호화를 사용하여 안전한 통신을 할 수 있도록 해줍니다.

아래는 Java Axis2 클라이언트에서 SSL/TLS를 사용하기 위한 코드 예시입니다.

System.setProperty("javax.net.ssl.trustStore", "client-truststore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryPath, null);
MyServiceStub stub = new MyServiceStub(ctx, "https://localhost:8443/axis2/services/MyService");

// 웹 서비스 호출 코드 작성

위 코드에서 javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword는 클라이언트의 신뢰할 수 있는 인증서 저장소(trust store)와 비밀 키의 암호를 설정합니다.

  1. 테스트 및 디버깅

위의 모든 단계를 마치고 Axis2 웹 서비스를 테스트하고 디버깅할 수 있습니다. 필요에 따라서는 로그 설정을 변경하여 오류 메시지를 확인하고, 문제가 있는 경우에는 해당 문제를 해결할 수 있습니다.

이와 같이 Axis2와 SSL/TLS를 사용하여 안전한 통신을 구성할 수 있습니다. 웹 서비스의 보안 요구 사항에 맞게 SSL/TLS를 적용하여 데이터의 안전한 전송을 보장할 수 있습니다.

참고 자료