2014-12-17 1 views
15

원격 응용 프로그램 데이터베이스를 사용하는 분산 환경에서 Play 응용 프로그램을 배포합니다. 특히, 응용 프로그램은 heroku에서 호스팅되며 데이터베이스는 Amazon RDS에 있습니다 (실제로는 모든 원격 데이터베이스 연결에 적용되지만). 데이터베이스가 localhost가 아니기 때문에 보안을 위해 SSL을 통해 원격 MySQL 연결이 이루어지기를 바랍니다.Play Framework를 사용하여 SSL을 통해 원격 MySQL 데이터베이스에 연결하는 방법은 무엇입니까?

신뢰할 수있는 CA 인증서가있는 경우 호스트 인증서를 확인할 수있을 때만 SSL을 통해 MySQL 서버에 연결하도록 Play 응용 프로그램을 구성하려면 어떻게해야합니까? 이미 MySQL 서버의 CA 인증서 설치 (아마존 RDS를 사용하는 경우이다),이를 만들기 위해 몇 가지 단계가 있다고 가정

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://url.to.database/test_db" 
db.default.user=root 
db.default.password="...." 
+1

참고 :이 프레임 워크를 재생하기 위해 특정 아닌, 일반적인 자바의 더/MySQL의 일 –

답변

26

:

현재 데이터베이스 구성으로이 가정 작업.

먼저 CA 인증서는 JDK와 함께 제공되는 keytool을 사용하여 Java 키 저장소 파일로 가져와야합니다. 이 경우 KeyStore에는 신뢰하려는 모든 CA 인증서가 포함됩니다. Amazon RDS의 경우 CA 인증서는 here입니다. 작업 디렉토리에 mysql-ssl-ca-cert.pem, 당신은 다음과 같은 명령을 실행할 수 있습니다 : 당신이 인증서를 신뢰하려면 당신이 키 스토어 암호를 입력하라는 메시지와 요청 후 truststore.jks라는 새로운 자바 키 스토어 파일을 만듭니다

keytool -import -alias mysqlServerCACert -file mysql-ssl-ca-cert.pem -keystore truststore.jks 

(예 , 너). 이미 truststore 파일이있는 경우, 동일한 명령을 실행하여 truststore.jks을 기존 KeyStore의 경로로 바꾸십시오 (대신 기존 KeyStore의 암호를 묻는 메시지가 표시됨). 나는 보통 conf 디렉토리에 truststore.jks을 배치한다.

둘째, application.conf에서 당신은 데이터베이스 URL에 몇 JDBC URL 매개 변수를 추가해야합니다

verifyServerCertificate=true이 - 호스트 인증서를 확인할 수없는 경우 연결을 거부.

useSSL=true - SSL을 사용하여 연결합니다.

requireSSL=true - MySQL 서버가 SSL을 지원하지 않는 경우 연결을 거부합니다.

예를 들어, 현재 데이터베이스 URL 인 경우 :

다음
db.default.url="jdbc:mysql://url.to.database/test_db" 

은 지금해야합니다 :

db.default.url="jdbc:mysql://url.to.database/test_db?verifyServerCertificate=true&useSSL=true&requireSSL=true" 

마지막 때 통과해야하는 몇 가지 명령 줄 옵션이 있습니다 Play 서버를 시작하여 truststore를 구성합니다. MySQL-Connector/J가 사용합니다. 가정 내 truststore.jks 파일은 conf 디렉토리에있는 암호는이 같은 (dev에 모드에서) 내 서버를 시작 것, password이다이 외에도

activator run -Djavax.net.ssl.trustStore="conf/truststore.jks" -Djavax.net.ssl.trustStorePassword="password" 

는 또한 만들 좋아 SSL을 사용하지 않고 데이터베이스에 연결할 수 없다는 점을 명심하십시오. 옵션이 어떻게 든 응용 프로그램 수준에서 엉망이 될 경우에 대비하십시오.

GRANT USAGE ON *.* TO 'root'@'%' REQUIRE SSL; 
FLUSH PRIVILEGES; 
+2

필요가 없습니다에'MySQL 서버에 root로 로그인 할 때 예를 들어 db.default.user=root 경우, 다음, 다음 쿼리를 실행 FLUSH PRIVILEGES'를 'GRANT ...'후에 부여합니다. mysql. * 테이블을 직접 수정 한 경우에만이 작업을 수행하면됩니다. –

+0

정확히 내가 뭘 찾고있어, 고마워. – KGCybeX

관련 문제