成功!

成功!

我为 SSL 证书创建了一个 RSA 密钥对,并将私钥存储在 中/etc/ssl/private/server.key。不幸的是,这是我拥有的私钥的唯一副本。

然后我不小心覆盖了磁盘上的文件(是的,我知道)。

Apache 仍在运行,并且仍在处理 SSL 请求,这让我相信可能还有希望恢复私钥。(也许某处有符号链接/proc?)

该服务器正在运行 Ubuntu 12.04 LTS。

答案1

成功!

我能够检索私钥。但这并不容易。您需要执行以下操作:

  1. 制作当然您不会重新启动服务器或 Apache。此时游戏就结束了。这也意味着确保没有监控服务重新启动 Apache。
  2. 抓住这个文件- 源代码名为 passe-partout 的工具
  3. 提取源代码并调整第 9 行Makefile.main如下:

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    (请注意,$(OBJS)和的$(LDFLAGS)顺序是相反的。)

  4. 跑步./build.sh
  5. 使用以下命令获取 Apache 的 PID:

    service apache2 status
    
  6. 以 root身份运行passe-partout命令:

    sudo passe-partout [PID]
    

    ...[PID]您在步骤 #5 中检索到的值在哪里。

  7. 如果程序成功运行,你当前的目录将会有一堆额外的键:

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

如果一切顺利(希望如此),其中一个密钥就是您需要的。但是,如果您使用了多个证书/密钥文件,则需要确定是哪一个。操作方法如下:

首先获取与签名密钥匹配的证书副本。假设文件名为server.crt,运行以下命令:

openssl x509 -noout -modulus -in server.crt | openssl md5

这将输出您需要与每个键匹配的值。对于每个键,运行以下命令:

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

如果其中一个匹配,则说明您找到了钥匙。


信用: 本文向我指出了路路通。

答案2

最有可能的是,它将密钥存储在内存中,这样做是因为它需要在放弃权限和/或使用提供的密码解密密钥后保留一份副本。

理论上,如果您连接了调试器,您就可以将其从进程映像中取出,但如果他们遵循最佳实践,它将根据内存中的某些内容进行加密。

也就是说,如果它仍然打开,那么/proc/${PID}/fd/${SOMETHING}可能是它。如果你覆盖了它,你的密钥将不在那里,因为覆盖数据将在那里。如果你将其他内容复制到它的位置(或删除或取消链接它,或递归删除它的父目录),它将在那里。

相关内容