Nat*_*man 26 disaster-recovery ssl apache-2.2
我为 SSL 证书创建了一个 RSA 密钥对,并将私钥存储在/etc/ssl/private/server.key. 不幸的是,这是我拥有的唯一私钥副本。
然后我不小心覆盖了磁盘上的文件(是的,我知道)。
Apache 仍在运行并且仍在处理 SSL 请求,这让我相信可能有希望恢复私钥。(也许在某处/proc或某处有一个符号链接?)
该服务器运行的是 Ubuntu 12.04 LTS。
Nat*_*man 39
我能够检索私钥。但这并不容易。您需要执行以下操作:
提取源代码并调整第 9 行为Makefile.main:
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
Run Code Online (Sandbox Code Playgroud)
(注意$(OBJS)和$(LDFLAGS)的顺序颠倒了。)
./build.sh。使用以下命令获取 Apache 的 PID:
service apache2 status
Run Code Online (Sandbox Code Playgroud)passe-partout以 root 身份运行命令:
sudo passe-partout [PID]
Run Code Online (Sandbox Code Playgroud)
...[PID]您在第 5 步中检索到的值在哪里。
如果程序成功,您当前的目录将有一堆额外的键:
you@server:~# ls
id_rsa-0.key id_rsa-1.key id_rsa-2.key
Run Code Online (Sandbox Code Playgroud)如果一切顺利(希望一切顺利),那么这些钥匙之一就是您所需要的。但是,如果您有多个证书/密钥文件在使用,那么您需要弄清楚它是哪一个。这是你如何做到的:
首先获取与签名密钥匹配的证书副本。假设文件名为server.crt,请运行以下命令:
openssl x509 -noout -modulus -in server.crt | openssl md5
Run Code Online (Sandbox Code Playgroud)
这将输出一个您需要与每个键匹配的值。对于每个键,运行以下命令:
openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5
Run Code Online (Sandbox Code Playgroud)
如果其中之一匹配,您就找到了钥匙。
信用: 这篇文章向我指出了passe-partout。
它很可能将密钥存储在内存中,这样做是因为它需要在使用提供的密码删除特权和/或解密密钥后保留副本。
理论上,如果您附加了调试器,您可以将其从进程映像中取出,但如果他们遵循最佳实践,它将针对内存中的某些内容进行加密。
也就是说,如果碰巧它仍然打开,/proc/${PID}/fd/${SOMETHING}可能就是它。如果您覆盖它,您的密钥将不存在,因为覆盖数据将存在。如果您将其他内容复制到其位置(或删除或取消链接,或递归删除其父目录),它将在那里。
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |