Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- m_certificateStoreHandle = CertOpenStore( CERT_STORE_PROV_MEMORY, 0, NULL, 0, NULL );
- CertAddEncodedCertificateToStore( m_certificateStoreHandle,
- X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- reinterpret_cast< const BYTE * >( certificateData ),
- dataSize,
- CERT_STORE_ADD_REPLACE_EXISTING,
- &m_clientCertificate )
- HCRYPTPROV cryptProvider = NULL;
- HCRYPTKEY cryptKey = NULL;
- CryptAcquireContext( &cryptProvider, "MyTestKeyNumber123", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET )
- CryptImportKey( cryptProvider, reinterpret_cast< BYTE * >( privateKey ), keySize, 0, CRYPT_EXPORTABLE, &cryptKey )
- char containerName[128];
- DWORD containerNameSize = ARRAY_NUM_BYTES(containerName);
- char providerName[128];
- DWORD providerNameSize = ARRAY_NUM_BYTES(providerName);
- CryptGetProvParam(cryptProvider, PP_CONTAINER, reinterpret_cast<byte *>(containerName), &containerNameSize, 0)
- CryptGetProvParam(cryptProvider, PP_NAME, reinterpret_cast<byte *>(providerName), &providerNameSize, 0)
- WCHAR containerNameWide[128];
- convertCharToWChar(containerNameWide, containerName);
- WCHAR providerNameWide[128];
- convertCharToWChar(providerNameWide, providerName);
- CRYPT_KEY_PROV_INFO privateKeyData;
- neMemZero(&privateKeyData, sizeof(privateKeyData));
- privateKeyData.pwszContainerName = containerNameWide;
- privateKeyData.pwszProvName = providerNameWide;
- privateKeyData.dwProvType = 0;
- privateKeyData.dwFlags = CRYPT_SILENT;
- privateKeyData.dwKeySpec = AT_KEYEXCHANGE;
- if ( CertSetCertificateContextProperty( m_clientCertificate, CERT_KEY_PROV_INFO_PROP_ID, 0, &privateKeyData ) )
- byte privateKeyBuffer[2048];
- DWORD privateKeyBufferSize = ARRAY_NUM_BYTES(privateKeyBuffer);
- memZero(privateKeyBuffer, privateKeyBufferSize);
- if(CryptExportKey(cryptKey, 0, PRIVATEKEYBLOB, 0, privateKeyBuffer, &privateKeyBufferSize))
- {
- TRACE("Got private key!");
- LOG_BUFFER(privateKeyBuffer, privateKeyBufferSize);
- }
- char certNameBuffer[128] = "";
- char certUrlBuffer[128] = "";
- CertGetNameString(testValue, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0, NULL, certNameBuffer, ARRAY_NUM_BYTES(certNameBuffer));
- CertGetNameString(testValue, CERT_NAME_URL_TYPE , 0, NULL, certUrlBuffer, ARRAY_NUM_BYTES(certUrlBuffer));
- TRACE("SSL Certificate %s [%s]", certNameBuffer, certUrlBuffer);
- HCRYPTPROV_OR_NCRYPT_KEY_HANDLE privateKey;
- DWORD privateKeyType;
- BOOL freeKeyAfter = false;
- if(CryptAcquireCertificatePrivateKey(testValue, CRYPT_ACQUIRE_NO_HEALING, NULL, &privateKey, &privateKeyType, &freeKeyAfter))
- {
- HCRYPTPROV privateKeyProvider = static_cast<HCRYPTPROV>(privateKey);
- HCRYPTKEY privateKeyHandle;
- if(CryptGetUserKey(privateKeyProvider, privateKeyType, &privateKeyHandle))
- {
- NEbyte privateKeyBuffer[2048];
- DWORD privateKeyBufferSize = NE_ARRAY_NUM_BYTES(privateKeyBuffer);
- neMemZero(privateKeyBuffer, privateKeyBufferSize);
- if(CryptExportKey(privateKeyHandle, 0, PRIVATEKEYBLOB, 0, privateKeyBuffer, &privateKeyBufferSize))
- {
- NE_TRACE("Got private key!");
- HTTP_LOG_BUFFER(neGetGlobalTraceLog(), "Key", "", privateKeyBuffer, privateKeyBufferSize);
- }
- if ( !WinHttpSetOption( handle,
- WINHTTP_OPTION_CLIENT_CERT_CONTEXT,
- const_cast<PCERT_CONTEXT>(m_clientCertificate),
- sizeof( CERT_CONTEXT ) ) )
- {
- HTTP_LOG_ERROR( getLog(), "Setting the client certificate failed with error code %x", GetLastError() );
- }
- m_clientCertificateStoreHandle = PFXImportCertStore(&pfxData, certificatePassword, 0);
- if(NULL != m_clientCertificateStoreHandle)
- {
- m_clientCertificateHandle = CertFindCertificateInStore( m_clientCertificateStoreHandle, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, NULL );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement