programing

InternetSetOption을 사용하여 자체 서명된 인증서를 무시하는 방법

nicegoodjob 2023. 1. 16. 20:17
반응형

InternetSetOption을 사용하여 자체 서명된 인증서를 무시하는 방법

사용법을 알 수 없을 것 같아요.InternetSetOption()

인터넷 옵션 설정취득의 예에서는,new INTERNET_PER_CONN_OPTION[3];공간을 할당하다INTERNET_PER_CONN_OPTION구조입니다만, 제가 알기론 C에는new키워드가 있어서 이렇게 하려고 했어요.이로 인해 오류가 발생하지는 않지만 자체 서명된 웹 사이트에 대한 요청 문제는 해결되지 않습니다.

int request(char * host, int port,char * endpoint, char * data, size_t dlen )
{
    LPCSTR accept[] = {"*/*", NULL};
    char  hdrs[] = "Content-Type: application/json";
    HINTERNET hConnect, hSession, hRequest;
    hSession = InternetOpen("",
                            INTERNET_OPEN_TYPE_PRECONFIG,
                            NULL,
                            NULL,
                            0);
    INTERNET_PER_CONN_OPTION_LIST list;
    INTERNET_PER_CONN_OPTION ops[1];
    DWORD   dwBufSize = sizeof(list);
    list.dwSize = sizeof(list);
    list.pszConnection = NULL;
    list.dwOptionCount = 1;
    list.pOptions = ops;
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = SECURITY_FLAG_IGNORE_UNKNOWN_CA ;
    hConnect = InternetConnect(hSession,
                                host,
                                port,
                                NULL,
                                NULL,
                                INTERNET_SERVICE_HTTP,0,1);
    hRequest = HttpOpenRequest(hConnect,
                                "GET", 
                                endpoint,
                                _T("HTTP/1.1"),
                                NULL,
                                accept,
                                INTERNET_FLAG_IGNORE_CERT_CN_INVALID|INTERNET_FLAG_SECURE,1);
    if (!InternetSetOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, &list, dwBufSize))
        printf("Failed to set options Error: %ld\n", GetLastError());
    if (hRequest == NULL)
        printf("Error: %ld\n", GetLastError());
    if (HttpSendRequest(hRequest, hdrs, strlen(hdrs), data, dlen))
    {
        DWORD received;
        char tmp[MAX_LEN];
        while (InternetReadFile(hRequest, tmp, MAX_LEN, &received) && received)   
            printf("%s\n", tmp);
    }
    return 0;
}

어떻게 사용합니까?InternetSetOption()설정하다SECURITY_FLAG_IGNORE_UNKNOWN_CA?

언급URL : https://stackoverflow.com/questions/73593385/how-to-use-internetsetoption-to-ignore-self-signed-certificates

반응형