在win32控制臺運行沒有問題,我按照原來的直接復制過來,修改了要修改的變數,上面都運行過來了,唯獨 ssl_accept回傳-1 麻煩大神幫忙看看,是不是 mfc 和win32之間 用的時候要注意什么,是不是要添加什么東西,代碼直接復制到 win32控制臺 編譯運行沒有任何問題~
附上代碼
SOCKADDR_IN serverin; //服務器資訊
SOCKADDR_IN clientin;//客戶端資訊
int len=sizeof(clientin);
SOCKET m_socket_server; //服務端套接字
SOCKET m_socket_Client; //客戶端套接字
int err; //回傳錯誤資訊
SSL *ssls;
SSL_CTX *ctxs;
SSL_METHOD *meths;
OpenSSL_add_ssl_algorithms();//初始化SSL
OpenSSL_add_all_algorithms();//初始化所有演算法
SSL_load_error_strings();//SSL錯誤資訊初始化
//創建本次所使用的協議
meths = (SSL_METHOD *)TLSv1_server_method();
//申請SSL會話環境
ctxs=SSL_CTX_new(meths);
if (ctxs==NULL)
{
return false;
}
//設定會話的握手方式并加載Ca證書
SSL_CTX_set_verify(ctxs,SSL_VERIFY_PEER,NULL);//設定握手方式
SSL_CTX_load_verify_locations(ctxs,VERIFYCA,NULL);
//加載要使用的證書
//服務端證書
if(SSL_CTX_use_certificate_file(ctxs,VERIFYSERVER,SSL_FILETYPE_PEM)<0)
{
return false;
}
//服務端鑰匙
if (SSL_CTX_use_PrivateKey_file(ctxs,VERIFYSERVERKEY,SSL_FILETYPE_PEM)<0)
{
return false;
}
//檢測證書是否和秘鑰是否匹配
if (!SSL_CTX_check_private_key(ctxs))
{
return false;
}
//設定加密方式
if (SSL_CTX_set_cipher_list(ctxs,"RC5-MD5")<0)
{
return false;
}
//處理多次握手
SSL_CTX_set_mode(ctxs,SSL_MODE_AUTO_RETRY);
USES_CONVERSION;
//創建套接字
m_socket_server=::WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,NULL);
if (m_socket_server == INVALID_SOCKET)
{
TRACE("Create Socket fail,Code:%s\r\n",GetLastError());
return false;
}
serverin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
serverin.sin_family = AF_INET;
serverin.sin_port = htons(8866);
//系結
err=::bind(m_socket_server,(SOCKADDR*)&serverin,sizeof(serverin));
if (err<0)
{
return false;
}
//監聽
err=::listen(m_socket_server,5);
if (err<0)
{
return false;
}
m_socket_Client=::accept(m_socket_server,(SOCKADDR*)&clientin,&len);
if (m_socket_Client==INVALID_SOCKET)
{
return FALSE;
}
closesocket(m_socket_server);//洗掉就套接字,使用新的套接字
//系結套接字
ssls=SSL_new(ctxs);
if (ssls==NULL)
{
return false;
}
//申請一個SSL套接字連接
err=SSL_set_fd(ssls,m_socket_Client);
if (err<0)
{
return false;
}
//SSL握手
err=SSL_accept(ssls); ///就是這里,回傳-1 移植到控制臺運行,是沒有任何問題的
if (err<0)
{
int ret=SSL_get_error(ssls,1);
TRACE("錯誤代碼:%s\r\n",SSL_state_string_long(ssls));
return false;
}
下面的代碼就不給了,因為到這里就出錯了!!!
uj5u.com熱心網友回復:
自己頂一下,麻煩不要沉下去呀,大神們,幫幫忙看看,謝謝!
uj5u.com熱心網友回復:
回復一下,ssl_accept 這里回傳-1 我用 TRACE("錯誤代碼:%s\r\n",SSL_state_string_long(ssl)); 獲取的是 錯誤代碼:SSLv3 read client hello C 請問這個是什么原因?uj5u.com熱心網友回復:
樓主你解決了嗎?也遇到類似的問題了。uj5u.com熱心網友回復:
你這個是證書錯誤,客戶端沒有可以使用的證書檔案轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/130532.html
標籤:基礎類
上一篇:在控制元件上繪圖,被覆寫了
