【问题标题】:Providing Certificates to Tomcat for Postgres Connection为 Tomcat 提供证书以进行 Postgres 连接
【发布时间】:2019-06-17 20:54:38
【问题描述】:

我正在为 Tomcat 8.5 配置 TLS,使用自签名证书进行 Postgres 通信。

向 Tomcat 提供证书、PK(以 PKCS12 格式捆绑)和 CA 证书(根证书)的最佳方式是什么?

Tomcat 被设置为服务,因此最好提供启动 VM 参数。我试图在 Configure Tomcat -> Java Opts 中提供这些

-Djavax.net.ssl.keyStorePassword=changeit
-Djavax.net.ssl.trustStore=D:\test\data\pg_cert\truststore
-Djavax.net.ssl.trustStorePassword=changeit

但是 Tomcat 似乎没有加载这些。如果我使用独立的 Java 类对此进行测试,那么它能够连接。

我在某处读到,在 tomcat 启动脚本中提供证书可能是一种选择,但是为了在生产中保持最小的更改,这将是最后的选择。

【问题讨论】:

    标签: postgresql ssl tomcat


    【解决方案1】:

    JDBC 连接必须包含 url 参数:

  • sslmode=verify-ca
  • sslcert=${user.home}/.postgresql/postgresql.crt

    如果您使用相互身份验证,则 Postgres-Server 必须提供他的公钥,并且必须在 Postgres-Server 信任库中保存客户端的公钥。

    更多信息请访问"Configuring the Client" 页面。

    我想警告您:pki 是一个复杂的术语,SSL 会话可能会持续数周才能知道证书已被 OCSP 停用。我更喜欢直接将密码传递给服务器启动/停止脚本,而不将密码存储到文件系统中。

  • 【讨论】:

    • 感谢彼得的提示。我能够在连接字符串中修复这个传递 SSL 参数的问题。
    • 您还有其他问题吗?我问只是因为 db-pki 是一项复杂的任务。
    • ´@Peter 嗨,在另一个项目中,我再次陷入了这个问题。我尝试在自定义密钥库、信任库中导入证书以及在 JDBC 连接字符串中提供详细信息。错误:%% Invalidated: ..SEND TLSv1.2 ALERT: fatal, description = certificate_unknown ..sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target PS:此项目使用通配符证书,以便从第三方获取数据。有什么提示吗?
    • @user4124459 无效的是会话标识符 (SI)。 “ALERT”是从服务器发送到客户端的协议(是的,令人困惑)。致命警报发生在服务器端 (db-server)。请参阅 RFC5246。如果 db-server 调试记录其 TLS 工作,您将找到更多详细信息。我的猜测是 db-server 在其信任库中找不到客户端证书(或其链成员)。要遵循这个想法,请使用 KeyStore Explorer(其他人可能有用,但我更喜欢 KSE)。
    • 不,我很奇怪,那是由于 pg-jdbc.jar 的不同!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2014-04-08
    • 2011-12-28
    • 2010-12-09
    • 2011-02-28
    • 2015-07-09
    • 2022-10-19
    相关资源
    最近更新 更多