我是安全新手,我正在尝试解码我的机器和服务器之间的一些 SSL 加密通信。据我所知,我设法获得了私钥和公钥,私钥是这个:
-----BEGIN RSA PRIVATE KEY-----
[private key content]
-----END RSA PRIVATE KEY-----
但是,Wireshark 需要密钥.pem
格式才能解码通信,我可以以某种方式将我的密钥转换为这种格式吗?如果不是,那么使用这些包的应用程序如何解码它们?
我是安全新手,我正在尝试解码我的机器和服务器之间的一些 SSL 加密通信。据我所知,我设法获得了私钥和公钥,私钥是这个:
-----BEGIN RSA PRIVATE KEY-----
[private key content]
-----END RSA PRIVATE KEY-----
但是,Wireshark 需要密钥.pem
格式才能解码通信,我可以以某种方式将我的密钥转换为这种格式吗?如果不是,那么使用这些包的应用程序如何解码它们?
“.PEM 格式”实际上并不作为标准存在。这更像是“无论 OpenSSL 做什么”。
PEM 来自隐私增强邮件的旧失败标准(这就是首字母缩略词的意思)。如今,“PEM”真正的意思是:一些看起来像这样的文本:
-----BEGIN XXX-----
[some Base64 stuff here]
-----END XXX-----
即以数据类型的名称开头-----
并包含指定的标题行(例如“RSA PRIVATE KEY”);类似的拖车线;在这两行之间,一个用Base64编码的二进制对象。
对于 RSA 私钥,您将主要遇到两种 PEM 编码格式。当标头包含“BEGIN RSA PRIVATE KEY”时,这是一个采用PKCS#1描述的格式的 RSA 私钥。当标头显示“BEGIN PRIVATE KEY”(没有“RSA”)时,它使用PKCS#8,这是一种包装格式,包括密钥类型(“RSA”)和私钥本身的指定。
在您的情况下,如果您看到一些看起来像 PEM 并以它开头的东西,-----BEGIN RSA PRIVATE KEY-----
那么它就是PEM;只需将它放在一个文本文件中,将其保存在某个名称下(例如“serverkey.pem”)并配置 Wireshark 以使用该文件作为服务器密钥。这在Wireshark 文档中有所描述。
不过请注意一些细节:
如果文件以 UTF-16 编码(Windows 有点不恰当地称之为“Unicode”),Wireshark 可能无法读取该文件。在 UTF-16 中,每个字符被编码为两个字节(对于某些字符,如Pahawh Hmong为四个字节)。如果您使用 Windows 的记事本,在保存文件时,选择“ANSI”或“UTF-8”编码。
如果客户端和服务器使用“DHE”或“ECDHE”密码套件,仅知道服务器的私钥不足以解密数据。如果客户端和服务器同意使用这样的密码套件并且您仍然想拦截数据,那么您必须进行主动攻击(中间人),在与客户端交谈时冒充服务器,和客户端在与服务器交谈时。这是更多的工作,Wireshark 在那里帮不了你太多。
只需创建一个扩展名为“.pem”的文件并尝试使用它。
根据此页面,私钥存储在 PEM 文件中,如您所述:
-----BEGIN RSA PRIVATE KEY-----
[code in whatever format it may be]
-----END RSA PRIVATE KEY-----