2014-06-19 70 views
1

我正在嘗試使用SSL創建服務器客戶端程序。我在SSL_connect()方面遇到了一些問題:當我調用它時,它不會再次返回,它只是掛在那裏,客戶端程序一直運行並且服務器停止等待握手完成。一旦我終止了客戶端進程,服務器會說安全連接失敗,所以我幾乎100%肯定這不是服務器的錯誤,因爲它等待連接,並試圖正常接受它(SSL_accept())。SSL_connect()不返回

另外,當我的客戶端調用SSL_connect()時,它在我的stdout上輸出了很多垃圾字符,不知道爲什麼。

下面是我的連接函數的代碼:

if((sslconnection = SSL_new(ctx)) == NULL){ 
    return NULL; 
} 

if(SSL_set_fd(sslconnection, socketd) != 1){ 
    return NULL; 
} 

printf("We have no problem until here\n"); 

if((debug = SSL_connect(sslconnection)) == 1){ 
    printf("You won't see this, it's hanged\n"); 
    return sslconnection; 
} 
printf("Neither will you see this\n"); 

CTX和socketd預先初始化,當然。 在此先感謝,夥計們,歡迎任何幫助!

編輯:如果我使用SSLv23_method()創建我的SSL背景下,當客戶端掛起,如果我按「確認」鍵幾次,它會顯示在終端上這樣一條消息:

error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 

否則,如果我使用SSLv3_method(),按「ENTER」鍵會給我這個消息:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol 

我想有一個與我的客戶端 - 服務器程序,這是非常奇怪的,因爲他們的SSL版本中的問題使用相同的函數進行初始化他們自己的SSL_ctx,因此他們使用相同的SSLvX_method()來創建上下文,所以他們不理解對方的SSL版本對我來說沒有任何意義...

+0

Stack Overflow有幾個「SSL_connect hang」問題。也許其中一個可以幫助你:[ssl_connect hang site:stackoverflow.com](http://www.google.com/search?q=ssl_connect+hang+site%3Astackoverflow.com)。 – jww

+0

如果按Enter鍵時出現SSL錯誤,則可能使用SSL_set_fd附加了標準輸入(例如文件描述符0),但不是連接到另一端的fd。在調用SSL_connect之前,請檢查socketfd是否是您連接的套接字。 –

+0

尷尬:我給我的連接函數一個隨機初始化的未使用的int作爲套接字而不是我爲它打開的那個,我從服務器文件複製的代碼產品,然後修改...非常感謝Steffen,你救了我! –

回答

0

如果它幫助那裏的人:出來那是我用來做SSL_connect()的一個錯誤的套接字描述符,就像Steffen所說的那樣。在代碼的某處我弄亂了描述符。