从正在运行的Apache实例中检索RSA密钥?

Modified on: Tue, 12 Nov 2019 02:00:02 +0800

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

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

Apache仍在运行并仍在提供SSL请求,这使我相信可能有希望恢复私钥。 (也许在/proc或其他什么地方有一个符号链接?)

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

最佳答案

SUCCESS!

我能够检索私钥。但这并不容易。这是你需要做的:

  1. 确保确定您不重启服务器或Apache。游戏结束了。这也意味着确保没有监控服务重启Apache。
  2. 抓取此档案 - 名为passe-partout的工具的源代码。
  3. 提取源代码并将Makefile.main的第9行调整为:

    $(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
    
  8. 醇>

    如果一切顺利(并且希望它确实如此),那么其中一个键就是你需要的键。但是,如果您使用了多个证书/密钥文件,那么您需要确定它是哪一个。这是你如何做到的:

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

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

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

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

    如果其中一个匹配,您就找到了密钥。


    信用: 这篇文章向我指出了passe-partout。


相关问答

添加新评论