tintinweb / scapy-ssl_tls

SSL/TLS layers for scapy the interactive packet manipulation tool
GNU General Public License v2.0
419 stars 156 forks source link

Certificate chains are not correctly dissected #27

Closed alexmgr closed 9 years ago

alexmgr commented 9 years ago

When the server returns a certificate chain, none or only the first certificate is dissected. E.g: using the full_rsa_connection_with_application_data.py against a server returning certificate chains will fail to dissect the chain:

Connected to server: ('www.some_site.com', 443)
###[ SSL/TLS ]###
  \records   \
   |###[ TLS Record ]###
   |  content_type= handshake
   |  version   = TLS_1_0
   |  length    = 0x4a
   |###[ TLS Handshake ]###
   |     type      = server_hello
   |     length    = 0x46
   |###[ TLS Server Hello ]###
   |        version   = TLS_1_0
   |        gmt_unix_time= 1433481119
   |        random_bytes= 'u\xd1\xe7\xe4\x8b\xaf\xa36\x089\x14\x18c\x05\xba$\x1e\xbd\xfa\xcfiW\xb8\x7f\xef\x19~\x1f'
   |        session_id_length= 0x20
   |        session_id= 'i\xb6\xda\xbb\xbd\xf7\xc1}\xb5w\xc5\x02\xdfW\xe6\xfa\xfa\x13z:\xdf\x16\x91\xe4\x02\x81\xd0\xf8\xb7\xb5h6'
   |        cipher_suite= RSA_WITH_RC4_128_SHA
   |        compression_method= NULL
   |        \extensions\
   |###[ TLS Record ]###
   |  content_type= handshake
   |  version   = TLS_1_0
   |  length    = 0x951
   |###[ TLS Handshake ]###
   |     type      = certificate
   |     length    = 0x94d
   |###[ TLS Certificate List ]###
   |        length    = 0x94a
   |        \certificates\
   |         |###[ TLS Certificate ]###
   |         |  length    = 0x51e
   |         |  \data      \
   |         |   |###[ Raw ]###
   |         |   |  load      = '0\x82\x05\x1a0\x82\x04\x02\xa0\x03\x02\x01\x02\x02\x02\tF0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x000D1\x0b0\t\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\n\x13\rGeoTrust Inc.1\x1d0\x1b\x06\x03U\x04\x03\x13\x14GeoTrust SSL CA - G40\x1e\x17\r150506231536Z\x17\r160311161738Z0}1\x0b0\t\x06\x03U\x04\x06\x13\x02US1\x100\x0e\x06\x03U\x04\x08\x13\x07Florida1\x180\x16\x06\x03U\x04\x07\x13\x0fFort Lauderdale1\x1c0\x1a\x06\x03U\x04\n\x13\x13Citrix Systems Inc.1\x0b0\t\x06\x03U\x04\x0b\x13\x02IT1\x170\x15\x06\x03U\x04\x03\x13\x0ewww.citrix.com0\x82\x01"0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\n\x02\x82\x01\x01\x00\xb5s)xd\xbdN\x053\xc9\x0b^M)\xc7\xa6qa\xe3\x04\x00\xd8\x0b\xe2\x8d\x01\xbd\xbd\x06\xe4:=\x9du;\x98q\xddk+\x97\xa8\xddy\x7f\x1e_\xee\xa9\xfeP\x87\x15\xfd\xfe\xa4\x12bU\x14\xbf\xb3\x95\xc7u\x872k\xda\x809@n\x183\xa5`\xd7}\x00\x07\xe1\xa0\xd12\x02\xda\x8eB\xfa,oZ;b\xc0\xa9}C\x97\x0fh\xb6\xe0P\xf5\xf3\xe6T\x0f\r7S\xf1\x9a\x89zK\xa3\x9b\x86\x81\xc3\\j\xfc\xf1\xcbk\xd9\xa03\x00\\s1\x97<J\x19\xa3f4d\x87\xb8\xb4@d\xa5elp%\x901\xc9N\xd6-\x0bo\x0f\x95\xbb\x9d\xc2\xfa]~\x89\xd1g\x8e\x8f:\x81}\xa4\xd5f\xd0qZ\x99\xef\xc3\x06\x15\xdb\xb1\x06\xb1$\xf6\xa5-\x0es@b\x88\xe3Y\xd9T\x84\xa0"!)\x19|\x087\x19\xca\xb2\xa5\xe8\x01\xaaYYi\xb2\xe9\xce\xe0\xe5E\x9e\xfc\x98-_X(z\xa3,\x94\rF\x1d:6\x91Z\x04\x84rCC\xa8\xcd\x02\x03\x01\x00\x01\xa3\x82\x01\xdb0\x82\x01\xd70\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xac2\xedZ\xc9\xe0\xde0\x9c\x90XU&c\xf6r\xa6T_\xe30W\x06\x08+\x06\x01\x05\x05\x07\x01\x01\x04K0I0\x1f\x06\x08+\x06\x01\x05\x05\x070\x01\x86\x13http://gw.symcd.com0&\x06\x08+\x06\x01\x05\x05\x070\x02\x86\x1ahttp://gw.symcb.com/gw.crt0\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x05\xa00\x1d\x06\x03U\x1d%\x04\x160\x14\x06\x08+\x06\x01\x05\x05\x07\x03\x01\x06\x08+\x06\x01\x05\x05\x07\x03\x020\x81\x94\x06\x03U\x1d\x11\x04\x81\x8c0\x81\x89\x82\x15staging-cq.citrix.com\x82\x12support.citrix.com\x82\x10blogs.citrix.com\x82\x16citrixready.citrix.com\x82\x16discussions.citrix.com\x82\x0ewww.citrix.com\x82\ncitrix.com0+\x06\x03U\x1d\x1f\x04$0"0 \xa0\x1e\xa0\x1c\x86\x1ahttp://gw.symcb.com/gw.crl0\x0c\x06\x03U\x1d\x13\x01\x01\xff\x04\x020\x000Z\x06\x03U\x1d \x04S0Q0O\x06\n`\x86H\x01\x86\xf8E\x01\x0760A0?\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x163https://www.geotrust.com/resources/repository/legal0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x7f\xe7Yb\x14\xfdB\'\x91\x9b%\xef\xf54\xa3\xc7\x054OOu-\xb6\xa0\x0fo\x15\xff"\tz\xfd\xd260?~\x1f\xd6\x1ey\x9b4\xb1\xd5`c\xe8\x8d%\x94@n\xbe\x92\xbf}\x84\x9a\xde\xf0\xaa\x1f\xec\x13\xed;f\x8c\xd3J\xe7\xd1\x86k\xcf:\x9b\x02\xf3eV\x83\x1e\xa4\t=\xd9i\xd3\x7f\x9c\x86\x90\xc2\x81\x121r+\x82\xb6Eh\x15\x1aJ#\x87\xc1\x1b\x98\x9b\x86\xfc`\xc0o\x94\x19n\xaf\xb6<\x8d\xc6\x8eNM\xd1=V\xb2\xb7[\xe3\xb4\xf0\xa3\x14\x9d\nO/?\x89\xf3\xcf\xb0\x80f\x8a2\x1b\xf4\xe2L\x04%.\xe5\x1bs\xfb\x86\x88\xe5\xe6\x19\xfe\xe5={\xd9x\xf5\xbd$V\xe8d\x9a\xe1\xde\xea\x9b\xd9\x1a\x97\xd4\xbao\x9c&\x81\xd6\x8f\x1b\xb9\x8b\x13\xb2\x80\xdb\xf5\x87\xb2E%<S\xb5\xbaHn\x9d\xde)\x00*\xcemO?\\\xbc=\xcd$\xbf\xda;\xb6\xf0sh\x06.\xf42Sv\xe6l\xb9m\xf4\xea\xb0E\xc0\x1f\x15D\xc6\x97'
   |         |###[ Raw ]###
   |         |     load      = '\x00\x04&0\x82\x04"0\x82\x03\n\xa0\x03\x02\x01\x02\x02\x03\x02:y0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x000B1\x0b0\t\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\n\x13\rGeoTrust Inc.1\x1b0\x19\x06\x03U\x04\x03\x13\x12GeoTrust Global CA0\x1e\x17\r140908204110Z\x17\r220520204110Z0D1\x0b0\t\x06\x03U\x04\x06\x13\x02US1\x160\x14\x06\x03U\x04\n\x13\rGeoTrust Inc.1\x1d0\x1b\x06\x03U\x04\x03\x13\x14GeoTrust SSL CA - G40\x82\x01"0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x000\x82\x01\n\x02\x82\x01\x01\x00\x9a}\x98h\x11@\xc1_r\xecU\xb3\xb1c\xf32"r\x91\xc6\x16\x05\xbb\x08\x821\xb4\xf6\xee\xd4\x189\x11/.\xdaG\xfeQ1n[\xf2\xa9\n\xeb/\xbb\xf5aYeW\x02\xcd\x80\xff\xc7p2T\x89\xfd\xdb\xae\x99r\xd4O\x0c&\xb9.c0}\xde\x14[j\xd7Rx!\xf9\xbf\xbcP\xd5T\x12Y\xd8\xb56\xd9!G\xb8?jX\x1d\x8cr\xe1\x97\x95\xd3\xe1E\xa8\xf1Z\xe5\xbe\xfe\xe3S|\xa5\xf0R\xe0\xcf9\x94\x0c\x19q\xf2\xc0%\x07H}\x1c\xe6\xf19%/\x98yC\xe8\x18r\xf4e\x86\x98Z\x00\x04G\xdaKX\x1e|\x86\xb1K5\xa6 \x00\x1c\xcd\x1b;"]\xd1\x93(3\x12#\x94\x08\xaa\xc3:\xf5\xd1\xc6\x8c~\x99\xd3\x18\xa0\xad\x9d\x18\xcfI\xad\x10\x03\xf7\x993&\x86F\x9a/\xa0\xbaln\xc8\x88\x02\xb7n\xfaz\x9e\x98J\xee\x9a1}\x19\x14`\x0c\xec\x8f #<\xda\x97&\xb6\xea\x80l\x8aW\x9e \xeeo\x17%J2\xad5\x02\x03\x01\x00\x01\xa3\x82\x01\x1d0\x82\x01\x190\x1f\x06\x03U\x1d#\x04\x180\x16\x80\x14\xc0z\x98h\x8d\x89\xfb\xab\x05d\x0c\x11}\xaa}e\xb8\xca\xccN0\x1d\x06\x03U\x1d\x0e\x04\x16\x04\x14\xac2\xedZ\xc9\xe0\xde0\x9c\x90XU&c\xf6r\xa6T_\xe30\x12\x06\x03U\x1d\x13\x01\x01\xff\x04\x080\x06\x01\x01\xff\x02\x01\x000\x0e\x06\x03U\x1d\x0f\x01\x01\xff\x04\x04\x03\x02\x01\x0605\x06\x03U\x1d\x1f\x04.0,0*\xa0(\xa0&\x86$http://g.symcb.com/crls/gtglobal.crl0.\x06\x08+\x06\x01\x05\x05\x07\x01\x01\x04"0 0\x1e\x06\x08+\x06\x01\x05\x05\x070\x01\x86\x12http://g.symcd.com0L\x06\x03U\x1d \x04E0C0A\x06\n`\x86H\x01\x86\xf8E\x01\x0760301\x06\x08+\x06\x01\x05\x05\x07\x02\x01\x16%http://www.geotrust.com/resources/cps0\r\x06\t*\x86H\x86\xf7\r\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00a@\xad!\x0f\x03\xbb\x95\xdc\x89\xfc\xa3\xcb\x05q\xe9\x1cY\x975\xc2\xfak\x05\xa4\x16\xc6VF7t\x1b\x1b\xf1>,\xe87\x19\xb7\x94\xd2\x0f\x0e\xc5\xbf\x14\x07+4\xcd[\xb4\x8d\xc7V\x9d\x19\xfc\x02\xb4\x9e\x901\xfa\xa4D\xc6u\xdd\xdd\x1f%T\xa30L\xac\xdb\xfe\xc4\x88\xf71&\x18G\xaeL \x19\x1a\xc7\xae>\x98\n\x16=\xd2\xc2\xa6]\r.)}\xb2\x9d\xc7A2\x17\xca\x9d\xae9\xbf\x91\x98\xde\xe7D\xe2\x95\x9c\x94\\lB\x1bY\xc9{h\x13\xa8\x96\tt\xee@\x14\xa4\xd5\xd7\xc9{3\xa3\x0fZi\x9c\x1a\xfao\x12G\x1c\xdf\x1eLpNm\xdd\xfe\x1c\x87\xb5\x9d\xe1T\x07\t\x8a\xcd\xbe\xaa\xa8Fxn\x16\xf2\xe7\x91\x0e\xc3\xaf\xdav\x00\xd1\xd8\xa2F$\x03\xa5\x1a\x85\x81V\x83c\'\xba\x90\x8e\xf9b\x11\xba\xa7|\x90\xa9\x1af\xb4\xc5\xbc\x8f)A\xab\xeb\x8d\x99\xa6\xcc\x91d\xba\xdc\xc6\xa6L\xb3\xb4#&QrV\xf9\xf3tU\x9f%uO+'
   |###[ TLS Record ]###
   |  content_type= handshake
   |  version   = TLS_1_0
   |  length    = 0x4
   |###[ TLS Handshake ]###
   |     type      = server_hello_done
   |     length    = 0x0