【问题标题】:InternetOpenUrl with self signed certificate带有自签名证书的 InternetOpenUrl
【发布时间】:2020-07-30 10:01:47
【问题描述】:

以下代码用于下载文件,但如果服务器有自签名证书则不起作用:

DWORD errCode = 0;
HINTERNET intOpenHandle = InternetOpen("Snippet", LOCAL_INTERNET_ACCESS, NULL, 0, 0);
errCode = GetLastError();
if (intOpenHandle != NULL && errCode == ERROR_SUCCESS)
{
    HINTERNET urlOpenHandle = InternetOpenUrl(intOpenHandle, url, NULL, NULL, NULL, NULL);
    errCode = GetLastError();
    if (urlOpenHandle != NULL && errCode == ERROR_SUCCESS)
    {
        ...

有没有办法修改它以使用自签名证书?

【问题讨论】:

  • 你得到的错误代码是什么?否则尝试使用自定义 INTERNET_OPTION_SECURITY_FLAGS docs.microsoft.com/en-us/windows/win32/wininet/option-flags 调用 InternetSetOption(如 SECURITY_FLAG_IGNORE_***)
  • ERROR_INTERNET_INVALID_CA (12045),并尝试使用SECURITY_FLAG_IGNORE_UNKNOWN_CA,但仍然是同样的错误...
  • 你是在 InternetOpenUrl 之前调用它吗?尝试其他 SECURITY_FLAG_IGNORE_ 标志也可以看到:stackoverflow.com/questions/41357008/…
  • InternetOpen()InternetOpenUrl() 调用之间是的,因为后者给出了错误 12045。我会尝试其他 SECURITY_FLAG_IGNORE_* 标志...
  • 试过SECURITY_FLAG_IGNORE_UNKNOWN_CASECURITY_FLAG_IGNORE_WEAK_SIGNATURE,但无济于事...

标签: c++ c ssl winapi


【解决方案1】:

InternetOpenUrl()InternetSetOptions() 似乎不可能:后者需要打开的连接句柄,而不是前者提供的会话句柄。
因此我不得不使用更长的版本:

DWORD errCode = 0;
HINTERNET intOpenHandle = InternetOpen("Snippet", LOCAL_INTERNET_ACCESS, NULL, 0, 0);
if (intOpenHandle != NULL)
{
     HINTERNET httpRequest = HttpOpenRequest(intConnect, "GET", urlPath, NULL, NULL, NULL,
                                             INTERNET_FLAG_SECURE, 0);
     if (httpRequest != NULL)
     {
         DWORD dwFlags;
         DWORD dwBuffLen = sizeof(dwFlags);
         if (InternetQueryOption(httpRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, &dwBuffLen))
         {
             dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_WEAK_SIGNATURE |
                        SECURITY_FLAG_IGNORE_WRONG_USAGE;
             InternetSetOption(httpRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof(dwFlags));
         }
         if (HttpSendRequest(httpRequest, NULL, 0, NULL, 0))
         {
             ...

【讨论】:

  • 如果对您有帮助,您也可以随时accept your own answers
  • 想等待一个upvote,看看它是否对其他人有帮助......
猜你喜欢
  • 2014-05-05
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2020-04-24
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多