CryptAcquireCertificatePrivateKey is failing even thought the cert context is valid.
This entire crypto TLS thing is quite confusing!
This entire crypto TLS thing is quite confusing!
Code:
#COMPILE EXE #DIM ALL #INCLUDE "win32api.inc" '------------------------------------------------------------------------------ FUNCTION GetErrorMessage (BYVAL errorCode AS DWORD) AS STRING LOCAL errorBuffer AS STRINGZ * 1024 LOCAL numChars AS DWORD numChars = FormatMessage(%FORMAT_MESSAGE_FROM_SYSTEM OR %FORMAT_MESSAGE_IGNORE_INSERTS, BYVAL %NULL, errorCode, %LANG_USER_DEFAULT, errorBuffer, SIZEOF(errorBuffer), BYVAL %NULL) IF numChars THEN FUNCTION = LEFT$(errorBuffer, numChars) ELSE FUNCTION = "Error " & STR$(errorCode) END IF END FUNCTION '------------------------------------------------------------------------------ '------------------------------------------------------------------------------ FUNCTION PBMAIN () AS LONG LOCAL result AS DWORD LOCAL errorMessage AS STRING * 1024 LOCAL hFileStoreHandle AS DWORD LOCAL Cert_File_Name AS STRINGZ * 255 LOCAL pCertContext AS CERT_CONTEXT PTR LOCAL pvFindPara AS STRINGZ *255 LOCAL szName AS ASCIIZ * 256 LOCAL hProv AS DWORD 'ptr LOCAL dwKeySpec AS DWORD LOCAL pfCallerFreeProv AS DWORD Cert_File_Name = "comm.crt" hFileStoreHandle = CertOpenStore(BYVAL %CERT_STORE_PROV_FILENAME_A, 0, 0, 0, Cert_File_Name) errorMessage = GetErrorMessage(GetLasterror) pCertContext = CertFindCertificateInStore(hFileStoreHandle, %X509_ASN_ENCODING OR %PKCS_7_ASN_ENCODING, 0, 0, pvFindPara, 0) 'Next line is to prove we have the "asp-emu" Cert - you can look at the szName result = CertGetNameString(pCertContext, %CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, BYVAL %NULL, szName, SIZEOF(szName)) result = CryptAcquireCertificatePrivateKey(pCertContext, %CRYPT_ACQUIRE_SILENT_FLAG OR %CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG, %NULL, hProv, dwKeySpec, pfCallerFreeProv) errorMessage = GetErrorMessage(GetLasterror) END FUNCTION​
Comment