服务器在HTTPS连接上返回HTTP 404错误。 200连接HTTP

时间:2015-04-08 10:46:18

标签: ssl windows

我有一个客户端应用程序使用WinHttp库与实现IPP(互联网打印协议)的安全服务器通信。

HINTERNET m_hRequest = WinHttpOpenRequest(m_hConnect, L"POST",L"/ipp",
                                L"HTTP/1.1", WINHTTP_NO_REFERER,
                                WINHTTP_DEFAULT_ACCEPT_TYPES,
                                m_secure); //WINHTTP_SECURE
 if (!m_hRequest){
    printf("WinHttpOpenRequest: Error %d has occurred.",GetLastError());
    return 0;
}               

//没有提供客户端证书,因为服务器不需要。

bResults = WinHttpSetOption( m_hRequest, WINHTTP_OPTION_CLIENT_CERT_CONTEXT, WINHTTP_NO_CLIENT_CERT_CONTEXT, 0); 
 if (!bResults){
    printf("WinHttpSetOption: Error %d has occurred.",GetLastError());
    return 0;
}               

//忽略未知CA和CN不匹配网址

等安全错误
DWORD secIgnore = SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE;
    bResults = WinHttpSetOption(m_hRequest,WINHTTP_OPTION_SECURITY_FLAGS,&secIgnore,sizeof(DWORD));
     if (!bResults){
        printf("WinHttpSetOption: Error %d has occurred.",GetLastError());
        return 0;
    }               
bResults = WinHttpSendRequest(m_hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
 if (!bResults){
    printf("WinHttpSendRequest: Error %d has occurred.",GetLastError());
    return 0;
}               

bResults = WinHttpReceiveResponse(m_hRequest, NULL);

现在我应该在内容中获得200 OK和IPP响应。 我得到的是找不到404资源。

其他观察: 。同一段代码工作到端口631(默认) 。 OpenSSL发出相同的POST命令。它得到了适当的回应 。使用原始套接字和Windows SChannel实现的类似软件似乎工作正常 。 SSL握手似乎很好,以双向加密的应用程序数据结束(在Wireshark中验证)

我很困惑为什么会失败。

WinHttp中存在问题吗?  服务器SSL版本不正确吗?  我仍然强烈怀疑SSL层出现了问题

请有人帮忙。如果需要,我可以提供Wireshark日志。

谢谢, 希亚姆。

1 个答案:

答案 0 :(得分:2)

这似乎是服务器配置的一个问题。例如:如果您使用apache 2服务器,则可以在de default-site和default-ssl-site中配置内容的位置。完成此操作后,您将拥有Web服务器搜索内容的其他位置,并返回404,因为它不存在