Ser*_*gi0 5 ssl winhttp amazon-s3 visual-c++
最近,亚马逊已禁用对S3存储桶的SSL支持,这似乎会导致Win XP SP3出现问题.我用这个代码
hSession = WinHttpOpen(L"MySession",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
if (bHTTPS)
{
DWORD flags = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1;
WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, &flags, sizeof(flags));
}
port = bHTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT;
hConnect = WinHttpConnect(hSession, srv_w, port, 0);
hRequest = WinHttpOpenRequest(hConnect, vrb_w, adr_w, NULL, WINHTTP_NO_REFERER, NULL, WINHTTP_FLAG_REFRESH | (bHTTPS ? WINHTTP_FLAG_SECURE : 0));
if (bHTTPS)
{
DWORD dwSecFlag = SECURITY_FLAG_IGNORE_CERT_CN_INVALID |
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |
SECURITY_FLAG_IGNORE_UNKNOWN_CA |
SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE;
WinHttpSetOption(hRequest, WINHTTP_OPTION_SECURITY_FLAGS, &dwSecFlag, sizeof(dwSecFlag));
}
WinHttpSendRequest(hRequest, hdr_w, (headers != NULL) ? -1 : 0, data, size, size, 0);
WinHttpReceiveResponse(hRequest, NULL);
Run Code Online (Sandbox Code Playgroud)
这适用于Win7,并在WinXP上工作了一个月左右.但是现在我收到WinHttp错误12152:服务器返回了无效或无法识别的响应.我启用了跟踪和log fiel有一个不同的错误:
17:47:47.057 ::*0000001* :: WinHttpSendRequest(0x10a0000, "", 0, 0x0, 0, 0, 0)
17:47:47.135 ::*0000001* :: "s3.amazonaws.com" resolved
17:47:47.307 ::*0000001* :: Winsock/RPC/SSL/Transport error: 0x90312 [SEC_I_CONTINUE_NEEDED]
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题而不使用第三方库?(浏览器,包括IE,下载文件没有问题).
我有同样的问题。我认为这可能是由 XP 上的 WinHTTP 中选择的 SSL_RSA_WITH_3DES_EDE_SHA 密码问题引起的。尝试以下测试:在 XP 计算机上,向该键添加一个名为“Enabled”的新 DWORD 值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168/168
Run Code Online (Sandbox Code Playgroud)
这会禁用该密码,似乎可以解决我的问题。然而,这不是一个理想的解决方案,我仍然不确定根本问题。也许亚马逊使用的任何加密货币提供商都有问题?