2012-12-28 37 views
2

我有一個工作的客戶端和一個服務器,一旦完成就會有一個有效的SSL證書。OpenSSL WinINET客戶端

目前,用於測試的平均值,我只是通過添加標誌INTERNET_FLAG_IGNORE_CERT_CN_INVALIDSECURITY_FLAG_IGNORE_UNKNOWN_CA這樣禁用SSL驗證的客戶端的需求:

HINTERNET hRequest = HttpOpenRequest(hConnection, 
      "GET","index.html", 
      NULL,NULL,NULL, 
      INTERNET_FLAG_RELOAD| 
      INTERNET_FLAG_EXISTING_CONNECT 
      #ifdef __HTTPS__ 
      | INTERNET_FLAG_SECURE |INTERNET_FLAG_IGNORE_CERT_CN_INVALID|SECURITY_FLAG_IGNORE_UNKNOWN_CA 
      #endif 
      , 
      dwContext); 

我得到這個完美運行在我的筆記本上。現在我正試圖在我的電腦上使用它。完全相同的代碼。複製並粘貼這些文件(包括Visual Studio Professional 2008),現在我得到了12045錯誤。這意味着Invalid Certificate Authority

我試過禁用Windows防火牆,沒有工作。兩臺計算機連接到相同的路由器

任何想法可能導致此?

謝謝!

編輯 基本上發生的事情是一樣的描述here by Microsoft,只有這篇文章是爲Windows CE

+0

_「複製和粘貼文件」 _ - 哪些文件?在客戶端PC的項目中是否定義了__HTTPS__? – CodeCaster

+0

目前它是VS項目中的單個源文件。 是的,'__HTTPS__'被定義。我現在看到了這個https://groups.google.com/forum/?fromgroups=#!topic/microsoft.public.winhttp/mr6mSt7SFYg,但不知道它與它有什麼關係,我很新整個WinAPI的東西 –

回答

2

是否this幫助?

如果服務器SSL證書由未知或無效的證書頒發機構的WinInet HttpSendRequest中的API或MFC CInternetFile :: sendRequest將發行將失敗,錯誤12045(ERROR_INTERNET_INVALID_CA)。

我想你應該呼籲要求InternetSetOption(),發佈它,就像在此之前,因爲HttpOpenRequest() flags不指定SECURITY_FLAG_IGNORE_UNKNOWN_CA

HINTERNET hRequest = HttpOpenRequest(hConnection,... 

#ifdef __HTTPS__ 
    DWORD dwFlags; 
    DWORD dwBuffLen = sizeof(dwFlags); 
    InternetQueryOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); 

    dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA; 

    InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags)); 
#endif 

HttpSendRequest(hRequest,... 
+0

感謝您的回答。我現在收到錯誤'12057',它是'ERROR_WINHTTP_SECURE_CERT_REV_FAILED'。不知道它是什麼意思,但如果我目前從筆記本電腦運行,它仍然可以從那裏運行,所以沒有服務器錯誤 –

+0

正如https://groups.google.com/forum/?fromgroups=#所建議的那樣! topic/microsoft.public.inetsdk.programming.wininet/vVHnFoWZ8no我已將'SECURITY_FLAG_IGNORE_REVOCATION'添加到您的代碼中。現在它工作。謝謝! –

+0

_「但是如果我目前正在從筆記本電腦運行」_ - 您是否在筆記本電腦上生成和/或信任服務器證書?這可以解釋你沒有得到那臺機器上的錯誤。無論如何,證書吊銷檢查[默認爲禁用](http://msdn.microsoft.com/en-us/library/windows/desktop/aa384266(v = vs.85).aspx)。編輯:很好,你解決了它! :-) – CodeCaster