From 5fa4c4c8b1974d9e0b06cc8fc9f5d8f599f9dde2 Mon Sep 17 00:00:00 2001 From: bmparson Date: Tue, 7 Dec 2021 15:36:04 -0500 Subject: [PATCH 1/3] WINHTTP_OPTION_CLIENT_CERT_CONTEXT Null ptr fail --- WinHttp.au3 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/WinHttp.au3 b/WinHttp.au3 index 216eea1..d5c7327 100644 --- a/WinHttp.au3 +++ b/WinHttp.au3 @@ -953,14 +953,18 @@ Func _WinHttpSetOption($hInternet, $iOption, $vSetting, $iSize = Default) $sType = "wstr" If (IsDllStruct($vSetting) Or IsPtr($vSetting)) Then Return SetError(3, 0, 0) If $iSize < 1 Then $iSize = StringLen($vSetting) - Case $WINHTTP_OPTION_CLIENT_CERT_CONTEXT, $WINHTTP_OPTION_GLOBAL_PROXY_CREDS, $WINHTTP_OPTION_GLOBAL_SERVER_CREDS, $WINHTTP_OPTION_HTTP_VERSION, _ + Case $WINHTTP_OPTION_GLOBAL_PROXY_CREDS, $WINHTTP_OPTION_GLOBAL_SERVER_CREDS, $WINHTTP_OPTION_HTTP_VERSION, _ $WINHTTP_OPTION_PROXY $sType = "ptr" If Not (IsDllStruct($vSetting) Or IsPtr($vSetting)) Then Return SetError(3, 0, 0) + Case $WINHTTP_OPTION_CLIENT_CERT_CONTEXT + $sType = "ptr" + If Not (IsDllStruct($vSetting) Or IsPtr($vSetting)) And Not $vSetting=NULL Then Return SetError(3, 0, 0) + Case Else Return SetError(1, 0, 0) EndSwitch - If $iSize < 1 Then + If $iSize < 1 And Not( $iOption = $WINHTTP_OPTION_CLIENT_CERT_CONTEXT And $vSetting=NULL) Then If IsDllStruct($vSetting) Then $iSize = DllStructGetSize($vSetting) Else @@ -1800,6 +1804,10 @@ Func _WinHttpSimpleSendSSLRequest($hConnect, $sType = Default, $sPath = Default, _WinHttpSetOption(_WinHttpQueryOption(_WinHttpQueryOption($hRequest, $WINHTTP_OPTION_PARENT_HANDLE), $WINHTTP_OPTION_PARENT_HANDLE), $WINHTTP_OPTION_SECURE_PROTOCOLS, BitOR($WINHTTP_FLAG_SECURE_PROTOCOL_TLS1, $WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1, $WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2)) _WinHttpSendRequest($hRequest, $sHeader, $sDta) If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) + elseif __WinHttpGetLastError() = $ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED Then + _WinHttpSetOption($hrequest, $WINHTTP_OPTION_CLIENT_CERT_CONTEXT,NULL,0) + _WinHttpSendRequest($hRequest, $sHeader, $sDta) + If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) EndIf EndIf _WinHttpReceiveResponse($hRequest) From 90e3241c9e0dad915d58b1e2d4979b85183285de Mon Sep 17 00:00:00 2001 From: bmparson Date: Tue, 7 Dec 2021 16:57:57 -0500 Subject: [PATCH 2/3] Made missing Global Constant and used that --- WinHttp.au3 | 2 +- WinHttpConstants.au3 | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/WinHttp.au3 b/WinHttp.au3 index d5c7327..247c916 100644 --- a/WinHttp.au3 +++ b/WinHttp.au3 @@ -1805,7 +1805,7 @@ Func _WinHttpSimpleSendSSLRequest($hConnect, $sType = Default, $sPath = Default, _WinHttpSendRequest($hRequest, $sHeader, $sDta) If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) elseif __WinHttpGetLastError() = $ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED Then - _WinHttpSetOption($hrequest, $WINHTTP_OPTION_CLIENT_CERT_CONTEXT,NULL,0) + _WinHttpSetOption($hrequest, $WINHTTP_OPTION_CLIENT_CERT_CONTEXT,$WINHTTP_NO_CLIENT_CERT_CONTEXT,0) _WinHttpSendRequest($hRequest, $sHeader, $sDta) If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) EndIf diff --git a/WinHttpConstants.au3 b/WinHttpConstants.au3 index 891e86d..991e666 100644 --- a/WinHttpConstants.au3 +++ b/WinHttpConstants.au3 @@ -171,6 +171,8 @@ Global Const $WINHTTP_DISABLE_SPN_SERVER_PORT = 0x00000000 Global Const $WINHTTP_ENABLE_SPN_SERVER_PORT = 0x00000001 Global Const $WINHTTP_OPTION_SPN_MASK = $WINHTTP_ENABLE_SPN_SERVER_PORT +Global Const $WINHTTP_NO_CLIENT_CERT_CONTEXT = NULL + ; WinHTTP error codes ; Global Const $WINHTTP_ERROR_BASE = 12000 Global Const $ERROR_WINHTTP_OUT_OF_HANDLES = 12001 From 735438b48ea007e9821d7146f897cf7df8b2801c Mon Sep 17 00:00:00 2001 From: bmparson <68745226+bmparson@users.noreply.github.com> Date: Wed, 8 Dec 2021 01:21:24 -0500 Subject: [PATCH 3/3] Update WinHttp.au3 --- WinHttp.au3 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WinHttp.au3 b/WinHttp.au3 index 247c916..544dd5d 100644 --- a/WinHttp.au3 +++ b/WinHttp.au3 @@ -964,7 +964,7 @@ Func _WinHttpSetOption($hInternet, $iOption, $vSetting, $iSize = Default) Case Else Return SetError(1, 0, 0) EndSwitch - If $iSize < 1 And Not( $iOption = $WINHTTP_OPTION_CLIENT_CERT_CONTEXT And $vSetting=NULL) Then + If $iSize < 1 And Not ($iOption = $WINHTTP_OPTION_CLIENT_CERT_CONTEXT And $vSetting=NULL) Then If IsDllStruct($vSetting) Then $iSize = DllStructGetSize($vSetting) Else @@ -1805,7 +1805,7 @@ Func _WinHttpSimpleSendSSLRequest($hConnect, $sType = Default, $sPath = Default, _WinHttpSendRequest($hRequest, $sHeader, $sDta) If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) elseif __WinHttpGetLastError() = $ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED Then - _WinHttpSetOption($hrequest, $WINHTTP_OPTION_CLIENT_CERT_CONTEXT,$WINHTTP_NO_CLIENT_CERT_CONTEXT,0) + _WinHttpSetOption($hrequest, $WINHTTP_OPTION_CLIENT_CERT_CONTEXT, $WINHTTP_NO_CLIENT_CERT_CONTEXT, 0) _WinHttpSendRequest($hRequest, $sHeader, $sDta) If @error Then Return SetError(2, 0 * _WinHttpCloseHandle($hRequest), 0) EndIf