Как сделать SSL запрос.

Данный пример показывает, как установить HTTP соединение через Secure Socket Layer (SSL) или Private Communications Technology (PCT) используя WinInet API-вызовы. Защищённый HTTP (HTTPS://) располагаетня на 443 порту.

Следующий пример может быть использован для установления HTTPS соединения:

   ...
   hOpen = InternetOpen (...);
   Connect = InternetConnect (
                hOpen,                      // обработчик InternetOpen
                "MyHttpServer",             // Имя сервера
      INTERNET_DEFAULT_HTTPS_PORT,// По умолчанию HTTPS порт - 443
                "",                         // Имя пользователя
                "",                         // Пароль пользователя
                INTERNET_SERVICE_HTTP,      // Сервис
      0,                          // Флаги
      0                           // Контекст
                   );
   hReq = HttpOpenRequest (
                hConnect,                // Обработчик InternetConnect
      "GET",                      // Метод
      "",                         // Имя объекта
      HTTP_VERSION,               // Версия
      "",                         // Ссылка (Referer)
                NULL,             // Дополнительные заголовки
      INTERNET_FLAG_SECURE,       // Флаги
      0                           // Контекст
                );
   ... 

Всё отличие при использовании HTTPS вместо HTTP заключается в следующем:

  • InternetConnect использует INTERNET_DEFAULT_HTTPS_PORT вместо INTERNET_INVALID_PORT_NUMBER или INTERNET_DEFAULT_HTTP_PORT

  • HttpOpenRequest использует опцию INTERNET_FLAG_SECURE в добавление ко всем остальным опциям.

Чтобы обойти ошибки сертификации, можно использовать следующие две опции в HttpOpenRequest либо в InternetOpenUrl:

  • INTERNET_FLAG_IGNORE_CERT_CN_INVALID - Игнорирует ошибки, которые могут возникать при несовпадении имени хоста сервера и имени хоста, указанном в запросе.

  • INTERNET_FLAG_IGNORE_CERT_DATE_INVALID - Игнорирует ошибки, связанные с истекшим сроком действия сертификата сервера.

Более полная информация по этим флагам расписана в документации Internet Client SDK.