Verwendung von Amazon RDS mit WordPress über SSL

Lesezeit: 4 Minuten

Benutzer-Avatar
Jai Pandya

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

  • Dies funktionierte perfekt auf Microsoft Azure und stellte eine Verbindung zu Amazon RDS als Alternative zu ClearDB her.

    – einzigartiglau

    9. März 2016 um 11:36 Uhr

  • Ist die Konstante MYSQL_CLIENT_SSL oder MYSQLI_CLIENT_SSL? Ich denke, MYSQLI_CLIENT_SSL funktioniert für mich.

    – andersuamar

    16. November 2017 um 17:11 Uhr

  • @ xpander001 Vor 2,5 Jahren, als ich etwas gepostet habe, war kein I im Variablennamen, aber ich habe andere Online-Referenzen gesehen, die das I erwähnen, also ist es wahrscheinlich eine neuere Version.

    – randalv

    17. November 2017 um 3:50 Uhr

Benutzer-Avatar
Stern

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.

1359200cookie-checkVerwendung von Amazon RDS mit WordPress über SSL

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy