안녕하세요 이정운 입니다.
모 고객사의 요구사항에 의해서 가능 여부를 급하게 테스트를 해보고 혹여나 다른 분들에게도 도움이 될까 테스트 내용을 공유드립니다.
요구사항 : Cloud 에 WAS 를 구성하고 기존 Legacy 에 DB 를 둘 예정인데 이를 보안적으로 보안하기 위한 구성(기존 App 변경 없이!)
구성 : WAS on Cloud --> (JDBC Call with SSL) --> TCP proxy service on IBM DataPower Gateway on Legacy -> DB on Legacy
#1) JDBC Call with SSL 을 위해서 MySQL DB 의 SSL 설정을 위한 key 생성 (예시)
MySQL 에 대한 SSL 설정을 위해서 기본적으로 필요한 key, cert 파일을 하단과 같이 openssl 을 이용해서 생성합니다.
(테스트 해보니 해당 파일은 가급적이면 mysql 설치 폴더에 위치해 두는 것이 편합니다. - 보안 제약이 있는듯)
openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 0
#2) MySQL 에 대한 SSL 설정 추가 및 변경
MySQL 환경 파일에서 SSL 설정을 위한 key, cert 파일 설정을 추가하고 서비스를 재시작하여 SSL 적용이 제대로 되었는지 확인합니다.
/etc/mysql/my.cnf
ssl-ca=/etc/mysql/cert.pem
ssl-cert=/etc/mysql/cert.pem
ssl-key=/etc/mysql/key.pem
sudo service mysql service restart
show variables like '%ssl%';
#3) SSL 을 통한 MySQL 접속 테스트 및 확인
하단의 구문을 이용 미리 만들어진 cert 를 가지고 SSL 접속을 수행하고 SSL 이 제대로 적용되어 있는지 확인합니다.
mysql --host=192.168.225.10 --ssl-ca=/etc/mysql/cert.pem -u test -p think
#4) IBM DataPower Gateway 에서 해당 요청을 DB 로 전달해줄 TCP Proxy Service 생성
하단과 같이 IBM DataPower Gateway 에서 TCP layer 측면으로 해당 요청을 DB 로 전달해줄 TCP Proxy service 를 생성합니다.
(참고로
일반적으로 보안에 사용되는 SSL/TLS 는 TCP/IP 위에서 동작합니다.(좀 더 정확히는 TCP/IP 와
Application 레이어 사이) 따라서, TCP Proxy service 는 일반 평문/비문 상관하지 않고 TCP/IP 레이어
요청을 그대로 proxy 할 수 있습니다.)
#5) WAS 를 통한 JDBC 연결
WAS 를 통해서 일반적인 JDBC 연결을 수행하는 샘플을 사용하는데 IP 와 Port 는 IBM DataPower 에서 사전에 만들어둔 TCP Proxy service 의 IP 와 Port 를 사용합니다.
단, 이때 하단과 같이 JDBC call 이 SSL 을 사용할 수 있도록 옵션을 추가할 수 있습니다. (MySQL 기준)
jdbc:mysql://192.168.225.10:3306/think?verifyServerCertificate=false&useSSL=true&requireSSL=true
저는 IBM WAS Liberty 서버를 활용해서 테스트를 진행했고 도움이 될까 IBM WAS Liberty 의 server.xml 설정을 같이 공유드립니다.
IBM WAS Liberty 의 server.xml
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>webProfile-7.0</feature>
<feature>localConnector-1.0</feature>
<feature>jaxws-2.2</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint host="*" httpPort="8080" id="defaultHttpEndpoint">
<accessLogging filepath="${server.output.dir}/logs/http_defaultEndpoint_access.log"/>
</httpEndpoint>
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<applicationMonitor updateTrigger="mbean"/>
<cdi12 enableImplicitBeanArchives="false"/>
<library id="MySQLLIB">
<fileset dir="C:\eclipse\wlp\usr\servers\defaultServer"
id="MySqlJDBC" includes="mysql-connector-java-5.1.42-bin.jar"/>
</library>
<dataSource id="mysqlds" jndiName="jdbc/mysqlDS" type="javax.sql.DataSource">
<jdbcDriver libraryRef="MySQLLIB"/>
<properties databaseName="think" portNumber="3333"
serverName="192.168.225.52" user="test" password="Passw0rd!"
URL="jdbc:mysql://192.168.225.52:3333/think?verifyServerCertificate=false&useSSL=true&requireSSL=true"/>
</dataSource>
<webApplication id="MySQLTest" location="MySQLTest.war" name="MySQLTest"/>
</server>
#6) 샘플 테스트
샘플 테스트를 수행해보면 정상적으로 DB 조회 및 결과를 확인 가능합니다.
추가적으로 packet 을 capture 할 수 있는 도구를 통해서 packet 을 들어다보면 SSL 로 보안화되어 혹여나 악의적으로 중간에 탈취 되어도 읽을 수 없는 것을 확인가능합니다.
#9) 참고자료
Creating a TCP Proxy service
Mysql ssl 설정 & JDBC 로 SSL 통신
Getting MySQL server to run with SSL
SSL/TLS 기본
'IBM - old > IBM APIC' 카테고리의 다른 글
[APIC]Serverless APIs With OpenWhisk and API Connect (0) | 2017.06.01 |
---|---|
[DataPower]Cloud 에 있는 WAS 와 Legacy 에 있는 DB 연결을 위한 IBM DataPower Gateway 보안 구성 (0) | 2017.05.29 |
[APIC]Mock Backend Services with User Defined Gateway Policies (0) | 2017.05.19 |
[APIC]IBM API Connect 관련 샘플 API 들 github 로 공유 (0) | 2017.04.17 |
[APIC]Make secure API calls in IBM API Connect (0) | 2017.03.25 |
댓글