我知道有一连串的问题(和答案),但我找不到一个让我感动的问题......
我正在尝试创建一个SSL客户端/服务器应用并获取:
SSL_accept()返回-1
SSL_accept()中的错误:1
错误:错误:1408A0C1:SSL例程:SSL3_GET_CLIENT_HELLO:无共享密码
我真的不明白我做错了什么:(
在任何OpenSSL呼叫之前都进行呼叫
SSL_load_error_strings();
SSL_library_init();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
服务器(剪断缩短):
<Created socket and set it to listen to port 8888>
<Bind and make it listen>
while (1)
{
client = accept( server, (sockaddr*) &clientsockaddrin, &len );
SSL_CTX *ctx = SSL_CTX_new( SSLv3_server_method() );
BIO* bio = BIO_new_file( "dh1024.pem", "r" );
DH* ret = PEM_read_bio_DHparams( bio, NULL, NULL, NULL );
BIO_free( bio );
SSL_CTX_set_tmp_dh( ctx, ret );
RSA* rsa = RSA_generate_key( 1024, RSA_F4, NULL, NULL );
SSL_CTX_set_tmp_rsa( ctx, rsa );
SSL_CTX_set_cipher_list( ctx, "ALL" );
SSL* ssl = SSL_new(ctx);
BIO* sslclient = BIO_new_socket(client, BIO_NOCLOSE);
SSL_set_bio(ssl, sslclient, sslclient);
int r = SSL_accept( ssl );
if (r != 1)
{
printf("SSL_accept() returned %d\n", r);
printf("Error in SSL_accept(): %d\n", SSL_get_error(ssl, r));
char error[65535];
ERR_error_string_n(ERR_get_error(), error, 65535);
printf("Error: %s\n\n", error);
ERR_print_errors(sslclient);
int err = WSAGetLastError();
printf("WSA: %d\n", err);
// We failed to accept this client connection.
// Ideally here you'll drop the connection and continue on.
break;
}
}
客户是:
SSLSocket *sslSocket = NULL;
SSL_CTX *ctx = NULL;
ctx = SSL_CTX_new( SSLv3_client_method() );
adaptor->SetCipherList( ctx, std::string( "ALL" ) );
sslSocket = static_cast<SSLSocket *>( adaptor->Connect( ctx, "localhost", 8888 ) );
if ( sslSocket == NULL )
{
std::cout << "Unable to connect to service... aborting!" << std::endl;
return;
}
我花了几天时间(我的头发留下了什么),所以任何帮助都会被感激地接受!!
答案 0 :(得分:0)
我很抱歉将此贴为&#34;答案&#34;因为这更像是对你寻找答案的调查。我注意到RFC 4492需要一个兼容曲线列表,它是OpenSSL Elliptic Curves支持的集合的子集,因此提供非TLSv1.2兼容曲线可能是问题的一部分,但是从我已经看到了无法做到的事情。 (抱歉集思广益)。
我想知道你是否能够克服这个问题,如果是,那怎么回事?希望你为了自己的利益而做了和。