Мой (единственный) сервер базы данных вышел из строя, и я все восстанавливаю. Я создал новый сервер и теперь просто хочу восстановить резервную копию базы данных.
У меня есть ночной сценарий, который запускает эту команду для создания зашифрованной резервной копии:
pg_dump $DATABASE | openssl smime -encrypt -binary -text -aes256 -out $HOME/$DUMP_FILE_NAME -outform DER ~/sql_dump.pub.pem
И теперь у меня есть полученный файл, поэтому я запускаю команду:
openssl smime -decrypt -in database.enc -recip sql_dump.priv.pem
Где мой файл sql_dump.priv.pem выглядит так:
-----BEGIN PRIVATE KEY-----
(private key data)
-----END PRIVATE KEY-----
Однако по какой-то причине я получаю эту ошибку вместо расшифрованного файла:
unable to load certificate
139830333706752:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
Я не уверен, что происходит и почему, но знаю, что мне удалось несколько раз расшифровать шифрование, когда я разработал решение для резервного копирования. Итак, я знаю, что есть способ его расшифровать.
Кто-нибудь знает, что происходит не так?
P.S. Я знаю ... У меня должно быть несколько серверов баз данных, чтобы этого не произошло. А также сценарий автоматического резервного копирования или, по крайней мере, документ, как восстановиться после чего-то подобного. Я этого не делал и должен был :( урок усвоен в следующий раз
Я использую Linux как на сервере, так и на своем ноутбуке для разработки, если это имеет значение.
РЕДАКТИРОВАТЬ:
Хорошо, теперь я на шаг ближе.
Я расшифровываю:
openssl smime -decrypt -in database.enc -recip sql_dump.pub.pem -inkey sql_dump.priv.pem
Но теперь я получаю еще одну ошибку:
Error reading S/MIME message
140276418503168:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:crypto/asn1/asn_mime.c:391:
Хорошо, после некоторой работы я понял, что делаю не так.
Во-первых -recip
Флаг предназначен для открытого ключа, поэтому я изменил этот флаг, чтобы он указывал на мой открытый ключ.
Для включения закрытого ключа требуется -inkey
флаг. Я тоже добавил это.
Наконец -outform
флаг в сценарии резервного копирования во многом соответствует -inform
в сценарии восстановления. Таким образом, получившаяся команда дешифрования была следующей:
openssl smime -decrypt -inform DER -in database.enc -recip sql_dump.pub.pem -inkey sql_dump.priv.pem
Потом это сработало, и теперь сайт снова работает :)
TODO: На самом деле запишите все это, чтобы я не повторил все это снова, если произойдет еще одна катастрофа !!!