C++ 使用WinHttp的客户端身份验证(证书和私钥)

C++ 使用WinHttp的客户端身份验证(证书和私钥),c++,ssl,winapi,https,winhttp,C++,Ssl,Winapi,Https,Winhttp,我正在尝试使用Win32 API以https与服务器通信 下面是一个非常简单的代码: HINTERNET ses = WinHttpOpen(L"test",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS,0 ) ; HINTERNET con = WinHttpConnect(ses,L"stackoverflow.com",INTERNET_DEFAULT_HTTPS_PORT,0

我正在尝试使用Win32 API以https与服务器通信

下面是一个非常简单的代码:

HINTERNET ses = WinHttpOpen(L"test",WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS,0 ) ;
HINTERNET con = WinHttpConnect(ses,L"stackoverflow.com",INTERNET_DEFAULT_HTTPS_PORT,0 ) ;
HINTERNET req = WinHttpOpenRequest(con,L"GET",NULL,NULL,WINHTTP_NO_REFERER,WINHTTP_DEFAULT_ACCEPT_TYPES,WINHTTP_FLAG_SECURE ) ;
WinHttpSendRequest( req,WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA,0,0,0 ) ;
WinHttpReceiveResponse( req,NULL ) ;
char buffer [10000] ;
unsigned long size ;
WinHttpReadData( req,reinterpret_cast<void*>( buffer ),sizeof( buffer )-1,&size ) ;
buffer[size] = 0 ;
cout << buffer << endl ;
HINTERNET ses=WinHttpOpen(L“test”,WINHTTP\u访问类型\u默认\u代理,WINHTTP\u无代理\u名称,WINHTTP\u无代理\u旁路,0);
HINTERNET con=WinHttpConnect(ses,L“stackoverflow.com”,INTERNET\u默认\u HTTPS\u端口,0);
HINTERNET req=WinHttpOpenRequest(con,L“GET”,NULL,NULL,WINHTTP\u NO\u REFERER,WINHTTP\u DEFAULT\u ACCEPT\u type,WINHTTP\u FLAG\u SECURE);
WinHttpSendRequest(请求,WINHTTP\u无\u附加\u头,0,WINHTTP\u无\u请求\u数据,0,0);
WinHttpReceiveResponse(请求,空);
字符缓冲区[10000];
无符号长尺寸;
WinHttpReadData(请求、重新解释转换(缓冲区)、sizeof(缓冲区)-1和大小);
缓冲区[大小]=0;

为什么不能使用WinInet?事实上,WinInet似乎更高级。但微软的文档同样令人困惑:我仍然不知道如何传递我的cert+密钥……WinHTTP非常模糊,相比之下,WinInet的文档非常丰富。在你的情况下,你需要InternetSetOption和INTERNET\u OPTION\u CLIENT\u CERT\u CONTEXTOk,WinInet似乎更好,所以我在这里重写了我的问题:我希望这是正确的方法(而不是编辑此方法)…为什么不使用WinInet?事实上,WinInet似乎更高级。但微软的文档同样令人困惑:我仍然不知道如何传递我的cert+密钥……WinHTTP非常模糊,相比之下,WinInet的文档非常丰富。在你的情况下,你需要InternetSetOption和INTERNET\u OPTION\u CLIENT\u CERT\u CONTEXTOk,WinInet似乎更好,所以我在这里重写了我的问题:我希望这是正确的方法(而不是编辑此方法)。。。