2014-09-16 5 views
4

Я следил за блоком Python SSL socket echo test with self-signed certificate, чтобы протестировать простую связь сокетов SSL. Я создал самозаверяющий сертификат, и я использовал вышеупомянутый код Python, чтобы просто попробовать это.Wireshark не показывает SSL-пакеты с сокетами Python SSL

Все работает так, как описано, но проблема в том, что я не вижу никакого трафика SSL, когда я отслеживаю сетевые пакеты, используя Wireshark. Все, что я вижу, это просто обычные TCP-пакеты, но я ожидаю, что будет использоваться протокол SSL. Я что-то упускаю?

Для полноты картины добавить код:

client.py

import socket, ssl, pprint 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# Require a certificate from the server. We used a self-signed certificate 
# so here ca_certs must be the server certificate itself. 
ssl_sock = ssl.wrap_socket(s, 
          ca_certs="server.crt", 
          cert_reqs=ssl.CERT_REQUIRED) 

ssl_sock.connect(('localhost', 10023)) 

print repr(ssl_sock.getpeername()) 
print ssl_sock.cipher() 
print pprint.pformat(ssl_sock.getpeercert()) 

ssl_sock.write("boo!") 

if False: # from the Python 2.7.3 docs 
    # Set a simple HTTP request -- use httplib in actual code. 
    ssl_sock.write("""GET/HTTP/1.0\r 
    Host: www.verisign.com\n\n""") 

    # Read a chunk of data. Will not necessarily 
    # read all the data returned by the server. 
    data = ssl_sock.read() 

    # note that closing the SSLSocket will also close the underlying socket 
    ssl_sock.close() 

server.py

import socket, ssl 

bindsocket = socket.socket() 
bindsocket.bind(('', 10023)) 
bindsocket.listen(5) 

def do_something(connstream, data): 
    print "do_something:", data 
    return False 

def deal_with_client(connstream): 
    data = connstream.read() 
    while data: 
     if not do_something(connstream, data): 
      break 
     data = connstream.read() 

while True: 
    newsocket, fromaddr = bindsocket.accept() 
    connstream = ssl.wrap_socket(newsocket, 
           server_side=True, 
           certfile="server.crt", 
           keyfile="server.key") 
    try: 
     deal_with_client(connstream) 
    finally: 
     connstream.shutdown(socket.SHUT_RDWR) 
     connstream.close() 

Wireshark скриншот:

wireshark

+0

ли он по-прежнему работает (функционально), если вы удалите все SSL от клиента? Например. вы уверены, что не только Wireshark не сообщает об использовании SSL? Например. В разделе «protocol» я бы * ожидал * видеть TCP, а не SSL, поскольку TCP - это протокол сетевого уровня, который вы используете. –

+0

@TomDalton, Wireshark сообщает протокол SSL, если я просто просматриваю Google, поэтому я ожидал увидеть что-то подобное. Я удалю SSL с клиента, чтобы убедиться, что он работает или нет. –

ответ

8

Причина вы не увидите SSL/TLS, потому что вы используете другой порт, чем стандартный 443. Именно поэтому Wireshark не может автоматически определить протокол. У вас есть два варианта:

  • Decode трафик, как SSL:

Анализ> Decode As> Транспорт> SSL> Применить

  • Добавить порт:

Edit> Preferences> Протоколы> HTTP> SSL/TLS Порты = 443, {порт}

Смежные вопросы