Как перехватить связь между защищенным SSL веб-сервисом Metro и клиентом WCF?

Среда: NetBeans 7.0.1, GlassFish 3.1

Я хочу прослушать связь между клиентом WCF (.NET Framework 4) и веб-службой Metro (2.1.1), а затем проверить сообщения, чтобы убедиться, что все так, как я хочу. Веб-сервис использует Transport Security (SSL). Я уже знаю о Fiddler, но у меня не было никакого успеха, используя его; был виден только трафик HTTPS-браузера. Есть ли способ настроить Fiddler для захвата трафика между моими службами? Есть ли другой путь?

ОБНОВИТЬ

Я пытался запустить клиент и сервер на разных машинах, а затем использовать Fiddler, но безуспешно. Я пытался использовать Wireshark для захвата трафика, но безуспешно, работая на локальном хосте. Если бы я попробовал их на разных машинах, все, что я мог видеть, это обмен данными TCP между сервисами.

На localhost + Wireshark счетчик пакетов рядом с интерфейсами остался прежним, однако я звонил в службу много раз.

UPDATE2

Попытался настроить прокси-сервер для NetBeans вручную в настройках и программно, но безуспешно:

System.setProperty("http.proxyHost", "localhost"); 
System.setProperty("http.proxyPort", "8888"); 
System.setProperty("https.proxyHost", "localhost"); 
System.setProperty("https.proxyPort", "8888"); 

Пытался запустить GlassFish с этими опциями JVM, но нет:(:

<jvm-options>-Dhttp.proxyHost=localhost</jvm-options>
<jvm-options>-Dhttp.proxyPort=8888</jvm-options>
<jvm-options>-Dhttps.proxyHost=localhost</jvm-options>
<jvm-options>-Dhttps.proxyPort=8888</jvm-options>

6 ответов

Решение

В качестве альтернативы Fiddler, если вы управляете клиентом WCF, вы можете включить ведение журнала сообщений WCF и сохранить все незашифрованные сообщения SOAP в журнал трассировки. Ведение журнала может быть включено в файле app.config, поэтому вам даже не нужно перестраивать приложение, чтобы включить или отключить ведение журнала.

Вы можете настроить метро для вывода сообщений SOAP, информация здесь. лично я использую прокси Чарльза, чтобы посмотреть обмен мыла. Вы настраиваете Java-прокси, используя системные свойства в вашем "update2", работает очень хорошо.

Используйте http://portswigger.net/burp/ У него есть прокси. Прокси можно использовать для просмотра http трафика. Он также может отображать трафик SSL, генерируя самоподписанный сертификат на лету. Вам необходимо импортировать сгенерированный сертификат в хранилище ключей Java на клиенте jax-ws. Убедитесь, что вы включили "Поддержка невидимого прокси для клиентов, не поддерживающих прокси"

Может быть, WebScarab - это то, что вам нужно. Например , есть много руководств по анализу трафика ssl.

Один из подходов, который я успешно попробовал, заключается в том, чтобы убедиться, что используется SSLv2 (в отличие от SSLv3), а затем использовать Wireshark, как описано на странице SSL в викишарке Wiki, но лучше на странице поддержки Citrix "Как расшифровать SSL и TLS трафик с помощью Wireshark ". Это работает, давая Wireshark закрытый ключ SSL-сертификата сервера, чтобы он мог расшифровать диалог.

Чтобы включить SSLv2 в вашем сценарии, достаточно установить -Dhttps.protocols=SSLv2Hello на вашей серверной JVM, но я погуглил это вместе. (См., Например, вопрос "Почему я получаю javax.net.ssl.SSLException" на странице устранения неполадок Java 1.4.2, а часть - https.protocols в Справочном руководстве по расширению защищенных сокетов JavaTM (JSSE).) Я сам не выполнил эту часть и не могу найти четкую документацию по этому вопросу.

(PS В моем случае, когда я расшифровывал трафик SSL.NET-к.NET, я подумал, что это был переход обратно на SSLv2, который сделал трафик читабельным для Wireshark. Однако, этот пост в блоге предполагает, что я переключался в то же время время от шифра Диффи-Хеллмана до не-DH.)

Я часто использую commview для мониторинга трафика через локальный петлевой адаптер. Один из немногих инструментов, позволяющих захватывать трафик, когда ваш клиент и служба находятся на одном компьютере.

Вы можете скачать след на http://www.tamos.com/products/commview/ и посмотреть, работает ли он для вас.

Другие вопросы по тегам