我正在尝试在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
有没有人有想法?
答案 0 :(得分:2)
为了简单起见,我从密码回调中删除了所有代码,并且简单pBuf = "mypass"; return 6;
这将是回调函数的最小值。这很好。
那么Windows代码和Linux代码之间有什么不同?好吧,分别调用strcpy_s
和strcpy
是代码中唯一的区别。这两者之间有什么不同(除了额外的验证参数)?
要验证字符串复制操作是否成功,代码只检查相等为0.但是,两个复制函数的返回值具有不同的规范。微软将“strcpy”的返回行为从“0表示错误”更改为“0表示成功”。叹息......