Wininet и самоподписаный сертификат

Тема в разделе "WASM.WIN32", создана пользователем M0rg0t, 5 май 2022.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.453
    Есть локальный сервер, с кривым https сертификатом, самоподписанным (но не доверенным для компа). Как можно открыть такую страницу с помощью Wininet? Флаги игнорить ошибки указывал, один фиг не открывает ,InternetOpenUrl возвращает ERROR_INTERNET_INVALID_CA

    Код (C):
    1.  
    2. void test()
    3. {
    4. HINTERNET hOpen, hUrl;
    5. hOpen = InternetOpenW(L"User-Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    6. DWORD dwFlags = INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_SECURE;
    7. hUrl = InternetOpenUrlW(hOpen, L"https://localhost/", NULL, 0, dwFlags, 0);
    8.  
    9. if (hUrl) InternetCloseHandle(hUrl);
    10. if (hOpen) InternetCloseHandle(hOpen);
    11. }
    12.  
    Или надо только вручную добавлять серт в доверенные и т.д.?
     
  2. darkdevel

    darkdevel New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2017
    Сообщения:
    17
    емнип, с InternetOpenUrlW - никак. только с полным алгоритмом: InternetConnectW / HttpOpenRequestW / InternetQueryOption + InternetSetOption / HttpSendRequestW ...
     
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.453
    Там тоже не получается. Да ладно, оно того не стоит - проще купить в инете сервер с letsencrypt, чем со всем этим разобраться.

    Код (Text):
    1.  
    2.     HINTERNET hOpen, hConnect,hReq;
    3.    
    4.     hOpen = InternetOpenW(L"User-Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    5.  
    6.     hConnect = InternetConnectW(hOpen, L"localhost", INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    7.  
    8.  
    9.     DWORD dwFlags = INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | INTERNET_FLAG_SECURE | SECURITY_FLAG_IGNORE_UNKNOWN_CA;
    10.  
    11.     hReq = HttpOpenRequestW(hConnect, L"GET", L"/1.php", NULL, NULL, 0, dwFlags | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_SECURE, 1);
    12.  
    13.     HttpSendRequestW(hReq, NULL, 0, NULL, 0);
    14.  
    15.     if (GetLastError() == ERROR_INTERNET_INVALID_CA)
    16.     {
    17.         DWORD dwFlags;
    18.         DWORD dwBuffLen = sizeof(dwFlags);
    19.  
    20.         InternetQueryOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
    21.             (LPVOID)&dwFlags, &dwBuffLen);
    22.  
    23.         dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
    24.         InternetSetOption(hReq, INTERNET_OPTION_SECURITY_FLAGS,
    25.             &dwFlags, sizeof(dwFlags));
    26.     }
    27.     HttpSendRequestW(hReq, NULL, 0, NULL, 0);