PHP, Apache Kerberos Доступ к REST-серверу cURL, gss_display_name () - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу аутентифицироваться между двумя Apache-серверами, используя Kerberos-аутентификацию.В обычных веб-браузерах аутентификация с помощью Kerberos отлично работает для Сервера с REST-Сервисом.Но если я хочу получить к нему доступ с помощью php и curl, я не получу доступ.PHP-клиент хочет получить доступ к REST-сервису независимо от пользовательского доступа.Итак, я не могу использовать делегирование Kerberos.

Вот PHP-фрагмент внутри моего PHP

$username = rtrim(`id -un`, "\n");
curl_setopt_array($ch, [
  CURLOPT_VERBOSE => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPAUTH => CURLAUTH_GSSNEGOTIATE,
    CURLOPT_HTTPHEADER     => ['Authorization: Negotiate'],
    CURLOPT_USERPWD => "$username:",
    //CURLOPT_USERPWD, $username.":".$password,
    //CURLOPT_USERPWD => ":",
    CURLOPT_URL => $url,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false
]);
$result = curl_exec ( $ch );
if($result==false){
  echo "Error\n".curl_error($ch);
}

Журнал ошибок на Apache с REST-Service сообщает мне об ошибке

Verifying client data using KRB5 GSS-API
Client didn't delegate us their credential
GSS-API token of length 99 bytes will be sent back

выглядит нормально, но

GSS-API major_status:01020000, minor_status:00000000
gss_display_name() failed: A required input parameter could not be read: An invalid name was supplied (, Unknown error)

Если я использую cURL на консоли и получаю билет вручную с помощью kinit и keytab-файла, все работает нормально, и яполучите правильный ответ.

curl --negotiate -u : "URL" -k

Время на обеих машинах установлено для NTP и является синхронным.

Итак, мой вопрос, могу ли я использовать keytab внутри PHP или есть шансиспользовать один внутри Apache.

...