编辑- 我改变了
method = SSLv23_server_method(); to
method = TLSv1_2_server_method()
;
现在SSL_accept()给我返回了错误的版本号错误。
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:386:
当我列出系统上正在使用的SSL和TLS版本时-
openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1.2
我在这里想念什么?
@jww->给您添加标签因为我注意到您回答了一些与openssl相关的问题。希望你不介意
我的服务器代码中出现SSL_accept()问题。我正在使用openssl 1.0.2g。经过大量研究,我找不到错误的真正原因。
这是我的服务器代码-
open socket , bind to socket, listen on socket
initialize SSL context and libraries. Load certificate and Private key files
{
SSL_load_error_strings();
ERR_load_BIO_strings();
SSL_library_init();
OpenSSL_add_all_algorithms();
const SSL_METHOD *method;
method = SSLv23_server_method();
ctx = SSL_CTX_new(method);
if (SSL_CTX_use_certificate_file(ctx, ccrt, SSL_FILETYPE_PEM) <= 0) {
ERR_print_errors_fp(stdout);
}
if (SSL_CTX_use_PrivateKey_file(ctx, ckey, SSL_FILETYPE_PEM) <= 0 ) {
ERR_print_errors_fp(stdout);
}
pselect() waits on any incoming connections or any reads on existing connections
if new connection - accept() the connection and add to the pselect FD_SET and return
if existing connection, there is something to read so do the following {
SSL *ssl;
if ( !ctx )
{
return 0;
}
ssl = SSL_new(ctx);
SSL_set_fd(ssl, soc);
int ret = SSL_accept(ssl); --> FAILS
if (ret <= 0) {
ERR_print_errors_fp(stdout);
return 0}
}
在打印错误队列时,它显示-
error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:640:
这是版本不匹配(Openssl 1.0.2g)吗?