2010-01-08 109 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意味着成功”。叹息...