WinINet functions use a simple check against certificates by comparing for matching host names and simple wildcarding rules.
这表明它并没有做太多,并且可以通过例如规避它。伪造自签名证书。
另一方面,KB 182888 "How To Handle Invalid Certificate Authority Error with WinInet"表明 WinInet 函数确实在检查根 CA。
什么是真相?我想要InternetOpenUrl()
如果证书无效则失败。或者,如果它没有失败,则以最简单的方式自行验证证书。我该怎么做?
最佳答案
;博士;是的,InternetOpenUrl() 默认检查证书颁发机构。
我做了一个小测试:
#include <cassert>
#include <iostream>
#include <windows.h>
#include <WinInet.h>
int main(int argc, char *argv[])
{
HINTERNET internet = InternetOpenA("Test Agent",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0);
assert(internet != NULL);
char url[] = "https://urlgoeshere";
HINTERNET connection = InternetOpenUrlA(internet,
url,
NULL,
0,
0,
NULL);
std::cout << "error while opening url " << url << " : "
<< GetLastError()
<< " handle: " << connection << std::endl;
return 0;
}
是的,当使用自签名证书时,它会返回错误代码 12045,即 ERROR_INTERNET_INVALID_CA。
关于c - Windows 上的 InternetOpenUrl 函数是否足够安全?如果没有,如何让它更强大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545544/