Что нового

[Сеть, интернет] Авторизация на https с сертификатом

xklx

Новичок
Сообщения
50
Репутация
3
Хочу создать информер в трее который показывает сколько на балансе за интернет
https://stat.ultranet.ru/
вот только проблемка, как сделать авторизацию на https с принятием сертификата
Заранее благодарен
 
Автор
xklx

xklx

Новичок
Сообщения
50
Репутация
3
r35p3ct сказал(а):
Если через WinHttp, то копать думаю нужно в сторону Опций типа:
SECURITY_FLAG_IGNORE_CERT_CN_INVALID
только как их установить не понял.

Применяется вот так:
Код:
$hRequest = _WinHttpOpenRequest($hconnect, "POST", "index.php?action=login&FindUserName=xxxxxx&FindUserPass=xxxxxx","","","",$WINHTTP_FLAG_SECURE)
 _WinHttpSetOption($hRequest, $WINHTTP_OPTION_SECURITY_FLAGS, BitOR($SECURITY_FLAG_IGNORE_UNKNOWN_CA, $SECURITY_FLAG_IGNORE_CERT_CN_INVALID))

вот только почемуто авторизоваться так: https://stat.ultranet.ru/index.php?action=login&FindUserName=xxxxxx&FindUserPass=xxxxxx даже в браузере нельзя

Есть какие нидь идеи?
 

ak40u

Знающий
Сообщения
33
Репутация
7
Все работает. Логин и пароль от статистики вводить в
Код:
$sStatLogin, $sStatPassword


Код:
#include <winhttp.au3>
;переменные
$HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
$certName = 'CURRENT_USER\\MY\\$98764'
$requestURL = 'https://stat.ultranet.ru/'
$sStatLogin = "test"
$sStatPassword = "test"

;работа с обьектом
$WinHttpReq = ObjCreate('WinHttp.WinHttpRequest.5.1')
$WinHttpReq.SetClientCertificate($certName)
$WinHttpReq.open('POST', $requestURL, false)
_insertHeaders()
$WinHttpReq.SetCredentials('Login', 'Password', $HTTPREQUEST_SETCREDENTIALS_FOR_SERVER)
$WinHttpReq.Option(4) = 13056
$WinHttpReq.send('action=login&FindUserName='&$sStatLogin&'&FindUserPass='&$sStatPassword)

;работа с ответом сервера
$sReturn=$WinHttpReq.ResponseBody
FileDelete("tempget.html")
FileWrite("tempget.html",$sReturn)



Func _insertHeaders()
	$WinHttpReq.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
	$WinHttpReq.SetRequestHeader("Referer","https://stat.ultranet.ru/")
EndFunc
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
ak40u
Поясни, что за 4 и 13056?
Код:
$oHTTP.Option(4) = 13056
 

ak40u

Знающий
Сообщения
33
Репутация
7
It seems 4 is the value of the WINHTTP_OPTION_SECURITY_FLAGS constant at least as far as scripting is concerned. Here are the flags that make up the hex value in the assignment above:
Код:
#define SECURITY_FLAG_IGNORE_UNKNOWN_CA         0x00000100
#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000 // expired X509 Cert.
#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID    0x00001000 // bad common name in X509 Cert.
#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE   0x00000200

source: http://msdn.microsoft.com/en-us/library/aa383998%28v=VS.85%29.aspx

Ну и соответственно аналогом "13056" является "&H3300" приведенный в примере на msdn
 

HelpMe

Новичок
Сообщения
85
Репутация
3
как всё сложно!
что за
Код:
$certName = 'CURRENT_USER\\MY\\$98764'
 

Zhavner

Новичок
Сообщения
9
Репутация
0
Может кто-нибудь сказать, как правильно определить сертификат в хранилище в таком виде:

Код:
$certName = 'CURRENT_USER\\MY\\$98764'


У меня в хранилище несколько разных сертификатов с одинаковым полем CN. Поэтому, если указывать CN в SetClientCertificate, то выбирается первый сертификат, который не является правильным и соединение не проходит. :(
Что это за тип определения сертификата через $ и как его узнать?
 
Верх