W3docs

Ein umfassender Leitfaden zur mysqli_ssl_set-Funktion in PHP

Erfahren Sie, wie mysqli_ssl_set in PHP SSL/TLS-Parameter konfiguriert, um eine sichere Verbindung zu einem MySQL-Server herzustellen.

Bei der Arbeit mit MySQL-Datenbanken in PHP bietet die mysqli-Erweiterung eine Vielzahl von Funktionen zur Durchführung von Datenbankoperationen. Eine davon ist mysqli_ssl_set, die SSL/TLS-Parameter konfiguriert, um eine sichere Verbindung zu einem MySQL-Server herzustellen.

In diesem Leitfaden erklären wir, wie mysqli_ssl_set funktioniert, welche Parameter es hat und wie es in Ihren PHP-Projekten korrekt eingesetzt wird.

Was ist die mysqli_ssl_set-Funktion?

Die Funktion mysqli_ssl_set ist eine eingebaute PHP-Funktion, die SSL/TLS-Optionen für ein MySQL-Verbindungsobjekt konfiguriert. Sie dient dazu, eine sichere Datenübertragung zwischen Ihrem PHP-Skript und dem MySQL-Server zu gewährleisten.

Die Funktion nimmt sechs Parameter entgegen. Das erste Argument ist das MySQL-Verbindungsobjekt, das von mysqli_init() zurückgegeben wird. Die übrigen Argumente geben die Pfade zum SSL-Schlüssel, zum Zertifikat, zum CA-Zertifikat, zum CA-Zertifikatspfad und zur Cipher-Suite an.

Hier ist die Syntax der mysqli_ssl_set-Funktion:

Syntax der mysqli_ssl_set-Funktion

mysqli_ssl_set($connection, $key, $cert, $ca, $capath, $cipher);

Parameter

ParameterBeschreibung
$connectionEin Verbindungsobjekt, das mit mysqli_init() erstellt wurde. Erforderlich.
$keyPfad zur privaten Schlüsseldatei des Clients (PEM). Übergeben Sie null, wenn nicht verwendet.
$certPfad zur öffentlichen Zertifikatsdatei des Clients (PEM). Übergeben Sie null, wenn nicht verwendet.
$caPfad zur Zertifizierungsstellen-Datei (CA), die zur Überprüfung des Servers verwendet wird. Übergeben Sie null, wenn nicht verwendet.
$capathPfad zu einem Verzeichnis mit vertrauenswürdigen CA-Zertifikaten im PEM-Format. Übergeben Sie null, wenn nicht verwendet.
$cipherEine Liste zulässiger Ciphers für SSL/TLS. Übergeben Sie null, um die Standardwerte zu verwenden.

Jeder Parameter, den Sie nicht benötigen, kann als null übergeben werden. Ein häufig verwendetes minimales Setup gibt nur die CA-Datei ($ca) an, damit der Client das Zertifikat des Servers überprüfen kann, während der Rest als null bleibt.

Wann würden Sie es verwenden?

Sie verwenden mysqli_ssl_set, wenn die PHP-Anwendung und der MySQL-Server über ein nicht vertrauenswürdiges Netzwerk kommunizieren — zum Beispiel ein Webserver, der sich mit einer verwalteten Cloud-Datenbank verbindet, oder eine Verbindung, die das öffentliche Internet überquert. Ohne SSL/TLS werden Anmeldedaten und Abfrageergebnisse im Klartext übertragen und können von jedem gelesen werden, der den Datenverkehr beobachten kann.

Funktionen der mysqli_ssl_set-Funktion

Die Funktion mysqli_ssl_set bietet verschiedene Fähigkeiten, die sie für die Absicherung der Datenbankkommunikation in PHP unverzichtbar machen. Zu den wichtigsten Funktionen gehören:

1. Sichere Datenübertragung

Der primäre Zweck von mysqli_ssl_set besteht darin, einen SSL/TLS-verschlüsselten Kanal zwischen Ihrer PHP-Anwendung und dem MySQL-Server zu konfigurieren. Dies schützt sensible Daten vor dem Abfangen während der Übertragung.

2. Konfiguration vor der Verbindung

Die Funktion ermöglicht es Ihnen, SSL-Parameter auf einem Verbindungsobjekt festzulegen, bevor die eigentliche Verbindung hergestellt wird. Dadurch wird sichergestellt, dass der Server die Verschlüsselung ab dem Moment des Handshakes erzwingt.

3. Boolean-Rückgabewert

Die Funktion gibt einen boolean-Wert zurück, der Erfolg oder Misserfolg anzeigt. Sie erzeugt keine automatischen Warnungen oder Fehler; stattdessen sollten Sie den Rückgabewert prüfen und bei Bedarf mysqli_connect_error() oder mysqli_error() verwenden, um detaillierte Fehlerinformationen abzurufen.

Verwendung der mysqli_ssl_set-Funktion

Um mysqli_ssl_set korrekt zu verwenden, müssen Sie das Verbindungsobjekt initialisieren, die SSL-Parameter setzen und dann die Verbindung mit mysqli_real_connect() herstellen. Die Reihenfolge ist entscheidend: mysqli_ssl_set() speichert nur die SSL-Optionen im Verbindungsobjekt. Sie werden während des von mysqli_real_connect() durchgeführten Handshakes angewendet. Das Aufrufen von mysqli_ssl_set() nach einer bereits geöffneten Verbindung hat daher keine Wirkung.

1. SSL-Parameter initialisieren und konfigurieren

Erstellen Sie zunächst ein Verbindungsobjekt mit mysqli_init() und wenden Sie dann die SSL-Einstellungen vor dem Verbinden an:

Beispiel der PHP mysqli_ssl_set-Funktion

<?php

$connection = mysqli_init();
if (!$connection) {
    die('mysqli_init failed');
}

// Set SSL parameters before connecting
mysqli_ssl_set($connection, '/path/to/ssl/key', '/path/to/ssl/cert', '/path/to/ssl/ca', null, null);

// Establish the connection
if (!mysqli_real_connect($connection, 'localhost', 'username', 'password', 'mydatabase')) {
    die('Connection failed: ' . mysqli_connect_error());
}

echo 'Secure connection established successfully.';
?>

2. Die verschlüsselte Verbindung überprüfen

Nach dem Verbinden können Sie überprüfen, ob SSL aktiv ist, indem Sie den Serverstatus mit mysqli_query() abfragen. Wenn die Verbindung verschlüsselt ist, gibt Ssl_cipher den ausgehandelten Cipher-Namen zurück; wenn er leer ist, verwendet die Verbindung kein SSL:

<?php
$result = $connection->query("SHOW STATUS LIKE 'Ssl_cipher'");
$row = $result->fetch_row();

if (!empty($row[1])) {
    echo 'Encrypted connection using cipher: ' . $row[1];
} else {
    echo 'Connection is NOT encrypted.';
}
?>

Häufige Fallstricke

  • Zertifikatsüberprüfung schlägt fehl. Wenn mysqli_real_connect() mit einem Zertifikatsfehler fehlschlägt, stellen Sie sicher, dass die $ca-Datei mit der Zertifizierungsstelle übereinstimmt, die das Serverzertifikat signiert hat, und dass die Datei für den PHP-Prozess lesbar ist.
  • SSL wird stillschweigend ignoriert. Eine erfolgreiche Verbindung garantiert keine Verschlüsselung. Bestätigen Sie dies immer mit der oben genannten Ssl_cipher-Prüfung und überprüfen Sie mysqli_connect_error(), wenn mysqli_real_connect() false zurückgibt.
  • Reihenfolge der Aufrufe. Setzen Sie SSL-Optionen mit mysqli_ssl_set() bevor Sie mysqli_real_connect() aufrufen, nicht danach.

Fazit

Die Funktion mysqli_ssl_set ist ein unverzichtbares Werkzeug zur Absicherung der Datenbankkommunikation in PHP. Durch die Konfiguration der SSL/TLS-Parameter vor dem Aufruf von mysqli_real_connect() stellen Sie sicher, dass alle zwischen Ihrer Anwendung und dem MySQL-Server ausgetauschten Daten über einen verschlüsselten Kanal übertragen werden. Überprüfen Sie stets die SSL-Konfiguration Ihres Servers und den Verbindungsstatus, um robuste Sicherheit in Ihren Projekten zu gewährleisten.

Übung

Übung
Was trifft auf mysqli_ssl_set() in PHP zu?
Was trifft auf mysqli_ssl_set() in PHP zu?
Was this page helpful?