什么';这个SSL握手客户端Hello记录有什么问题?

什么';这个SSL握手客户端Hello记录有什么问题?,ssl,Ssl,我正在尝试使用windows socket“手动”实现SSL 3.0(我知道openSSL和MS SSL API已经存在,但我只是想从内部视图中学习它) 我用于启动新SSL会话的第一条消息(记录),即我发送到SSL服务器(real Server,like)的第一条TCP消息,与此完全相同(十六进制): 但是服务器对我的响应(十进制): 通过引用,我知道SSL握手协议失败了,但没有任何关于原因的线索。出了什么问题?有: 命名事物 缓存失效 一个接一个的错误 您的16字节数据实际上是17字节,使标题

我正在尝试使用windows socket“手动”实现SSL 3.0(我知道openSSL和MS SSL API已经存在,但我只是想从内部视图中学习它)

我用于启动新SSL会话的第一条消息(记录),即我发送到SSL服务器(real Server,like)的第一条TCP消息,与此完全相同(十六进制):

但是服务器对我的响应(十进制):

通过引用,我知道SSL握手协议失败了,但没有任何关于原因的线索。出了什么问题?

有:

  • 命名事物
  • 缓存失效
  • 一个接一个的错误
  • 您的16字节数据实际上是17字节,使标题中的“后续数据长度”减少了1

     $ xxd data.dat
     0000000: bb80 f38c 5ddb f76c 9456 d834 7ab5 9d02  ....]..l.V.4z...
     0000010: 00                                       .
    
     $ wc -c data.dat
     17 data.dat
    
    在我看来,随机数据中的尾随
    00

    如果我可以补充的话,您可以使用openssl测试您的实现,只要将您发送的内容与它发送的内容进行比较(我就是这样找到这个的)。使用
    s_client
    功能的
    -ssl3
    -debug
    标志,如下所示:

     openssl s_client -connect yahoo.com:443 -ssl3 -debug
    
    我使用的openssl(我自己在WindowsXP上构建的1.0.1c)发送的数据比你多,但它可能会派上用场

     Loading 'screen' into random state - done
     CONNECTED(00000724)
     write to 0xac7fc0 [0xad1abb] (152 bytes => 152 (0x98))
     0000 - 16 03 00 00 93 01 00 00-8f 03 00 52 58 68 2c 6f   ...........RXh,o
     0010 - 3b 22 89 66 14 e5 c4 fa-14 81 43 e6 48 31 a4 74   ;".f......C.H1.t
     0020 - 96 67 6f a1 86 d0 08 8f-ef 1e bc 00 00 68 c0 14   .go..........h..
     0030 - c0 0a c0 22 c0 21 00 39-00 38 00 88 00 87 c0 0f   ...".!.9.8......
     0040 - c0 05 00 35 00 84 c0 12-c0 08 c0 1c c0 1b 00 16   ...5............
     0050 - 00 13 c0 0d c0 03 00 0a-c0 13 c0 09 c0 1f c0 1e   ................
     0060 - 00 33 00 32 00 9a 00 99-00 45 00 44 c0 0e c0 04   .3.2.....E.D....
     0070 - 00 2f 00 96 00 41 00 07-c0 11 c0 07 c0 0c c0 02   ./...A..........
     0080 - 00 05 00 04 00 15 00 12-00 09 00 14 00 11 00 08   ................
     0090 - 00 06 00 03 00 ff 01                              .......
     0098 - <SPACES/NULS>
    
    将“屏幕”加载到随机状态-完成
    已连接(00000724)
    写入0xac7fc0[0xad1abb](152字节=>152(0x98))
    0000-16 03 00 93 01 00 00-8f 03 00 52 58 68 2c 6f
    0010-3b 22 89 66 14 e5 c4 fa-14 81 43 e6 48 31 a4 74;“.f……C.H1.t
    0020-96 67 6f a1 86 d0 08 8f ef 1e bc 00 00 68 c0 14.开始……h。。
    0030-C00A c0 22 c0 21 00 39-00 38 00 88 00 87 c0 0f…”。!。9.8......
    0040-c0 05 00 35 00 84 c0 12-c0 08 c0 1c c0 1b 00 16…5。。。。。。。。。。。。
    0050-00 13 c0 0d c0 03 00 0a-c0 13 c0 09 c0 1f c0 1e。。。。。。。。。。。。。。。。
    0060-00 33 00 32 00 9a 00 99-00 45 00 44 c0 0e c0 04.3.2…..E.D。。。。
    0070-00 2f 00 96 00 41 00 07-c0 11 c0 07 c0 0c c0 02./…A。。。。。。。。。。
    0080 - 00 05 00 04 00 15 00 12-00 09 00 14 00 11 00 08   ................
    0090-00 06 00 03 00 ff 01。。。。。。。
    0098 - 
    
    实时解码有效载荷的一种快速方法是观察它


    您还可以针对
    s\u服务器
    测试您的实现。使用您的客户机和您拥有密钥的openssl服务器,您可以实时查看加密流量的内部情况。

    @EJP:我不想实现SSL的所有方面,只想实现仅带有AES_128和SHA512的V3.0。没有CA(自我签名),没有会话,没有重新协商,等等,我希望这不是太雄心勃勃?无论这段旅程在哪里结束,你都会学到很多关于SSL的知识。从头开始重新实现SSL是一项庞大、复杂且雄心勃勃的任务,但您将其范围尽可能小。尽你所能去实现它,并坚持下去,直到它不再有趣。谢谢@ixe013,你启发了我。我会继续转发,直到不再有趣。非常感谢。我将尝试观察openSSL的调试模式。但是OpenSSL是否向我解释了记录的哪一部分是什么?除了冗长、枯燥和抽象的RFC之外,您是否有任何文档可以用其他示例向我解释SSL记录格式?虽然有一些文档,但RFC和源代码通常是正确的并经过测试的。所以我通常坚持读下去,一遍又一遍地慢慢读。这最终会有意义的。Wireshark是你解码你发送的内容的朋友。我在回答中提到了这一点,并链接到了SSL页面。我再次阅读了RFC,并将代码改成了一个不错的形式。但事情还是不顺利。我想我需要一个家庭教师。Wireshark只帮我观察流量,但它没有告诉我SSL记录中的内容。无论如何,谢谢。这可能会有帮助-TLS字节解释
     openssl s_client -connect yahoo.com:443 -ssl3 -debug
    
     Loading 'screen' into random state - done
     CONNECTED(00000724)
     write to 0xac7fc0 [0xad1abb] (152 bytes => 152 (0x98))
     0000 - 16 03 00 00 93 01 00 00-8f 03 00 52 58 68 2c 6f   ...........RXh,o
     0010 - 3b 22 89 66 14 e5 c4 fa-14 81 43 e6 48 31 a4 74   ;".f......C.H1.t
     0020 - 96 67 6f a1 86 d0 08 8f-ef 1e bc 00 00 68 c0 14   .go..........h..
     0030 - c0 0a c0 22 c0 21 00 39-00 38 00 88 00 87 c0 0f   ...".!.9.8......
     0040 - c0 05 00 35 00 84 c0 12-c0 08 c0 1c c0 1b 00 16   ...5............
     0050 - 00 13 c0 0d c0 03 00 0a-c0 13 c0 09 c0 1f c0 1e   ................
     0060 - 00 33 00 32 00 9a 00 99-00 45 00 44 c0 0e c0 04   .3.2.....E.D....
     0070 - 00 2f 00 96 00 41 00 07-c0 11 c0 07 c0 0c c0 02   ./...A..........
     0080 - 00 05 00 04 00 15 00 12-00 09 00 14 00 11 00 08   ................
     0090 - 00 06 00 03 00 ff 01                              .......
     0098 - <SPACES/NULS>