You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GSS API实现Spring Boot与PostgreSQL的Kerberos认证连接?

如何通过GSS API实现Spring Boot与PostgreSQL的Kerberos身份认证?

问题背景

在加入域的Ubuntu虚拟机部署PostgreSQL,Windows系统可通过Windows账户用psql连接数据库,但Spring Boot应用无法通过GSS API完成Kerberos身份认证,Windows和Ubuntu环境分别出现不同报错。


Windows环境问题修复

错误表现

运行Spring Boot应用时抛出:

Caused by: javax.security.auth.login.LoginException: Unable to obtain password from user

PostgreSQL日志显示GSSAPI认证失败,匹配pg_hba.conf的gss规则。

问题根源

  1. jaas.conf中keyTab路径存在转义错误(C:\\dev\experiments少了一个反斜杠);
  2. 同时启用useTicketCache=true和useKeyTab=true,导致Kerberos模块优先尝试票据缓存,缓存无效时因doNotPrompt=true无法交互获取密码,触发报错。

修复步骤

  1. 修正jaas.conf配置:
pgjdbc {
com.sun.security.auth.module.Krb5LoginModule required
refreshKrb5Config=true
keyTab="C:\\dev\\experiments\\jdbc-kerberos\\krb5.keytab"
doNotPrompt=true
useTicketCache=false
renewTGT=true
useKeyTab=true
debug=true
client=true
principal="ivan.fomkin@MYDOMAIN.LOCAL";
};
  1. 验证keytab有效性:执行kinit -kt krb5.keytab ivan.fomkin@MYDOMAIN.LOCAL,确认能成功获取Kerberos票据;
  2. 更新JDBC URL:明确指定GSSAPI认证方式:
spring.datasource.url=jdbc:postgresql://ubuntupostgre.mydomain.local:5432/postgres?authentication=gssapi
  1. 权限检查:确保运行Spring Boot的Windows用户对krb5.keytab文件有读取权限。

Ubuntu环境问题修复

错误表现

以域用户运行应用时抛出:

Caused by: org.postgresql.util.PSQLException: The server requested SCRAM-based authentication, but no password was provided.

PostgreSQL日志显示连接匹配pg_hba.conf的scram-sha-256规则,而非gss规则。

问题根源

pg_hba.conf中127.0.0.1/32的scram认证规则优先级高于gss规则,本地连接优先走scram认证,未触发Kerberos流程。

修复步骤

  1. 调整pg_hba.conf规则顺序:将gss规则放在scram规则之前,确保本地连接优先使用Kerberos:
host all all 0.0.0.0/0 gss include_realm=1 krb_realm=MYDOMAIN.LOCAL map=gssmap
host    all             all             127.0.0.1/32            scram-sha-256

修改后重启PostgreSQL服务。
2. 更新JDBC URL:明确指定GSSAPI认证:

spring.datasource.url=jdbc:postgresql://ubuntupostgre.mydomain.local:5432/postgres?authentication=gssapi
  1. 修正jaas.conf配置:禁用票据缓存,避免冲突:
pgjdbc {
com.sun.security.auth.module.Krb5LoginModule required
refreshKrb5Config=true
keyTab="/home/i_fomkin/krb5.keytab"
doNotPrompt=true
useTicketCache=false
renewTGT=true
useKeyTab=true
debug=true
client=true
principal="ivan.fomkin@MYDOMAIN.LOCAL";
};
  1. 验证映射配置:确保pg_ident.conf中gssmap映射正确:
gssmap ivan.fomkin@MYDOMAIN.LOCAL  ivan.fomkin
  1. 权限检查:确保运行应用的用户对krb5.keytab文件有读取权限。

通用注意事项

  • 系统属性设置时机:Kerberos相关系统属性需在Spring Boot驱动初始化前设置,建议在main方法中提前配置,而非CommandLineRunner;
  • 驱动版本:使用PostgreSQL JDBC驱动42.2.0及以上版本,确保GSSAPI功能支持正常;
  • Kerberos配置验证:通过kinit、klist命令确认票据获取正常,排除Kerberos基础环境问题。

内容的提问来源于stack exchange,提问作者Ivan Fomkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:54:56