2

我有一个工作客户端和一个服务器,一旦完成,它就会有一个有效的 SSL 证书。

目前,为了进行测试,我只是通过添加标志来禁用客户端中 SSL 验证的需要,INTERNET_FLAG_IGNORE_CERT_CN_INVALID如下SECURITY_FLAG_IGNORE_UNKNOWN_CA所示:

HINTERNET hRequest = HttpOpenRequest(hConnection,
           "GET","index.html",
           NULL,NULL,NULL,
           INTERNET_FLAG_RELOAD|
           INTERNET_FLAG_EXISTING_CONNECT
           #ifdef  __HTTPS__
           | INTERNET_FLAG_SECURE |INTERNET_FLAG_IGNORE_CERT_CN_INVALID|SECURITY_FLAG_IGNORE_UNKNOWN_CA
           #endif
           ,
           dwContext);

我让它在我的笔记本电脑上完美运行。现在我正试图在我的电脑上使用它。完全相同的代码。复制并粘贴了文件(均为 Visual Studio Professional 2008),现在12045出现错误。意思是Invalid Certificate Authority

我试过禁用 Windows 防火墙,没有用。两台电脑连接到同一个路由器

有什么想法会导致这种情况吗?

谢谢!

编辑基本上发生的情况与Microsoft 此处 描述的相同,只有本文适用于Windows CE

4

1 回答 1

2

有帮助吗?

如果服务器 SSL 证书由未知或无效的证书颁发机构 WinInet HttpSendRequest API 或 MFC CInternetFile::SendRequest 将失败并出现错误 12045 (ERROR_INTERNET_INVALID_CA)。

我认为您应该InternetSetOption()在发出请求之前调用请求,就像这样,因为HttpOpenRequest()标志没有指定SECURITY_FLAG_IGNORE_UNKNOWN_CA

HINTERNET hRequest = HttpOpenRequest(hConnection,...

#ifdef  __HTTPS__
    DWORD dwFlags;
    DWORD dwBuffLen = sizeof(dwFlags);
    InternetQueryOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen);

    dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;

    InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags));
#endif

HttpSendRequest(hRequest,...
于 2012-12-28T15:12:15.700 回答