Назад | Перейти на главную страницу

Получение ключа RSA из работающего экземпляра Apache?

Я создал пару ключей RSA для сертификата SSL и сохранил закрытый ключ в /etc/ssl/private/server.key. К сожалению, это была единственная копия закрытого ключа, которая у меня была.

Потом случайно перезаписал файл на диске (да, знаю).

Apache все еще работает и обслуживает запросы SSL, поэтому я полагаю, что есть надежда на восстановление закрытого ключа. (Возможно, где-то в /proc или что-то?)

На этом сервере работает Ubuntu 12.04 LTS.

УСПЕХА!

Мне удалось получить закрытый ключ. Но это было непросто. Вот что вам нужно сделать:

  1. Делать конечно вы не перезагружаете сервер или апач. На этом игра окончена. Это также означает, что никакие службы мониторинга не перезапускают Apache.
  2. Захватить этот файл - исходный код для инструмент под названием паспарту.
  3. Извлеките исходный код и настройте строку 9 Makefile.main читать:

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

    (Обратите внимание, что $(OBJS) и $(LDFLAGS) в обратном порядке.)

  4. Бегать ./build.sh.
  5. Получите PID Apache, используя:

    service apache2 status
    
  6. Запустить passe-partout команда как root:

    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

Если один из них совпадает, вы нашли ключ.


Кредит: Эта статья указал мне на паспарту.

Скорее всего, он хранит ключ в памяти, потому что ему нужно сохранить копию после того, как он отбрасывает привилегии и / или расшифровывает ключ, используя предоставленную парольную фразу.

Теоретически вы можете получить его из образа процесса, если подключите отладчик, хотя, если они следуют лучшим практикам, он будет зашифрован против чего-то в памяти.

Тем не менее, если он все еще открыт, /proc/${PID}/fd/${SOMETHING} может быть это. Если вы его перезаписали, вашего ключа там не будет, потому что будут перезаписываемые данные. Если вы скопировали что-то еще на его место (или удалили, или отключили его, или рекурсивно удалили его родительский каталог), он будет там.