#c #libcurl #digest-authentication
#c #libcurl #дайджест-аутентификация
Вопрос:
Недавно я начал использовать libCurl для проекта связи клиент-сервер, где я использую libcurl на стороне клиента. Раньше мы использовали WinHTTP, но не нашли способа добавить обратную совместимость TLS 1.3 с более ранними версиями Windows.
cnonce является частью заголовков дайджеста аутентификации.
Когда мой проект был более сложным с использованием WinHTTP, cnonce раньше был шестнадцатеричным. Например:
cnonce="a01e21c2a827ec6d3d9b6e1745ca8a0b"
HTTP заголовок
Сервер клиенту:
HTTP/1.1 401 Unauthorized
Content-Length: 26
WWW-Authenticate: Negotiate
WWW-Authenticate: Digest realm="a2ffc77914d6e791d", qop="auth",nonce="3f3da4b94e249058", opaque ="3b3542c"
Клиент-сервер:
POST /wsman HTTP/1.1
Connection: Keep-Alive
Content-Type: application/soap xml;charset=UTF-8
User-Agent: Openwsman
Content-Length: 889
Host: 10.138.141.178:623
Authorization: Digest username="PostMan",realm="a2ffc77914d6e791d",nonce="3f3da4b94e249058",uri="/wsman",cnonce="a01e21c2a827ec6d3d9b6e1745ca8a0b",nc=00000001,response="9dd37ef997ef332e46dff0f868b3de89",qop="auth",opaque="3b3542c"
Когда я смотрю на заголовок HTTP, я обнаруживаю, что cnonce является буквенно-цифровым с Curl.
Например:
cnonce="NDlmYTM0ZjVlM2IzNTNhMDNiNDk0MzQ1MzdlYmFlMzA="
HTTP заголовок
Сервер клиенту
HTTP/1.1 401 Unauthorized
Content-Length: 0
Connection: Keep-Alive
Content-Type: application/soap xml;charset=UTF-8
WWW-Authenticate: Digest realm="a2ffc77914d6e791d", nonce="5bf1156647e8eb42", algorithm="MD5", qop="auth", opaque="661d9eae", userhash=true
Клиент-сервер
POST /wsman HTTP/1.1
Host: blr-5cg64728l6.amd.com:623
Authorization: Digest username="PostMan", realm="a2ffc77914d6e791d", nonce="5bf1156647e8eb42", uri="/wsman", cnonce="NDlmYTM0ZjVlM2IzNTNhMDNiNDk0MzQ1MzdlYmFlMzA=", nc=00000001, qop=auth, response="6847e465c9c90b40264b736070f721da", opaque="661d9eae", algorithm=MD5, userhash=true
Accept: */*
Content-Type: application/soap xml;charset=UTF-8
User-Agent: Openwsman
Content-Length: 897
При буквенно-цифровом cnonce сервер не отвечает последовательно. Есть ли способ указать в libcurl для генерации шестнадцатеричного cnonce — явно?
Примечание: Чтобы избежать угрозы безопасности, поля были изменены в заголовках выше.
Я использую LibCurl: 7.73 с серверной частью OpenSSL TLS: 1.1.1h
Комментарии:
1. Для меня это «буквенно-цифровое» выглядит как значение в кодировке base64. cURL имеет встроенную поддержку для декодирования этого. Но, возможно, вы можете опубликовать полные HTTP-заголовки обоих запросов.
2. Добавление @bagder, добавление вас на случай, если вы знаете решение
3. И как вы генерируете запрос? Где ваш код?
4. В настоящее время у меня нет минимальной общедоступной версии, потому что код слишком велик, чтобы отделить часть аутентификации