wireshark捕获配置
在你开始前
在当今的分布式世界中,开发涉及网络通信的系统极为普遍。 在开发此类系统的过程中,可能会出现通信问题,很难通过对软件进行检测或调试来进行调查。 在这种情况下,您可以使用Wireshark之类的工具,该工具可以捕获系统中的所有网络流量并让您读取。 这通常提供解决问题所需的见解。 如果您的系统使用SSL来确保通信的安全,则可以捕获网络流量,但是这些流量均已加密,从而使开发人员无法获取任何有用的信息。 幸运的是,Wireshark附带了一个SSL Dissector,在适当的条件下,它可以解密捕获的流量。 本教程提供了使用Tomcat作为服务器以及使用Web浏览器作为客户端来设置这些条件的分步指南。
目标
在本教程结束时,您将了解在使用Wireshark SSL Dissector之前必须满足的各种条件。 此外,您将能够安排在Tomcat安装中满足这些条件。
先决条件
假定您对网络通信机制有基本的了解。 您不需要具有Tomcat或Wireshark的经验,尽管两者都将是有利的。 特别是,在正确配置Wireshark后,本教程不会深入介绍如何使用Wireshark。
请注意:本教程并不打算提供任何显著了解为什么这个命令集的作品,也没有给予任何考虑到这些命令的许多可能的变化。 它旨在使您能够在开发环境中记录和解码网络流量。 重要的是要注意,此处遵循的过程以及此处生成的某些加密工件非常不安全,因此切勿将其应用于生产环境。
系统要求
本教程假定您正在使用Windows®。 要遵循本教程,您将需要安装以下内容( 有关下载站点,请参阅参考资料):
- Tomcat 5.5
- 适用于Tomcat的JVM
- Wireshark-本教程的开发过程中使用了1.2.2版。 必须使用GnuTLS和Gcrypt编译Wireshark下载。 可以在Wireshark的“关于”窗口中进行检查。
- 包含openssl的Cygwin-本教程的开发过程中使用了openssl 0.9.8i版。
- Jetty —本教程的开发过程中使用了6.1.21版。 其他版本(较新和较旧)可能会起作用,但是所需类文件在其中的位置可能已更改。
此外,您将需要第二台计算机,在该计算机上您将使用Web浏览器访问Tomcat服务器。
总览
必须满足以下关键条件才能使Wireshark解密安全连接:
- Tomcat必须配置有服务器证书。
- 客户端和服务器(浏览器和tomcat)之间使用的特定加密密码必须符合Wireshark的解密方法。
- Wireshark必须有权访问与服务器证书关联的私钥。
本教程将按顺序执行这些步骤,然后使用连接到Tomcat服务器的浏览器捕获请求和响应,并在Wireshark中进行检查。
密码说明
在本教程中,将要求您定义三个单独的密码。 每个密码在本教程中都经过仔细命名和引用,但是为了简化工作,您可能需要考虑在所有三个位置使用相同的密码。
创建私钥和证书
首先,我将向您展示如何使用openssl创建新的私钥。 启动Cygwin并执行以下命令:
openssl genrsa -des3 -out ./serverkey.pem 2048
系统将要求您为生成的pem文件提供密码。 我将在本教程的后面部分将此密码短语称为<服务器密钥密码短语>。 提供并验证此密码后,命令将完成,并且将生成新的私钥并将其存储在文件serverkey.pem.
现在执行以下命令(注意,该命令应全部放在一行上;由于教程模板的限制,此处不在一行上):
openssl req -new -x509 -key ./serverkey.pem -out ./servercert.pem -subj
'/C=GB/ST=XX/O="My Org"/CN="Wireshark dissectable Cert"'
此时将提示您提供密码,并且您应该输入之前选择的<服务器密钥密码>。 这将导致服务器证书存储在servercert.pem
,该证书与您先前生成的私钥相对应。
将证书转换为JKS密钥库
不幸的是,您在上一步中生成的服务器证书的格式不是Tomcat所需的格式,因此您必须将其转换为JKS密钥库中的格式。 第一步是使用以下命令(在Cygwin中运行)将其更改为PKCS12格式:
openssl pkcs12 -export -in ./servercert.pem -inkey ./serverkey.pem
-certfile ./servercert.pem -out ./servercert.p12 -name "cert-name"
这将再次提示您输入密码,并且您应该提供<服务器密钥密码>。 然后它将提示您输入一个新的密码,在本教程后面的部分中,我将其称为<server p12密码>。 输入并验证此新密码后,该命令应完成,并且将创建一个新文件servercert.p12
。
接下来,我们利用Jetty发行版中包含的实用程序将此证书转换为JKS密钥库。 不同版本的Jetty可能在不同的jar文件中甚至在发行版中的不同软件包下都具有此类。 在Jetty 6.1.21发行版中,所需的类位于org.mortbay.jetty.security
包中的主jetty-6.1.21
jar中。 要执行的命令(假设此jar文件位于当前目录中)为:
java -classpath ./jetty-6.1.21.jar org.mortbay.jetty.security.PKCS12Import
./server.p12 ./dissectable.keystore
这将首先提示您输入密钥库密码。 这是您先前选择的<server p12密码>。 然后,将要求您为新的密钥库选择新的密码。 稍后,我将其称为<服务器jks密码短语>。 请注意,系统不会要求您确认此密码,因此必须小心输入。
注意:如果您使用的Jetty版本不完全相同,则可能会发现PKCS12Import类位于其他jar文件中,甚至位于其他软件包中。
取消保护私钥
openssl的最后一项工作是删除用于保护私钥的密码短语。 这是必需的,以便Wireshark可以正确读取密钥文件。 在cygwin中,以下命令将从密钥文件中删除密码保护:
openssl rsa –in ./serverkey.pem –out ./open-private-key.pem
此命令将提示您输入密码。 您应该输入先前选择的<服务器密钥密码>。 此命令将导致一个新文件open-private-key.pem
,其中包含私钥的不受保护的副本。
配置Tomcat
现在您已经拥有了所需的加密工件,您可以将Tomcat配置为使用它们。 您必须完成三个配置步骤:
- 将dissectable.keystore复制到Tomcat根目录中。
- 告诉Tomcat使用您构建的服务器证书。
- 将密码集限制为Wireshark可以应付的密码。
最后两个动作是通过编辑同一文件来实现的。 在Tomcat安装中,导航到conf
目录并编辑server.xml
文件。 找到定义SSL连接器的文件部分,如清单1所示:
清单1.默认的SSL连接器定义
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<!--
<Connector port="8443"
maxHttpHeaderSize="8192"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
scheme="https" secure="true"
clientAuth="false"
sslProtocol="TLS" />
-->
删除第二行和最后一行,以便xml类似于清单2中的代码。
清单2.未注释的SSL连接器定义
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector
port="8443"
maxHttpHeaderSize="8192"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
/>
然后,修改连接器元素以在下面以粗体显示该文本。 假定您将dissectable.keystore
文件复制到Tomcat安装根目录(与LICENSE和NOTICE文件相同的位置)。 在下面的示例中,在“此处密码”的位置,您应该输入之前选择的<jks服务器密码>。
清单3.修改后的SSL连接器定义
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector
port="8443"
maxHttpHeaderSize="8192"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="dissectable.keystore"keystorePass=""ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA"
/>
验证Tomcat配置
此时,值得验证Tomcat是否已正确配置。 为此,只需在bin目录中运行startup.bat脚本。 如果正确配置了所有内容并将dissectable.keystore文件复制到正确的位置,则Tomcat将启动且没有错误。
如果Tomcat无法正确启动,或者是屏幕上出现错误,要么是它只是失败了,那么您应该再次检查您所做的xml编辑没有任何错字,并且密钥库文件在正确的位置。
Tomcat启动后,您可以通过启动Web浏览器并导航到https:// localhost:8443 /来验证SSL连接是否正常。 最初,它将抱怨服务器证书,并询问您是否希望信任服务器。 (确切的术语会根据您使用的浏览器而有所不同。)这是由您先前创建的自签名证书引起的,您应该响应自己确实信任服务器。 然后,您应该看到Tomcat欢迎页面,这意味着您已经正确配置了Tomcat以支持安全连接。
配置Wireshark
现在已经配置了Tomcat,现在需要配置Wireshark。 为此,请在运行Tomcat的计算机上启动Wireshark,然后在菜单中选择“ 编辑 -> 首选项 (Ctrl-Shift P)”。
图1. Wireshark首选项屏幕
![Wireshark应用程序首选项屏幕的屏幕截图](https://i-blog.csdnimg.cn/blog_migrate/daaa8db52d801f20b296b1d920f78a31.png)
展开左侧的协议条目,然后从出现的列表中选择SSL 。
图2. Wireshark SSL配置对话框
选项框
您应该选中两个选项框。
RSA密钥列表
RSA密钥列表字段告诉Wireshark,根据对话所使用的IP地址和端口,使用哪个私钥对对话进行解码。 格式为:
IPAddress,Port,Protocol,PrivateKey
如此处所示,可以用分号分隔的列表中提供多个条目,但是对于本教程,我们只需要一个条目。
IPAddress1,Port1,Protocol1,PrivateKey1; IPAddress2,Port2,Protocol2,PrivateKey2
就本教程而言,我假设我在其上运行Tomcat的IP地址为192.168.45.22,并且它正在侦听端口8443上的SSL通信。 流量将是HTTP流量,并且我们之前生成的open-private-key.pem
文件已复制到C驱动器的根目录。 为此,要在RSA密钥列表字段中输入的字符串是:
192.168.45.22,8443,http,c:\open-private-key.pem
您将需要标识您自己计算机的IP地址。 在Cygwin中,您可以通过运行以下命令执行此操作:
ipconfig /all
注意:如果您的计算机具有多个网络适配器,则您的计算机可能具有多个IP地址。 您必须选择第二台计算机可以用来连接到该计算机的Tomcat服务器的地址。
SSL调试文件
您应该提供一个文件名,Wireshark可以在其中生成调试输出。 这在对Wireshark配置进行故障排除时非常有用。
完成配置
按确定以完成配置。
验证配置
现在,您应该打开先前选择的SSL调试日志文件。 如果配置成功,您将看到一些文本,表明Wireshark成功加载了私钥。 请参见下面清单4中的示例。
清单4. SSL调试日志内容
ssl_association_remove removing TCP 9443 - http handle 040820A0
ssl_init keys string:
9.175.228.55,8443,http,C:\temp\open-private-key.pem
ssl_init found host entry 9.175.228.55,8443,http,C:\temp\open-private-key.pem
ssl_init addr '9.175.228.55' port '8443' filename 'C:\temp\open-private-key.pem'
password(only for p12 file) '(null)'
Private key imported: KeyID 0E:BA:EA:08:5D:FA:FB:85:59:4A:7B:A9:B2:56:C3:16:...
ssl_init private key file C:\temp\open-private-key.pem successfully loaded
association_add TCP port 8443 protocol http handle 040820A0
这确认您已正确执行了所有密码操作步骤和Wireshark配置步骤。 如果没有看到此消息,则需要重新访问所涉及的步骤。 最可能的问题与RSA密钥列表中密钥文件的路径或私钥文件的实际生成有关。
捕捉对话
一旦正确配置了Wireshark,就可以开始录制对话了。 在Wireshark中,从菜单中选择Capture- > Interfaces (Ctrl I-大写i)。 这将显示一个类似于以下内容的对话框:
图3. Wireshark接口列表对话框
![“ Wireshark捕获接口”屏幕的屏幕快照,其中显示了不同的适配器,每个适配器带有用于启动的按钮,请参阅选项或详细信息。](https://i-blog.csdnimg.cn/blog_migrate/3aefa53c44cc001af4f67bfbcc8de3e9.png)
您需要确定列出的网络接口中的哪一个是第二台计算机将通过其连接到Tomcat的网络接口。 这应该已经很清楚了,因为您需要知道Wireshark配置步骤的正确IP地址。 如果不确定,可以使用第二台计算机上的Web浏览器访问Tomcat服务器,并查看哪个接口显示的数据包计数增加。
选择了要监听的界面后,单击选项 ,然后会出现另一个对话框:
图4. Wireshark捕获选项对话框
![“ Wireshark捕获选项”对话框的屏幕快照。](https://i-blog.csdnimg.cn/blog_migrate/9450cb0f83e26e23a9a2f09ad51bfd45.png)
您应该在“ 捕获过滤器”中输入以下内容,以减少捕获的对话中的噪音:
tcp port 8443
现在,单击开始以开始捕获流量。 此时,您应该看不到任何数据包被捕获。 您应该转到第二台计算机,并使用诸如https://192.168.45.22:8443/之类的URL访问Tomcat,但要输入上面装有Tomcat的计算机的IP地址或主机名。 执行此操作时,系统将告知您证书问题,并询问您是否信任服务器。 和以前一样,您应该确认您确实信任服务器。 此后,Tomcat欢迎页面应出现在浏览器中,而许多行数据应出现在Wireshark中。 现在,您可以通过从菜单中选择Capture- > Stop来停止 捕获 。
如果正确完成此操作,则会看到一个包含一些绿色行的屏幕,显示它们已被解密,如下所示:
图5.成功的捕获输出
然后,您可以自由使用Wireshark,就像通常情况下分析HTTP对话并继续进行问题调查一样。
这里要观察的最后一件事是,如果您通常使用follow tcp流来查看HTTP对话,那么现在应该改用follow ssl流 。 这将以纯文本形式显示您的HTTP对话:
图6.遵循SSL流
乱序数据包
捕获时,您可能会遇到乱序数据包,如下所示:
图7. Wireshark中的乱序包
这些可能导致SSL Dissector部分失败。 观察到底部附近有一个绿色行,但是对该GET的响应尚未解密。 要解决此问题,您需要使用File- > Save As保存此捕获。 然后,在Cygwin中,您需要运行editcap –d capture.pcap fixed.pcap
,其中Wireshark安装中包含editcap
, capture.pcap
是保存的捕获文件,并且在命令运行后fixed.pcap
将包含固定的捕获。 运行此命令后,您可以将固定的数据包捕获文件重新加载到Wireshark中,然后您将按预期看到解密的数据包。
根本没有绿色的行
Wireshark依赖于捕获整个SSL对话。 如果您在本教程的过程中从浏览器发出多个请求,则可能是已协商的安全连接的某些部分被缓存,然后捕获的对话不包含完整的协商。 这将阻止SSL Dissector完成其工作。 在捕获的开始处查看信息行中带有“ Server Hello,证书,Server Hello 完成 ”的条目。 如果找不到此文件,则说明您的浏览器正在重用先前的协商内容。 重新启动浏览器,然后重试应该可以解决此问题。
结论
在本教程中,您学习了如何捕获和读取两个系统之间的安全HTTP通信。 您已经了解了如何生成所需的加密工件,以及如何配置Tomcat和Wireshark以正确使用它们。 涉及的步骤并不复杂,并且有些熟悉,可以很容易地执行。 在当今的安全和分布式系统世界中,这是一个非常强大的工具,尽管希望它不是经常需要的工具。
已经在连接到Tomcat服务器的Web浏览器的上下文中演示了该机制,但是可以轻松地将其应用于通过SSL与Tomcat通信的任何系统。 经过进一步调查,此处的过程应该相对容易地适用于其他服务器。
翻译自: https://www.ibm.com/developerworks/web/tutorials/wa-tomcat/index.html
wireshark捕获配置