对Postgres使用外部信任库和密钥库

问题描述

我试图为Postgres 10启用SSL,但是我不想使用指定的ca文件,而是要使用提供给我的truststore.jks和keystore.p12。 Postgres和我们的通讯服务都在各自的docker容器中。通过将服务放在共享卷中并在启动时使用基本的Java命令,这些服务能够共享信任库和密钥库:

-Djavax.net.ssl.trustStore=${TRUSTSTORE_NAME}

但是,据我所知,postgres的工作方式不同。在postgresql.conf中具有以下属性

ssl = on
ssl_cert_file = '/server.crt'   
ssl_key_file = '/server.key'
ssl_ca_file = '/root.crt'
ssl_crl_file = '/ssl.crl'

如果我可以访问这些证书,则可以使用。但是,我不想指向特定的证书,因为它们已经存在于信任库中,并且我也不知道它们的别名-我想说“使用我提供给您的信任库”。这可能吗?

解决方法

Java KeyStore(* .jks)是Java特定的格式,而PostgreSQL不是用Java编写的,因此仅此一项就取消了您的truststore + keystore配置的资格。

对于PKCS12(*。p12文件扩展名),尽管它是一个与平台无关的标准,但我从未见过它与具有各种客户端(最著名的是基于JDBC)的PostgreSQL一起使用。为服务器提供证书。

考虑到所有因素,OP,您将不得不提取证书并直接使用它们。