Ich migriere unsere WordPress-Datenbank zu RDS, das auch von anderen Diensten in unserer Infrastruktur verwendet wird. Aber ich konnte keine Konfigurationsoption für finden wp-config.php
wo ich angeben könnte, dass SSL beim Herstellen einer Verbindung zum Server verwendet werden soll. Dazu bräuchte es auch einen Hinweis auf die Zertifizierungsstellendatei bereitgestellt von Amazon. Der App-Server, auf dem WordPress derzeit läuft, befindet sich außerhalb des AWS-Clusters.
Die Antworten, die ich finden konnte, waren ziemlich alt (ich verwende hier WordPress 4.2) und bieten nicht viel Anleitung.
Wie kann ich WordPress so konfigurieren, dass es Amazon RDS über eine SSL-Verbindung verwendet (unter Angabe des öffentlichen Schlüssels)?
Hatte die gleiche Frage. Zum Glück hatten einige andere Leute hier eine vernünftige Lösung vorgeschlagen: https://core.trac.wordpress.org/ticket/28625. End-to-End, hier ist, was ich getan habe, um SSL zum Laufen zu bringen:
1. Fügen Sie Folgendes zur WordPress-Datei wp-includes/wp-db.php hinzu. (mit Ausnahme der letzten 2 Zeilen, die nur als Referenz für den Einfügepunkt dienen)
//ADDED per https://core.trac.wordpress.org/ticket/28625
// call set_ssl if mysql client flag set and settings available
if ( $client_flags & MYSQL_CLIENT_SSL ) {
$pack = array( $this->dbh );
$call_set = false;
foreach( array( 'MYSQL_SSL_KEY', 'MYSQL_SSL_CERT', 'MYSQL_SSL_CA',
'MYSQL_SSL_CAPATH', 'MYSQL_SSL_CIPHER' ) as $opt_key ) {
$pack[] = ( defined( $opt_key ) ) ? constant( $opt_key ) : null;
$call_set |= defined( $opt_key );
}
/* Now if anything was packed - unpack into the function.
* Note this doesn't check if paths exist, as per the PHP doc
* at http://www.php.net/manual/en/mysqli.ssl-set.php: "This
* function always returns TRUE value. If SSL setup is incorrect
* mysqli_real_connect() will return an error ..."
*/
if ( $call_set ) { // SSL added here!
call_user_func_array( 'mysqli_ssl_set', $pack );
}
}//END ADD - below is the point above which to insert this
if ( WP_DEBUG ) {
mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
2. Passen Sie Ihre WordPress wp-config.php-Datei an.
Füge die folgenden Zeilen in deiner wp-config.php-Datei hinzu und passe sie an. Sie können diese in der Entwicklung/Staging sowie in der Produktion testen, wenn Sie über mehrere Umgebungen verfügen.
define('DB_HOST', 'rds-yourserver-abcdefghi9j.us-west-1.rds.amazonaws.com');
define('MYSQL_CLIENT_FLAGS', MYSQL_CLIENT_SSL);//This activates SSL mode
define('MYSQL_SSL_CA', '/file/path/to/your/aws/rds-combined-ca-bundle.pem');
Beachten Sie, dass es 5 verfügbare MYSQL_SSL*-Einstellungen gibt, die Sie in Ihrer Konfiguration verwenden könnten, pro Code in Nr. 1 oben. Meine RDS-Verbindung funktioniert über SSL nur mit der Option _CA.
3. Plausibilitätstest, dass Ihre Verbindung verschlüsselt ist.
Fügen Sie eine Schnelltestdatei hinzu, um zu zeigen, ob die aktuelle WordPress-Verbindung SSL verwendet oder nicht. Erstellen Sie eine Beispieldatei wie diese namens test.php und legen Sie sie in Ihrem WordPress-Stammverzeichnis oder an einem anderen Ort ab, auf den Sie über das Internet zugreifen können. Vergessen Sie nicht, diese Datei nach dem Testen zu entfernen.
<?php
require( dirname( __FILE__ ) . '/wp-blog-header.php' ); //EDIT THIS PATH SO IT IS CORRECT FOR YOUR test.php file relative to the wp-blog-header.php file
global $wpdb;
$row = $wpdb->get_row( "SHOW STATUS LIKE 'Ssl_cipher'" );
var_dump($row);
/*
If you are connected over SSL this should output something like:
object(stdClass)#116 (2) { ["Variable_name"]=> string(10) "Ssl_cipher" ["Value"]=> string(10) "AES256-SHA" }
If you are NOT connected over SSL this should output something like:
object(stdClass)#116 (2) { ["Variable_name"]=> string(10) "Ssl_cipher" ["Value"]=> string(10) "" }
*/
?>
4. Stellen Sie Ihre Verbindung bereit und testen Sie sie
Stellen Sie Ihre Datei changes & test.php in Ihrer WordPress-Installation bereit und starten Sie Ihren Webserver nach Bedarf neu. Ich benutze Apache, also laufe ich
sudo apachectl restart
Für alle, die Redhat 7 + Apache 2.4 + PHP 7 verwenden. Ich hatte das gleiche Problem, also fügte ich unten zwei Zeilen in die wp-config.php ein, wie oben erwähnt.
define(‘MYSQL_CLIENT_FLAGS’, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT ); // Sie benötigen dies für PHP 7. define(‘MYSQL_SSL_CA’, ‘/var/www/BaltimoreCyberTrustRoot.crt.pem’);
Allerdings konnte ich mich immer noch nicht mit der DB verbinden…
So rief ein Typ an und er bat mich, Selinux zu deaktivieren, indem er den folgenden Befehl ausführte:
setsebool -P httpd_can_network_connect_db 1
Ich sagte, Alter, ich habe SELinux bereits deaktiviert, warum muss ich das noch einmal ausführen? Er schrie zu mir: ICH WEISS NICHT, LAUFE ES EINFACH!
Also habe ich httpd neu gestartet und es hat funktioniert, ohne wp-db.php zu ändern … fragen Sie mich nicht warum, da ich auch keine Ahnung von der Logik dahinter habe.