Я создал пару ключей RSA для сертификата SSL и сохранил закрытый ключ в /etc/ssl/private/server.key
. К сожалению, это была единственная копия закрытого ключа, которая у меня была.
Потом случайно перезаписал файл на диске (да, знаю).
Apache все еще работает и обслуживает запросы SSL, поэтому я полагаю, что есть надежда на восстановление закрытого ключа. (Возможно, где-то в /proc
или что-то?)
На этом сервере работает Ubuntu 12.04 LTS.
Мне удалось получить закрытый ключ. Но это было непросто. Вот что вам нужно сделать:
Извлеките исходный код и настройте строку 9 Makefile.main
читать:
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
(Обратите внимание, что $(OBJS)
и $(LDFLAGS)
в обратном порядке.)
./build.sh
.Получите PID Apache, используя:
service apache2 status
Запустить passe-partout
команда как root:
sudo passe-partout [PID]
...где [PID]
- это значение, полученное на шаге 5.
Если программа завершится успешно, в вашем текущем каталоге будет несколько дополнительных ключей:
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}
может быть это. Если вы его перезаписали, вашего ключа там не будет, потому что будут перезаписываемые данные. Если вы скопировали что-то еще на его место (или удалили, или отключили его, или рекурсивно удалили его родительский каталог), он будет там.