aaa2520点滴

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Http Error 12057(转)

产品被报告了一个 Bug, 只发生在特定平台 Windows Server 2003 Standard Edition.

查看 Trace Log 发现 Wininet 调用的封装类 返回 Error 12057, 它的具体错误内容是:

ERROR_WINHTTP_SECURE_CERT_REV_FAILED
12057 Indicates that revocation cannot be checked because the revocation server was offline (equivalent to CRYPT_E_REVOCATION_OFFLINE).
打开 
IE->Tools->Internet Options->Advanced Tab->Security Options->”Check for server certificate revocation(Requires Restart)”
这个选项当前为选中状态(IE8默认是选中的)。取消这个选项,Bug 症状消失。经过测试发现只有 Windows Server 2003 Standard Edition 的 IE 默认选中该项,而且在其他平台即时此选项选中亦不会发生 Error 12057 (Microsoft’s Bug ? or with other options?)。决定通过编码解决这个问题。
其实编码解决这个问题倒是很简单, 在 HttpOpenRequest 后增加如下代码,设置当前 Http 连接选项取消这个检查

DWORD dwFlags = 0;

DWORD dwError = 0;

DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption(m_hRequest, INTERNET_OPTION_SECURITY_FLAGS,

(LPVOID)&dwFlags, &dwBuffLen);

dwFlags |= SECURITY_FLAG_IGNORE_REVOCATION;

InternetSetOption(m_hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, sizeof(dwFlags)) ;

以上是转自网络,

经过测试 xp sp2 window7 也有这样的bug 和ie版本有关系

delphi 代码:

    InternetQueryOption(HRequest, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@Flags), FlagsLen);    

 Flags := Flags or SECURITY_FLAG_IGNORE_REVOCATION;    

 InternetSetOption(HRequest, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@Flags), FlagsLen);

 

 

posted on 2011-11-26 16:56  aaa2520  阅读(1871)  评论(0编辑  收藏  举报