Start · Sprachen · PHP · Referenz · radius_request_authenticator

radius_request_authenticator

Funktion

Gibt den Request-Authenticator des zuletzt gesendeten RADIUS-Pakets als Binär-String zurück.

Kategorie: misc

Signatur

radius_request_authenticator(resource $radius_handle): string|false

Beschreibung

radius_request_authenticator() ist Teil der PECL-Erweiterung radius und liefert den 16-Byte-Request-Authenticator des zuletzt über den angegebenen RADIUS-Handle gesendeten Pakets. Der Request-Authenticator ist ein zufälliger Wert, der vom RADIUS-Client erzeugt und in jedes Access-Request- sowie Accounting-Request-Paket eingebettet wird.

Der Wert wird vom RADIUS-Server zur Überprüfung der Integrität von Antwortpaketen verwendet: Er dient als Basis für den MD5-basierten Response-Authenticator, mit dem der Client prüft, ob eine Antwort tatsächlich vom erwarteten Server stammt.

Typischerweise wird diese Funktion für Debugging-Zwecke oder für manuelle Implementierungen von RADIUS-Protokoll-Prüfungen genutzt, z. B. wenn man die Server-Antwort eigenständig validieren möchte. Der zurückgegebene Wert ist ein roher Binär-String mit einer Länge von 16 Byte.

Zu beachten ist, dass die Funktion nur sinnvoll aufgerufen werden kann, nachdem ein RADIUS-Request gesendet wurde (z. B. mit radius_send_request()), da andernfalls kein Authenticator verfügbar ist.

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 den Request-Authenticator als rohen 16-Byte-Binär-String zurück. Im Fehlerfall (z. B. kein Request wurde bisher gesendet oder der Handle ist ungültig) wird false zurückgegeben.

Beispiele

Request-Authenticator nach RADIUS-Authentifizierungsanfrage auslesen

<?php
$radius = radius_auth_open();

if (!$radius) {
    die('RADIUS-Handle konnte nicht erstellt werden.');
}

radius_add_server($radius, '192.168.1.10', 1812, 'geheimesPasswort', 3, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'testpassword');

$result = radius_send_request($radius);

// Request-Authenticator auslesen
$authenticator = radius_request_authenticator($radius);

if ($authenticator !== false) {
    // Binärdaten als Hex-String ausgeben
    echo 'Request-Authenticator (hex): ' . bin2hex($authenticator) . PHP_EOL;
    echo 'Länge: ' . strlen($authenticator) . ' Bytes' . PHP_EOL;
} else {
    echo 'Fehler: Kein Authenticator verfügbar.' . PHP_EOL;
}

radius_close($radius);
?>
Request-Authenticator (hex): a3f1c2d4e5b6a7980102030405060708 Länge: 16 Bytes

Manuelle Validierung einer RADIUS-Antwort mit dem Request-Authenticator

<?php
// Beispiel: Response-Authenticator manuell prüfen
// Der Response-Authenticator = MD5(Code+ID+Length+RequestAuth+Attributes+Secret)

$radius = radius_auth_open();
radius_add_server($radius, '192.168.1.10', 1812, 'geheimesPasswort', 3, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'testpassword');

$resultCode = radius_send_request($radius);

$requestAuth = radius_request_authenticator($radius);
$responseAuth = radius_response_authenticator($radius);

if ($requestAuth !== false && $responseAuth !== false) {
    echo 'Request-Auth (hex):  ' . bin2hex($requestAuth)  . PHP_EOL;
    echo 'Response-Auth (hex): ' . bin2hex($responseAuth) . PHP_EOL;
    // Weitergehende Validierung hier möglich...
} else {
    echo 'Authentikator nicht verfügbar.' . PHP_EOL;
}

radius_close($radius);
?>
Request-Auth (hex): a3f1c2d4e5b6a7980102030405060708 Response-Auth (hex): 1a2b3c4d5e6f708090a0b0c0d0e0f010

// Wichtig · Fallstricke

Sicherheitshinweis: Der Request-Authenticator sollte niemals vorhersehbar oder wiederverwendet werden, da er die Grundlage für die Absicherung des RADIUS-Protokolls bildet. Die PECL-radius-Erweiterung generiert diesen Wert automatisch als kryptografisch zufälligen 16-Byte-Wert.

Verfügbarkeit: Diese Funktion ist Teil der PECL-Erweiterung radius und ist nicht in der Standard-PHP-Distribution enthalten. Sie muss separat installiert werden (pecl install radius).

Reihenfolge: Die Funktion liefert nur dann einen sinnvollen Wert, wenn zuvor ein Request mit radius_send_request() tatsächlich abgeschickt wurde. Ein Aufruf vor dem Senden gibt false zurück.