最近亞馬遜已禁用S3桶的SSL支持,它似乎在Win XP SP3上導致問題。 我使用此代碼WinHttp不從WinXP上的Amazon S3下載
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);
這適用於Win7和工作了一個月前在WinXP。但是現在我得到WinHttp錯誤12152:服務器返回無效或無法識別的響應。我已經啓用跟蹤和記錄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]
有沒有辦法解決這個問題,而無需使用第三方庫? (瀏覽器,包括IE,下載文件沒有問題)。
DWORD值應該是0,對嗎? :) – Sergi0
我現在接受你的解決方案,它確實解決了這個問題,但我不確定禁用最終用戶PC上的協議是個好主意:)也許後來有人提出更好的方法或解釋底層問題。 – Sergi0
是的,0!遺憾的是遺憾。我同意這不是一個可行的解決方案,我仍然試圖找出究竟是什麼導致密碼使連接握手失敗。 –