복붙노트

[SCALA] 어떻게 플레이 프레임 워크를 사용하여 SSL을 통해 원격 MySQL 데이터베이스에 연결하는?

SCALA

어떻게 플레이 프레임 워크를 사용하여 SSL을 통해 원격 MySQL 데이터베이스에 연결하는?

나는 원격 MySQL 데이터베이스에 의해 뒷받침 분산 환경에서 응용 프로그램을 재생 배포합니다. 특히, 응용 프로그램은 Heroku가에서 호스팅되는, (이 정말 원격 데이터베이스 연결에 적용하지만) 데이터베이스 아마존 RDS에 있습니다. 데이터베이스는 단지 로컬 호스트에 아니기 때문에, 나는 원격 MySQL의 연결 보안을 위해 SSL을 통해 이루어지는 것이 원합니다.

신뢰에 대한 CA 인증서를 감안할 때, 나는 SSL을 통해 MySQL 서버에 연결하는 재생 응용 프로그램을 구성하는 방법, 호스트 인증서를 검증 할 수있는 경우에만?

현재 데이터베이스 구성으로이 가정 :

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. ==============================

    1.이미 (아마존 RDS를 사용할 때의 경우) MySQL 서버의 CA 인증서 설치를 가정하고,이 일을 할 수있는 몇 가지 단계가 있습니다.

    이미 (아마존 RDS를 사용할 때의 경우) MySQL 서버의 CA 인증서 설치를 가정하고,이 일을 할 수있는 몇 가지 단계가 있습니다.

    첫째, CA 인증서는 JDK와 함께 제공 키 도구를 사용하여 Java 키 스토어 파일로 가져올 수 있습니다. 이 경우 키 스토어는 우리가 신뢰하려는 CA 인증서를 모두 포함합니다. 아마존 RDS를 들어, CA의 인증서는 여기에서 찾을 수 있습니다. 작업 디렉토리에 mysql을-SSL-CA-cert.pem을 사용하여 다음과 같은 명령을 실행할 수 있습니다 :

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

    당신이 키 스토어 암호를 입력하라는 및 인증서 (예, 당신이)를 신뢰할지 여부를 묻는 후 truststore.jks라는 새로운 자바 키 스토어 파일을 만들 것이다. 이미 신뢰 파일이있는 경우, 당신은 (당신이 다음 대신, 기존의 키 스토어의 암호를 입력하라는 메시지가 표시됩니다) 기존의 키 스토어 경로로 truststore.jks 교체, 같은 명령을 실행할 수 있습니다. 나는 보통 내 conf 디렉토리에 truststore.jks을 배치합니다.

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

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

    useSSL 사실 = - 연결 SSL을 사용하여.

    MySQL 서버가 지원 SSL을 수행하지 않을 경우 연결을 거부 -가 requireSSL 사실을 =.

    예를 들어, 현재 데이터베이스 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"
    

    마지막으로, MySQL의 커넥터 / J가 사용하는 신뢰 저장소를 구성 할 수있는 플레이 서버를 시작할 때 통과해야하는 몇 가지 명령 줄 옵션이 있습니다. 가정 내 truststore.jks 파일은 conf 디렉토리에있는 암호는이 같은 (dev에 모드에서) 내 서버를 시작 것, 비밀번호입니다 :

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

    이 외에도, 나는 또한 같은 단지의 경우 옵션은 어떻게 든 응용 프로그램 수준에서 엉망, 그것은 SSL을 사용하지 않고 데이터베이스에 연결하는 것은 불가능되었는지 확인합니다. 예를 들어 만약 db.default.user = 루트, MySQL 서버의 루트, 다음 쿼리를 실행으로 로그인 후 때 :

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

    2.그냥 모든에 업데이트합니다.

    그냥 모든에 업데이트합니다.

    그냥 당신의 인생을 쉽게 누군가가 그냥이에 대한 bash는 스크립트를 만들었습니다 : https://gist.github.com/shareefhiasat/dabe5e96dbd7123c7b101aac1c0eca8a

  3. from https://stackoverflow.com/questions/27536380/how-to-connect-to-a-remote-mysql-database-via-ssl-using-play-framework by cc-by-sa and MIT license