1、验证环境
strongswan version
Linux strongSwan U5.9.1/K4.18.0-240.1.1.el8_3.x86_64
wireshark version 3.4.7
Linux Centos 8
2、准备工作
strongswan需要配置日志,默认安装的strongswan日志输出在/var/log/messages中,这个里面还包含linux其他日志,不好区分,先修改配置,将strongswan日志单独输出到文件中。strongswan的默认配置为:/etc/strongswan/strongswan.conf
参考如下设置:
charon {
load_modular = yes
plugins {
include strongswan.d/charon/*.conf
}
filelog {
charon {
path = /var/log/charon.log
# add a timestamp prefix
time_format = %b %e %T
# prepend connection name, simplifies grepping
ike_name = yes
# overwrite existing files
append = no
# increase default loglevel for all daemon subsystems
default = 4
# flush each line to disk
flush_line = yes
}
stderr {
# more detailed loglevel for a specific subsystem, overriding the
# default loglevel.
ike = 2
knl = 3
}
}
}
default定义的是日志的级别,默认日志级别为:-1,0,1,2,3,4,-1是完全没有日志,
0只告诉你建立连接,连接关闭;
1只输出错误提示,
2会输出错误,警告和调试信息;
3会把连接传输的数据也打印;
4则会把密钥内容这些敏感数据也打印。
由于本文要用wireshark解密协商报文,需要用到秘钥等信息,所以日志级别要设置为4
3、IKEv1 主模式
这里忽略strongswan的使用,如果不懂的可以参考strongswan的官方文档进行学习配置。
使用tcpdump进行抓包(例如:tcpdump host <ip> -w ./isakmp_mainmode.cap),待协商成功后,将抓到的报文通过wireshark打开,默认情况下,看到的报文如下:
即从第5步交互开始,都是加密后的密文了,无法看到交互的具体载荷内容。
按照如下路径打开wireshark的ISAKMP的配置:
Wireshark—>Preference—>Protocols—>ISAKMP
选择IKEv1:
可以看到,需要填两个字段,一个是Initiator's COOKIE,这个就是报文中的Initiator SPI值,直接填发起方的即可,对于Encryption Key,这个就需要从strongswan的日志中查找了。
打开strongswan的日志文件,搜索如下内容
将encryption key Ka的值填入Enctyption Key即可。
然后再回去看刚才的报文,可以发现从第5步往后的报文已经解密了。
4、IKEv1野蛮模式
方法同IKEv1主模式,只是野蛮模式是从第3步交互开始就是密文了。
5、IKEv2
同样方式的抓包,打开wireshark的ISAKMP配置,选择IKEv2:
这次需要填写的字段比较多,同样的Initiator's SPI和Responder's SPI可以从报文中获取,其他字段从日志中获取:
加密算法,认证算法这个就不多说了,配置协商的时候肯定已经清楚了。
配置完成后,再看IKEv2的报文,已经解密了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。