c-InternetOpenUrl在Windows上的功能是否足够安全?如果没有,如何让它变得更强



InternetOpenUrl()文档中写道:

WinINet函数通过比较匹配的主机名和简单的通配符规则,对证书进行简单的检查。

这表明它做得不多,可以通过伪造自签名证书来规避。

另一方面,KB 182888"How To Handle Invalid Certificate Authority Error with WinInet"表明WinInet函数确实在与根CA进行检查。

真相是什么?如果证书无效,我希望InternetOpenUrl()失败。或者,如果它没有失败,那么用最简单的方式自己验证证书。我该怎么做?

tl;博士是的,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。

相关内容

最新更新