无法恢复使用“openssl smime”制作的备份

无法恢复使用“openssl smime”制作的备份

我的(唯一)数据库服务器宕机了,我正在恢复所有内容。我创建了一个新服务器,现在我只想恢复数据库备份。

我有一个夜间脚本,运行以下命令来创建加密备份:

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

我不确定发生了什么或为什么,但我知道我在开发备份解决方案时曾多次成功解密加密。所以我知道有办法解密它。

有人知道出了什么问题吗?

PS 我知道...我应该有多个数据库服务器来防止这种情况。以及自动备份脚本或至少记录如何从此类情况中恢复。我没有这样做,我应该这样做 :( 下次吸取教训

我在服务器和开发笔记本电脑上都使用 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:

答案1

好吧,经过一番努力后我终于明白自己做错了什么。

首先,该-recip标志代表公钥,因此我将该标志改为指向我的公钥。

要包含私钥,需要该-inkey标志。所以我也添加了它。

最后,-outform备份脚本中的标志必须与-inform恢复脚本中的标志相匹配。因此,最终的解密命令如下:

openssl smime -decrypt -inform DER -in database.enc -recip sql_dump.pub.pem  -inkey sql_dump.priv.pem

然后一切就绪了,现在网站已恢复运行:)

TODO:实际上,把这一切都写下来,这样如果再发生灾难,我就不会再经历这一切了!!!

相关内容