使用 kerberos 使用 golang pq 连接到 postgres 时如何指定密钥表文件?

How can i specify keytab file when connecting to postgres with golang pq using kerberos?

我目前正在使用 golang pq 库连接到 postgres 数据库。我使用 kerberos 主体成功连接,但我无法弄清楚我可以在哪里指定要使用的 keytab 文件。在源代码中,它有点神奇地发生了,使用了一些第三方库。它确实有效,但我需要确定它如何知道我的密钥表存储在哪里,以便它可以请求初始票证。

通常 Kerberos 客户端不直接使用密钥表;他们希望 初始票证 已经获得并存在于环境中。也就是说,您应该在 运行 程序之前 kinit,然后客户端的 GSSAPI 库查找 KRB5CCNAME 环境变量,该变量指向包含由kinit.

(通常对于 MIT Kerberos 或 Heimdal,它可能是除文件之外的许多其他东西...但是 'pq' 库使用 非常 最小 pure-Go Kerberos 实现仅接受传统的 file-based ccache。因此,如果您的发行版上的 Krb5 设置为使用 'DIR' 或 'KEYRING' 或 'KCM' 缓存类型,请小心,这些都不是不打算在这里工作了。)

如果初始票 存在,如果 KRB5_CLIENT_KTNAME 环境变量指向,MIT Krb5 实现实际上会自动使用密钥表获取票到一个。不幸的是,'pq' 库不使用系统 Kerberos 库,所以它在这里也不起作用。 (但如果您的 OS 使用的是 Heimdal Kerberos,它也不会工作;它是一个 MIT-specific 扩展。)

所以 总是 工作的方法是将 KRB5CCNAME 设置为临时路径,然后使用 kinitk5start 从密钥表,在 运行 您的程序之前。 (k5start 工具也会在票过期前自动更新或re-acquiring 票,无需使用 cron。)


真的,整个 krb_unix.go 文件都令人失望。如果他们可以在 Windows 上调用本机 SSPI,那么他们肯定可以在 Linux...

上调用本机 GSSAPI