我在底层套接字(在本例中是一个(lib)ssh2隧道通道)和BIO之间建立链接以进行握手时出现问题。
出现问题的原因是:我想与之握手的服务器最初不是SSL加密服务器,必须告知SSL_connect()/握手之前打开SSL。具体来说,它是一个具有SSL扩展名的FTP服务器。
我在下面提供我的代码(在caf的帮助下)。
首先建立一个隧道通道,在该通道上发送SSL加密的初始请求(明文中为“AUTH SSL”)。当我试图协商握手时会出现困难,因为我认为没有数据可以进行握手。
代码: http://pastebin.com/TG8RMyWx
不知怎的,似乎我需要在“握手期间”在通道和BIO之间传输数据,但我没看到怎么样?
我已经能够通过一个BIO(作为localhost的套接字)建立到外部SSH隧道的SSL连接(只需运行OpenSSH的ssh -f user @ host -L 21:remote_host:21-N)所以我猜我的麻烦就像上一段所说的那样。
非常感谢任何提示,谢谢!
答案 0 :(得分:0)
我现在可以看到两件事:
您的BIO未正确初始化。使用BIO_new_bio_pair(&rbio, 0, &wbio, 0);
代替BIO_make_bio_pair()
来电;
修复后,SSL_connect()
将返回SSL_ERROR_WANT_READ
/ SSL_ERROR_WANT_WRITE
- 然后您需要将其置于循环中,例如{{1} }。