Как заставить libCurl использовать шестнадцатеричный cnonce вместо буквенно-цифрового в заголовке дайджеста аутентификации

#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. В настоящее время у меня нет минимальной общедоступной версии, потому что код слишком велик, чтобы отделить часть аутентификации