Start · Sprachen · PHP · Referenz · ssh2_methods_negotiated

ssh2_methods_negotiated

Funktion

Gibt ein assoziatives Array mit den während des SSH2-Handshakes ausgehandelten Kryptographie-Methoden zurück.

Kategorie: http

Signatur

ssh2_methods_negotiated(resource $session): array

Beschreibung

ssh2_methods_negotiated() liefert nach dem Aufbau einer SSH2-Verbindung eine Übersicht über alle Methoden, die Client und Server gemeinsam ausgehandelt haben. Dazu gehören Verschlüsselungsverfahren, MAC-Algorithmen, Kompressionsverfahren sowie die Methoden für den Schlüsselaustausch und die Hostschlüssel-Verifikation.

Das zurückgegebene Array enthält typischerweise die Schlüssel kex (Key Exchange), hostkey, client_to_server und server_to_client. Die letzten beiden sind selbst wiederum Arrays mit den Einträgen crypt, mac und comp für die jeweilige Richtung.

Die Funktion eignet sich vor allem zur Diagnose und zum Auditieren von SSH-Verbindungen: Man kann prüfen, ob tatsächlich die gewünschten, sicheren Algorithmen verwendet werden, und schwache oder veraltete Verfahren frühzeitig erkennen.

Voraussetzung ist die PECL-Erweiterung ssh2, die über pecl install ssh2 installiert wird. Das übergebene $session-Handle muss aus einem erfolgreichen Aufruf von ssh2_connect() stammen.

Parameter

Name Typ Default Beschreibung
$session Pflicht resource Eine aktive SSH2-Verbindungsressource, wie sie von ssh2_connect() zurückgegeben wird.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array zurück, das die ausgehandelten Methoden beschreibt. Typische Schlüssel sind kex, hostkey, client_to_server und server_to_client. Die Richtungs-Arrays enthalten jeweils crypt, mac und comp.

Beispiele

Ausgehandelte Methoden einer SSH2-Verbindung ausgeben

<?php
$session = ssh2_connect('example.com', 22);
if ($session === false) {
    die('Verbindung fehlgeschlagen.');
}

$methods = ssh2_methods_negotiated($session);

echo 'Key-Exchange-Methode: ' . $methods['kex'] . PHP_EOL;
echo 'Hostkey-Methode:      ' . $methods['hostkey'] . PHP_EOL;

echo 'Client → Server:' . PHP_EOL;
echo '  Verschlüsselung: ' . $methods['client_to_server']['crypt'] . PHP_EOL;
echo '  MAC:             ' . $methods['client_to_server']['mac']   . PHP_EOL;
echo '  Kompression:     ' . $methods['client_to_server']['comp']  . PHP_EOL;

echo 'Server → Client:' . PHP_EOL;
echo '  Verschlüsselung: ' . $methods['server_to_client']['crypt'] . PHP_EOL;
echo '  MAC:             ' . $methods['server_to_client']['mac']   . PHP_EOL;
echo '  Kompression:     ' . $methods['server_to_client']['comp']  . PHP_EOL;
?>
Key-Exchange-Methode: diffie-hellman-group14-sha256 Hostkey-Methode: ssh-rsa Client → Server: Verschlüsselung: aes128-ctr MAC: hmac-sha2-256 Kompression: none Server → Client: Verschlüsselung: aes128-ctr MAC: hmac-sha2-256 Kompression: none

Sicherheits-Audit: schwache Algorithmen erkennen

<?php
$session = ssh2_connect('example.com', 22);
if ($session === false) {
    die('Verbindung fehlgeschlagen.');
}

$methods = ssh2_methods_negotiated($session);

$unsichereAlgorithmen = ['arcfour', 'blowfish-cbc', 'des', '3des-cbc', 'hmac-md5'];

foreach (['client_to_server', 'server_to_client'] as $richtung) {
    $crypt = $methods[$richtung]['crypt'];
    $mac   = $methods[$richtung]['mac'];

    if (in_array($crypt, $unsichereAlgorithmen, true)) {
        echo "WARNUNG: Unsichere Verschlüsselung '{$crypt}' in {$richtung}." . PHP_EOL;
    }
    if (in_array($mac, $unsichereAlgorithmen, true)) {
        echo "WARNUNG: Unsicherer MAC-Algorithmus '{$mac}' in {$richtung}." . PHP_EOL;
    }
}

echo 'Audit abgeschlossen.' . PHP_EOL;
?>
Audit abgeschlossen.

// Wichtig · Fallstricke

Sicherheitshinweis: Prüfe nach dem Verbindungsaufbau aktiv die ausgehandelten Algorithmen, insbesondere in sicherheitskritischen Umgebungen. Veraltete Verfahren wie arcfour, blowfish-cbc oder hmac-md5 sollten serverseitig deaktiviert werden.

Die Funktion setzt die PECL-Erweiterung ssh2 voraus (pecl install ssh2). Sie ist nicht Bestandteil der PHP-Standardinstallation. Wird ein ungültiges oder bereits geschlossenes Ressource-Handle übergeben, kann ein Fehler auftreten.