Start · Sprachen · PHP · Referenz · radius_server_secret

radius_server_secret

Funktion

Gibt das gemeinsame Geheimnis (Shared Secret) des zuletzt verwendeten RADIUS-Servers zurück.

Kategorie: misc

Signatur

radius_server_secret(resource $radius_handle): string|false

Beschreibung

radius_server_secret() ist Teil der RADIUS-Erweiterung für PHP und liefert das Shared Secret (gemeinsames Geheimnis) des RADIUS-Servers, der zuletzt für eine Authentifizierungs- oder Autorisierungsanfrage verwendet wurde. Das Shared Secret ist ein vorab vereinbarter Schlüssel, der zwischen dem RADIUS-Client (der PHP-Anwendung) und dem RADIUS-Server geteilt wird, um die Kommunikation abzusichern.

Diese Funktion ist nützlich, wenn mehrere RADIUS-Server mit radius_add_server() konfiguriert wurden und nach einer Anfrage ermittelt werden soll, welches Shared Secret der tatsächlich verwendete Server besitzt – beispielsweise für Logging- oder Debugging-Zwecke.

Das zurückgegebene Shared Secret wird im Klartext als String geliefert. Es sollte daher mit Vorsicht behandelt und niemals in Protokolldateien oder Ausgaben gespeichert werden, da es sensitives Sicherheitsmaterial darstellt.

Vor dem Aufruf muss ein gültiges RADIUS-Handle über radius_auth_open() oder radius_acct_open() erzeugt und mindestens ein Server über radius_add_server() hinzugefügt worden sein.

Parameter

Name Typ Default Beschreibung
$radius_handle Pflicht resource Eine gültige RADIUS-Ressource, die zuvor mit radius_auth_open() oder radius_acct_open() erstellt wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt das Shared Secret des zuletzt verwendeten RADIUS-Servers als String zurück. Im Fehlerfall wird false zurückgegeben.

Beispiele

Shared Secret nach erfolgreicher Authentifizierung auslesen

<?php
// RADIUS-Handle für Authentifizierung öffnen
$radius = radius_auth_open();

if (!$radius) {
    die('Fehler beim Öffnen des RADIUS-Handles');
}

// RADIUS-Server hinzufügen (Host, Port, Secret, Timeout, Retries)
if (!radius_add_server($radius, '192.168.1.100', 1812, 'mein_geheimnis', 3, 3)) {
    die('Fehler beim Hinzufügen des RADIUS-Servers: ' . radius_strerror($radius));
}

// Anfrage erstellen
if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
    die('Fehler beim Erstellen der RADIUS-Anfrage: ' . radius_strerror($radius));
}

radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'testpasswort');

// Anfrage senden
$result = radius_send_request($radius);

if ($result) {
    // Shared Secret des verwendeten Servers ermitteln
    $secret = radius_server_secret($radius);
    if ($secret !== false) {
        // Nur zu Debugging-Zwecken – im Produktivbetrieb NICHT loggen!
        echo 'Verwendetes Shared Secret: ' . $secret . PHP_EOL;
    } else {
        echo 'Shared Secret konnte nicht ermittelt werden.' . PHP_EOL;
    }
} else {
    echo 'RADIUS-Anfrage fehlgeschlagen: ' . radius_strerror($radius) . PHP_EOL;
}

radius_close($radius);
?>
Verwendetes Shared Secret: mein_geheimnis

Shared Secret bei mehreren konfigurierten Servern prüfen

<?php
$radius = radius_auth_open();

// Mehrere Server konfigurieren
radius_add_server($radius, '192.168.1.100', 1812, 'secret_server1', 3, 2);
radius_add_server($radius, '192.168.1.101', 1812, 'secret_server2', 3, 2);

radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'benutzer');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'passwort');

$result = radius_send_request($radius);

if ($result) {
    $secret = radius_server_secret($radius);
    // Anhand des Secrets kann nachvollzogen werden, welcher Server antwortete
    switch ($secret) {
        case 'secret_server1':
            echo 'Server 1 hat geantwortet.' . PHP_EOL;
            break;
        case 'secret_server2':
            echo 'Server 2 hat geantwortet.' . PHP_EOL;
            break;
        default:
            echo 'Unbekannter Server.' . PHP_EOL;
    }
}

radius_close($radius);
?>
Server 1 hat geantwortet.

// Wichtig · Fallstricke

Sicherheitshinweis: Das Shared Secret ist ein sensitives Sicherheitsmerkmal der RADIUS-Kommunikation. Der Rückgabewert von radius_server_secret() sollte niemals in Log-Dateien, HTTP-Antworten oder anderen persistenten Speicherorten ausgegeben werden. Im Produktivbetrieb ist der Einsatz dieser Funktion auf interne Diagnosezwecke zu beschränken.

Die RADIUS-PHP-Erweiterung (radius) ist eine PECL-Erweiterung und nicht standardmäßig in PHP enthalten. Sie muss separat installiert werden. Auf Systemen, auf denen die Erweiterung nicht verfügbar ist, steht radius_server_secret() nicht zur Verfügung.

Das Ergebnis ist nur nach einer tatsächlich abgesendeten Anfrage (z. B. via radius_send_request()) sinnvoll, da erst dann feststeht, welcher Server verwendet wurde.