2010-06-24 54 views
0

我有一個問題,使底層套接字(在這種情況下,(lib)ssh2隧道通道)和BIO之間的鏈接,以進行握手。SSL_connect /從「空」讀取BIO

所有問題的原因是:我希望與之握手的服務器最初不是SSL加密服務器,必須告知在SSL_connect()'ing /握手之前打開SSL。特別是它是一個SSL擴展的FTP服務器。

我在下面提供我的代碼(來自caf的幫助)。

首先建立隧道通道,在該隧道通道上發送初始SSL加密請求(純文本爲「AUTH SSL」)。當我嘗試談判握手時出現困難,因爲如我所見,沒有數據可以進行握手。

代碼: http://pastebin.com/TG8RMyWx

不知怎的,它似乎我需要的「十一五」期間的握手進行信道和生物之間的數據,但我看不出怎麼樣?

我已經能夠建立一個SSL連接到外部SSH隧道(只需運行OpenSSH的ssh -f user @ host -L 21:remote_host:21-N),只需一個BIO(作爲到本地主機的套接字),所以我猜我的麻煩是在前面的段落中提到的。

任何提示,非常感謝,謝謝!

  • 詹姆斯

回答

0

兩件事情我現在可以看到:

  • 你的BIOS不能正常初始化。使用BIO_new_bio_pair(&rbio, 0, &wbio, 0);而不是你的BIO_make_bio_pair()呼叫;

  • 一旦你已經修復了,然後SSL_connect()將返回SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE - 那麼你就需要把它變成一個循環,就像SSL_read()

+0

解決了這個問題。我不知道如何謝謝你,caf :)感謝你對我的耐心,謝謝你的巨大幫助! – James 2010-06-25 06:10:24