我继承了带有 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
我对我的问题的简短回答是:Yabadabbadooh....这是可能的,并且可以在我的备份系统上运行!
它没有让我睡觉,所以我从头开始:首先我再次检查新旧证书是否有任何差异,唯一的区别是主题的顺序不同,但内容相同。
#1 所以我用旧的 rootCa.key 和旧的 server.key 制作了一个新的 root.crt 和 server.crt,主题顺序相同。现在文本输出相同(主题,签名算法......)
#2 我用 root.crt 创建了一个新的 userCert。
#3 我在 Postgres 中安装了证书并进行了测试-> 工作。
#4 这次我从顶部的新证书开始。
postgres restart ...... 现在新旧证书都在工作!
#5 检查在合并后复制旧证书的另一种方式,然后:
postgres restart ......它不再工作了。回到第 4 步,一切正常。
#6 吊销列表:我为新证书创建了一个吊销列表并将其安装在 postgres 中。然后:
取消注释该行:ssl_crl_file = /root.crl postgres restart ......并且一切正常。
我不知道为什么它现在可以工作,我真的不敢相信它的主题顺序......我猜我在第一次尝试中犯了其他错误。但我不会试图找出答案,它有效,就是这样:-)
结论:
使 root.crt (CA) 和 server.crt 使用旧密钥并尽可能相同。(检查主题等)
合并证书、吊销列表和密钥,使旧证书位于文件底部
现在旧证书一直有效,直到它们过期,例如,您可以使用升级的 Tls 创建新证书(使用新 CA)。
关于 Tls 版本的一些附加信息。当我将服务器升级到 Ubuntu 2104 和 Postgres 13 时,证书不起作用。我发现在 /etc/ssl/openssl.conf 中添加这一行的提示
我知道这不好,但暂时有所帮助。我找不到测试证书是否为 Tlsv1.0 或更高版本的方法。唯一测试其 TlsV1.2 是否使用 pgsql (13) 或 pgadmin4,两者都不适用于 TlsV1.0
所以在我的证书创建配置文件中,我使用这个:
psql (13) 和 pgadmin4 现在可以使用新证书。当所有旧的都过期时,我将 /etc/ssl/openssl.conf 再次更改为该值。
升级到下一个 Tls 版本已经失去了它的魅力:-)