MySQL登陆的二次鉴权问题

客户端登录到MySQL的方式,是经典的三次握手方式,相关资料网上都有,不再赘述。但今天采用php5.5的mysql_connect方式登陆mysql5.6以上版本时, 发现登陆方式不是3次握手,而是5次握手。 这是tcpdump出来的包:

22:04:17.476594 IP 10.10.225.193.mysql > 10.10.117.26.50666: Flags [S.], seq 1383769468, ack 3669311543, win 14020, options [mss 1414,sackOK,TS val 2879321384 ecr 2223682561,nop,wscale 9], length 0
        0x0000:  4500 003c 0000 4000 3f06 d0cc 0a0a e1c1  E..<..@.?.......
        0x0010:  0a0a 751a 0cea c5ea 527a a57c dab5 4037  ..u.....Rz.|..@7
        0x0020:  a012 36c4 e75b 0000 0204 0586 0402 080a  ..6..[..........
        0x0030:  ab9e f528 848a b401 0103 0309            ...(........
22:04:17.476623 IP 10.10.117.26.50666 > 10.10.225.193.mysql: Flags [.], ack 1, win 111, options [nop,nop,TS val 2223682562 ecr 2879321384], length 0
        0x0000:  4500 0034 f438 4000 4006 db9b 0a0a 751a  E..4.8@.@.....u.
        0x0010:  0a0a e1c1 c5ea 0cea dab5 4037 527a a57d  ..........@7Rz.}
        0x0020:  8010 006f 4c50 0000 0101 080a 848a b402  ...oLP..........
        0x0030:  ab9e f528                                ...(
22:04:17.477131 IP 10.10.225.193.mysql > 10.10.117.26.50666: Flags [P.], seq 1:94, ack 1, win 28, options [nop,nop,TS val 2879321384 ecr 2223682562], length 93
        0x0000:  4500 0091 5055 4000 3f06 8022 0a0a e1c1  E...PU@.?.."....
        0x0010:  0a0a 751a 0cea c5ea 527a a57d dab5 4037  ..u.....Rz.}..@7
        0x0020:  8018 001c 253c 0000 0101 080a ab9e f528  ....%<.........(
        0x0030:  848a b402 5900 0000 0a35 2e36 2e32 302d  ....Y....5.6.20-
        0x0040:  7563 6c6f 7564 7265 6c31 2d6c 6f67 0088  ucloudrel1-log..
        0x0050:  e873 0147 5a71 4956 562f 2500 fff7 2102  .s.GZqIVV/%...!.
        0x0060:  007f 8015 0000 0000 0000 0000 0000 6860  ..............h`
        0x0070:  2b51 3659 4071 3a6a 2c38 006d 7973 716c  +Q6Y@q:j,8.mysql
        0x0080:  5f6e 6174 6976 655f 7061 7373 776f 7264  _native_password
        0x0090:  00                                       .
22:04:17.477156 IP 10.10.117.26.50666 > 10.10.225.193.mysql: Flags [.], ack 94, win 111, options [nop,nop,TS val 2223682562 ecr 2879321384], length 0
        0x0000:  4500 0034 f439 4000 4006 db9a 0a0a 751a  E..4.9@.@.....u.
        0x0010:  0a0a e1c1 c5ea 0cea dab5 4037 527a a5da  ..........@7Rz..
        0x0020:  8010 006f 4bf3 0000 0101 080a 848a b402  ...oK...........
        0x0030:  ab9e f528                                ...(
22:04:17.477265 IP 10.10.117.26.50666 > 10.10.225.193.mysql: Flags [P.], seq 1:116, ack 94, win 111, options [nop,nop,TS val 2223682562 ecr 2879321384], length 115
        0x0000:  4500 00a7 f43a 4000 4006 db26 0a0a 751a  E....:@.@..&..u.
        0x0010:  0a0a e1c1 c5ea 0cea dab5 4037 527a a5da  ..........@7Rz..
        0x0020:  8018 006f 6b89 0000 0101 080a 848a b402  ...ok...........
        0x0030:  ab9e f528 6f00 0001 85a2 0e00 0000 00c0  ...(o...........
        0x0040:  2100 0000 0000 0000 0000 0000 0000 0000  !...............
        0x0050:  0000 0000 0000 0000 7461 6e67 646f 755f  ........tangdou_
        0x0060:  7465 7374 0014 ca42 1c92 ae99 b645 52b2  test...B.....ER.
        0x0070:  e534 c9b7 f7ed f325 c41a 006d 7973 716c  .4.....%...mysql
        0x0080:  5f6e 6174 6976 655f 7061 7373 776f 7264  _native_password
        0x0090:  0015 0c5f 636c 6965 6e74 5f6e 616d 6507  ..._client_name.
        0x00a0:  6d79 7371 6c6e 64                        mysqlnd
22:04:17.477384 IP 10.10.225.193.mysql > 10.10.117.26.50666: Flags [.], ack 116, win 28, options [nop,nop,TS val 2879321384 ecr 2223682562], length 0
        0x0000:  4500 0034 5056 4000 3f06 807e 0a0a e1c1  E..4PV@.?..~....
        0x0010:  0a0a 751a 0cea c5ea 527a a5da dab5 40aa  ..u.....Rz....@.
        0x0020:  8010 001c 4bd3 0000 0101 080a ab9e f528  ....K..........(
        0x0030:  848a b402                                ....
22:04:17.477520 IP 10.10.225.193.mysql > 10.10.117.26.50666: Flags [P.], seq 94:142, ack 116, win 28, options [nop,nop,TS val 2879321385 ecr 2223682562], length 48
        0x0000:  4500 0064 5057 4000 3f06 804d 0a0a e1c1  E..dPW@.?..M....
        0x0010:  0a0a 751a 0cea c5ea 527a a5da dab5 40aa  ..u.....Rz....@.
        0x0020:  8018 001c 9b39 0000 0101 080a ab9e f529  .....9.........)
        0x0030:  848a b402 2c00 0002 fe6d 7973 716c 5f6e  ....,....mysql_n
        0x0040:  6174 6976 655f 7061 7373 776f 7264 0047  ative_password.G
        0x0050:  5a71 4956 562f 2568 602b 5136 5940 713a  ZqIVV/%h`+Q6Y@q:
        0x0060:  6a2c 3800                                j,8.
22:04:17.477591 IP 10.10.117.26.50666 > 10.10.225.193.mysql: Flags [P.], seq 116:140, ack 142, win 111, options [nop,nop,TS val 2223682563 ecr 2879321385], length 24
        0x0000:  4500 004c f43b 4000 4006 db80 0a0a 751a  E..L.;@.@.....u.
        0x0010:  0a0a e1c1 c5ea 0cea dab5 40aa 527a a60a  ..........@.Rz..
        0x0020:  8018 006f 6b2e 0000 0101 080a 848a b403  ...ok...........
        0x0030:  ab9e f529 1400 0003 ca42 1c92 ae99 b645  ...).....B.....E
        0x0040:  52b2 e534 c9b7 f7ed f325 c41a            R..4.....%..
22:04:17.477813 IP 10.10.225.193.mysql > 10.10.117.26.50666: Flags [P.], seq 142:153, ack 140, win 28, options [nop,nop,TS val 2879321385 ecr 2223682563], length 11
        0x0000:  4500 003f 5058 4000 3f06 8071 0a0a e1c1  E..?PX@.?..q....
        0x0010:  0a0a 751a 0cea c5ea 527a a60a dab5 40c2  ..u.....Rz....@.
        0x0020:  8018 001c 4470 0000 0101 080a ab9e f529  ....Dp.........)
        0x0030:  848a b403 0700 0004 0000 0002 0000 00    ...............

其原因大概是mysql从某个版本后,开始支持插件式登陆。 而php5.5并不支持这个方式,无法按这个方式发送正确协议;为了容错, mysql再次向php5.5发送按照native password登陆的消息, 此后php5.5发送原生的登录包:

22:04:17.477591 IP 10.10.117.26.50666 > 10.10.225.193.mysql: Flags [P.], seq 116:140, ack 142, win 111, options [nop,nop,TS val 2223682563 ecr 2879321385], length 24
        0x0000:  4500 004c f43b 4000 4006 db80 0a0a 751a  E..L.;@.@.....u.
        0x0010:  0a0a e1c1 c5ea 0cea dab5 40aa 527a a60a  ..........@.Rz..
        0x0020:  8018 006f 6b2e 0000 0101 080a 848a b403  ...ok...........
        0x0030:  ab9e f529 1400 0003 ca42 1c92 ae99 b645  ...).....B.....E
        0x0040:  52b2 e534 c9b7 f7ed f325 c41a            R..4.....%..

这个包内容很简单。除了4个字节的头之外,剩下20字节,就是根据密码经过加盐后生成的挑战鉴权数据。 这20个字节,其实在客户端发送的第一个鉴权包中就有:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容