DTLS握手問題
一.問題描述:
Mips平臺Openwrt下運行的AC與wtp 握手不成功。而當AC運行在x86平臺Fedora下能跟wtp握手成功。
Dtls使用的是openssl0.8l版本,mips平臺下使用的是編譯好的庫。由於平臺限制,調試困難。於是準備修改openssl源碼並編譯成庫使用。
二.問題定位:
通過抓取AC與WTP握手成功與不成功情況下的通信包,比較發現:
不成功情況:
ClientHello
Verify
Request
Alert
成功情況:
ClientHello
Verify
Request
Client
Hello
Server
Hello
AC端在發送Verify Request 後緊接着發送一個Alert。
通過解析Alert包內容,並參考Rfc2246 4346 4347 得出Alert信息,如下:
0000 01 00 00 00 15 fe
ff 00 00 00 00 00 00 00 01 00
................
0010 02 02 28 ..(
15: Alert
Feff:Version
02: length
02: Fatal (0x01 warning)
28: Handshak
Failture(40)
去源碼中找 發出 HandshakFailtrue
Alert 的語句。
定位到s3_srvr.c 的 ssl3_get_client_hello(SSL *s)
經測試,發現這段代碼有問題:
網上搜索SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
發現問題所在,
三.交叉編譯openssl問題
要生成mips平臺的openssl庫。
生成Makefile文件:
./Configure linux-mips -DB_ENDIAN linux:' mips-linux-gcc'
其中:linux:後的部分指交叉編譯工具鏈位置。