sql >> Database teknologi >  >> RDS >> Mysql

Hvordan opretter man forbindelse til en ekstern MySQL-database via SSL ved hjælp af Play Framework?

Forudsat at du allerede har CA-certifikatopsætningen til MySQL-serveren (hvilket er tilfældet, når du bruger Amazon RDS), er der et par trin til at få dette til at fungere.

Først skal CA-certifikatet importeres til en Java KeyStore-fil ved hjælp af nøgleværktøj , som følger med JDK. KeyStore vil i dette tilfælde indeholde alle de CA-certifikater, vi ønsker at stole på. For Amazon RDS kan CA-certifikatet findes her . Med mysql-ssl-ca-cert.pem i din arbejdsmappe, kan du køre følgende kommando:

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

Hvilket vil skabe en ny Java KeyStore-fil kaldet truststore.jks efter at have bedt dig om at indtaste en KeyStore-adgangskode og spørge, om du vil have tillid til certifikatet (ja, det gør du). Hvis du allerede har en truststore-fil, kan du køre den samme kommando og erstatte truststore.jks med stien til din eksisterende KeyStore (du bliver i stedet bedt om adgangskoden til den eksisterende KeyStore). Jeg plejer at placere truststore.jks i min conf bibliotek.

For det andet i application.conf du skal tilføje et par JDBC URL-parametre til databasens URL:

verifyServerCertificate=true - Nægt at oprette forbindelse, hvis værtscertifikatet ikke kan verificeres.

useSSL=true - Opret forbindelse ved hjælp af SSL.

requireSSL=true - Nægt at oprette forbindelse, hvis MySQL-serveren ikke understøtter SSL.

For eksempel, hvis din aktuelle database-URL er:

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

Så skulle det nu være:

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

Til sidst er der et par kommandolinjeindstillinger, der skal videregives, når Play-serveren startes for at konfigurere den truststore, som MySQL-Connector/J vil bruge. Forudsat min truststore.jks filen er placeret i conf bibliotek, og adgangskoden er password , ville jeg starte min server (i dev-tilstand) sådan her:

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

Ud over dette vil jeg også gerne sørge for, at det er umuligt at oprette forbindelse til databasen uden at bruge SSL, bare hvis mulighederne på en eller anden måde bliver rodet sammen på applikationsniveau. For eksempel hvis db.default.user=root , når du er logget ind som root i MySQL-serveren skal du køre følgende forespørgsler:

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


  1. Sådan sletter du dubletter i MySQL-tabel

  2. Praktisk grænse for længden af ​​SQL-forespørgsel (specifikt MySQL)

  3. Sådan angives en fane i en postgres frontend COPY

  4. Hvordan fungerer det at hente data fra SQL Server til SqlDataReader?