2010-01-08 67 views
0

下,我嘗試使用SSL_CTX_use_PrivateKey_file功能OpenSSL的Linux下,但它返回false。周圍的代碼已經從Windows移植到一切正常的地方。根據系統的不同,必須有不同的做法嗎?SSL_CTX_use_PrivateKey_file失敗的Linux

我編譯在Ubuntu下OpenSSL庫自己(默認配置等),並使用Windows預編譯的二進制文件(從OpenSSL的網站鏈接)我。

的證書是在.PEM文件,以及關鍵。此外,還建立了一個密碼。

以下基本上是什麼的完成;

SSL_CTX_set_default_passwd_cb(pContext, passwdCallback); 
SSL_CTX_set_default_passwd_cb_userdata(pContext, (void*)this); 
SSL_CTX_use_certificate_file(pContext, strCertificateFile, SSL_FILETYPE_PEM); 
SSL_CTX_use_Privatekey_file(pContext, strPrivateKeyFile, SSL_FILETYPE_PEM); // fail in Linux but work fine in Windows 

有沒有人有想法?

+0

使用'SSL_load_error_strings()',然後'ERR_get_error()'和'ERR_error_string()'來獲取錯誤並將其轉換爲可讀格式。 – caf 2010-01-11 04:18:48

回答

2

爲了簡單起見,我刪除從我的密碼回調的所有代碼,並有簡單的pBuf = "mypass"; return 6;這將是回調函數的最低性能。這工作得很好。

那麼什麼是Windows代碼和Linux的代碼之間有什麼不同?那麼,分別調用strcpy_sstrcpy是代碼中的唯一區別。這兩者之間有什麼不同(除了附加的驗證參數)?

要驗證字符串複製操作的成功,代碼簡單地檢查相等性爲0.然而,這兩個複製函數的返回值具有不同的規範。微軟將「strcpy」的返回行爲從「0意味着錯誤」改爲「0意味着成功」。嘆息...