Как перехватить связь между защищенным 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. Убедитесь, что вы включили "Поддержка невидимого прокси для клиентов, не поддерживающих прокси"
Один из подходов, который я успешно попробовал, заключается в том, чтобы убедиться, что используется 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/ и посмотреть, работает ли он для вас.