AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1096193
Accepted
aufmschlauch
aufmschlauch
Asked: 2022-03-16 05:52:10 +0800 CST2022-03-16 05:52:10 +0800 CST 2022-03-16 05:52:10 +0800 CST

使用 openssl 升级/更新 Postgres SSL 服务器证书

  • 772

我继承了带有 SSL 客户端的公司 Postgres 服务器。到目前为止,它的大约 100 个用户。

两个问题:我的Ca Cert(root.crt)明年到期,好像还是TlsV1.0。因此迫切需要升级(更新)。

我应该避免的是为所有用户制作新的客户端证书。这对我来说将成为一场噩梦:-)

因此,我寻找了一种新旧证书都可以使用的解决方案,直到所有旧证书都过期。我喜欢很多提示(也在 Serverfault 上),但到目前为止没有任何效果。

到目前为止我所做的:我使用旧的 ca 密钥 (rootCa.key) 并创建了一个新的 root.crt),我使用旧的服务器密钥 (server.key) 创建了一个新的 server.crt。我在我的 Postgres 备份服务器上安装了吊销列表 (root.crl)、root.crt、server.crt 和 server.key。

我可以连接 newUser.crt 证书,但不能连接旧证书....正如我所料。

我确实像地狱一样搜索了网络,并找到了在服务器上合并新旧证书的提示。因此,我将证书与 cat: cat oldRoot.crt >> root.crt 也用于其他文件。撤销列表不起作用,所以我在 Postgres.conf 中评论了 Line: #ssl_crl_file =。似乎 Postgres 也可以在没有撤销列表的情况下工作。

结果:根据 server.crt 中首先出现的证书,我可以连接旧证书或新证书,但不能同时连接两者。为了测试它,我使用了合并的 root.crt 与 oldServer.cert 以及 newServer.cert。两者都与新的或旧的一起工作。

这意味着,合并的 root.crt 工作正常,但不是合并的 server.crt。

我用 openssl 检查它并合并 root.crt 和合并 server.crt: openssl verify -verbose -x509_strict -CAfile root.crt -CApath 。old_cert.crt server.crt old_cert.crt:好的 server.crt:好的

openssl 验证 -verbose -x509_strict -CAfile root.crt -CApath 。new_cert.crt server.crt new_cert.crt: OK server.crt: OK

似乎 openssl 可以管理合并的证书,但不能管理 Postgres。

知道如何解决这个问题吗?

任何提示表示赞赏。

问候施劳奇

服务器:Ubuntu 2104、Postgres13 备份服务器:Ubuntu 1604、Postgres13

postgresql openssl ssl-certificate-renewal
  • 1 1 个回答
  • 342 Views

1 个回答

  • Voted
  1. Best Answer
    aufmschlauch
    2022-03-18T07:59:56+08:002022-03-18T07:59:56+08:00

    我对我的问题的简短回答是:Yabadabbadooh....这是可能的,并且可以在我的备份系统上运行!

    它没有让我睡觉,所以我从头开始:首先我再次检查新旧证书是否有任何差异,唯一的区别是主题的顺序不同,但内容相同。

    #1 所以我用旧的 rootCa.key 和旧的 server.key 制作了一个新的 root.crt 和 server.crt,主题顺序相同。现在文本输出相同(主题,签名算法......)

    #2 我用 root.crt 创建了一个新的 userCert。

    #3 我在 Postgres 中安装了证书并进行了测试-> 工作。

    #4 这次我从顶部的新证书开始。

    cat root_old.crt >> root.crt
    cat server_old.crt >> server.crt
    cat server_old.key >> server.key

    postgres restart ...... 现在新旧证书都在工作!

    #5 检查在合并后复制旧证书的另一种方式,然后:

    cat root_new.crt >> root.crt
    cat server_new.crt >> server.crt
    cat server_new.key >> server.key

    postgres restart ......它不再工作了。回到第 4 步,一切正常。

    #6 吊销列表:我为新证书创建了一个吊销列表并将其安装在 postgres 中。然后:

    猫 root_old.crl >> root.crl

    取消注释该行:ssl_crl_file = /root.crl postgres restart ......并且一切正常。

    我不知道为什么它现在可以工作,我真的不敢相信它的主题顺序......我猜我在第一次尝试中犯了其他错误。但我不会试图找出答案,它有效,就是这样:-)

    结论:

    使 root.crt (CA) 和 server.crt 使用旧密钥并尽可能相同。(检查主题等)

    合并证书、吊销列表和密钥,使旧证书位于文件底部

    现在旧证书一直有效,直到它们过期,例如,您可以使用升级的 Tls 创建新证书(使用新 CA)。

    关于 Tls 版本的一些附加信息。当我将服务器升级到 Ubuntu 2104 和 Postgres 13 时,证书不起作用。我发现在 /etc/ssl/openssl.conf 中添加这一行的提示

    MinProtocol = TLSv1.0

    我知道这不好,但暂时有所帮助。我找不到测试证书是否为 Tlsv1.0 或更高版本的方法。唯一测试其 TlsV1.2 是否使用 pgsql (13) 或 pgadmin4,两者都不适用于 TlsV1.0

    所以在我的证书创建配置文件中,我使用这个:

    MinProtocol = TLSv1.2

    psql (13) 和 pgadmin4 现在可以使用新证书。当所有旧的都过期时,我将 /etc/ssl/openssl.conf 再次更改为该值。

    升级到下一个 Tls 版本已经失去了它的魅力:-)

    • 0

相关问题

  • OS X 上的 Postgresql 安装问题

  • 修复 mysql 命令行程序中的 Control-C?

  • 有哪些好的 PostgreSQL 管理工具?[关闭]

  • Access 通过 ODBC 连接到远程 Postgresql 数据库是否可用?

  • 哪个数据库服务器扩展性更好:PostgreSQL 还是 MySQL?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve