【问题标题】:SSL_CTX_use_PrivateKey_file fail under LinuxLinux 下 SSL_CTX_use_PrivateKey_file 失败
【发布时间】:2011-01-02 23:40:04
【问题描述】:

我正在尝试在 Linux 下使用 OpenSSL 中的 SSL_CTX_use_PrivateKey_file 函数,但它返回 false。周围的代码已经从 Windows 移植过来,一切运行良好。根据系统的不同,有什么必须做不同的事情吗?

我自己在 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

有人有想法吗?

【问题讨论】:

  • 使用SSL_load_error_strings(),然后使用ERR_get_error()ERR_error_string() 获取错误并将其转换为可读形式。

标签: c++ linux openssl


【解决方案1】:

为了简单起见,我从密码回调中删除了所有代码,并使用了简单的pBuf = "mypass"; return 6; 这将是回调函数的最低限度。这工作得很好。

那么 Windows 代码和 Linux 代码有什么不同呢?好吧,分别调用strcpy_sstrcpy 是代码中的唯一区别。这两者有什么不同(除了额外的验证参数)?

为了验证字符串复制操作是否成功,代码只需检查是否等于 0。但是,这两个复制函数对它们的返回值有不同的规范。微软将“strcpy”的返回行为从“0 表示错误”改为“0 表示成功”。 唉……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多