#include <WinHttp.au3> ; https://github.com/dragana-r/autoit-winhttp/tree/master
ConsoleWrite("- ExpiryTime: " & _WinHttp_SSL_ExpiryTime("www.google.com") & @CRLF)
Func _WinHttp_SSL_ExpiryTime($sSite, $iPort = 443, $sTimeType = "ExpiryTime")
Local Const $tagINTERNET_CERTIFICATE_INFO = "dword ExpiryTime[2]; dword StartTime[2]; ptr SubjectInfo;" & _
"ptr IssuerInfo; ptr ProtocolName; ptr SignatureAlgName; ptr EncryptionAlgName; dword KeySize"
Local $tINTERNET_CERTIFICATE_INFO, $hOpen = _WinHttpOpen()
_WinHttpSetOption($hOpen, $WINHTTP_OPTION_SECURITY_FLAGS, 0x00003300) ; $SECURITY_FLAG_IGNORE_ALL
Local $hConnect = _WinHttpConnect($hOpen, $sSite, $iPort)
Local $hRequest = _WinHttpSimpleSendSSLRequest($hConnect, "GET", "/")
Local $tBufferLength = DllStructCreate("dword")
DllStructSetData($tBufferLength, 1, 2048)
Local $sReturn, $tBuffer = DllStructCreate("byte[2048]")
Local $iError, $aResult = DllCall($hWINHTTPDLL__WINHTTP, "bool", "WinHttpQueryOption", _
"handle", $hRequest, "dword", $WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT, _
"struct*", DllStructGetPtr($tBuffer), "dword*", DllStructGetPtr($tBufferLength))
$iError = @error
If Not $iError And $aResult[0] Then
$tINTERNET_CERTIFICATE_INFO = DllStructCreate($tagINTERNET_CERTIFICATE_INFO, DllStructGetPtr($tBuffer))
$sReturn = __WinHttp_INTERNET_CERTIFICATE_INFO_Time($tINTERNET_CERTIFICATE_INFO, $sTimeType) ; these are "ExpiryTime" and "StartTime"
Else
$iError = 99
$sReturn = "error"
EndIf
$tBufferLength = 0
$tBuffer = 0
$tINTERNET_CERTIFICATE_INFO = 0
_WinHttpCloseHandle($hRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
Return SetError($iError, 0, $sReturn)
EndFunc ;==>_WinHttp_SSL_ExpiryTime
Func __WinHttp_INTERNET_CERTIFICATE_INFO_Time($tStruct, $sTimeType = "ExpiryTime")
Local $tSystTime = DllStructCreate("struct;word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds;endstruct")
DllCall("kernel32.dll", "bool", "FileTimeToSystemTime", "struct*", DllStructGetPtr($tStruct, $sTimeType), "struct*", $tSystTime)
Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", $tSystTime.Year, $tSystTime.Month, $tSystTime.Day, $tSystTime.Hour, $tSystTime.Minute, $tSystTime.Second)
EndFunc ;==>__WinHttp_INTERNET_CERTIFICATE_INFO_Time
Had to scrape the site to get this. Shared here so you don't have to go trough the same trouble.
This function gets the date a SSL certificate expires on a web site.
Edit: Added to "ExpiryTime" the possibility of getting "StartTime". Was already there, might as well give the opportunity to get that too.
..and this one has the rest of the info I could get.
If anyone can get ProtocolName, SignatureAlgName and EncryptionAlgName, post it. TIA