Я хочу аутентифицироваться между двумя 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.