Kerberos Authentication -- Configure JDBC Clients on All Platforms

JDBC客户机上的Kerberos身份验证使用Java身份验证和授权服务(JAAS)获取初始Kerberos凭证。JAAS是一个API框架,它隐藏特定于平台的身份验证细节,并为其他应用程序提供一致的接口。
您可以通过JAAS登录配置文件指定客户机登录过程。这个文件包含指定Kerberos的身份验证方法和其他设置的选项。一个名为LoginModule的类在配置文件中定义了有效的选项。

JDBC客户端principal 被设计为JDBC -username@server-from-connection-string。

Implement the LoginModule

Vertica建议您使用JAAS公共类com.sun.security.auth.module。Krb5LoginModul在Java运行时环境(JRE)中提供。
Krb5LoginModule使用Kerberos协议对用户进行身份验证,它在非Windows和Windows平台上的实现方式不同:

  1. 在非windows平台上
    Krb5LoginModule依赖于一个本地Kerberos客户机实现。因此,可以使用与在Linux、HP-UX、AIX和MAC OSX平台上配置ODBC和vsql客户机相同的/etc/krb5.conf设置。
  2. 在Windows平台上
    Krb5LoginModule使用与Java运行时环境(JRE)绑定的自定义Kerberos客户端实现。Windows设置存储在%WINDIR%\krb5.ini文件中,该文件具有与非Windows krb5.conf文件类似的语法和约定。您可以将krb5.conf从非windows客户端复制到%WINDIR%\krb5.ini。

Create the JAAS Login Configuration

JAASConfigName连接属性标识包含Krb5LoginModule及其设置的JAAS配置中的特定配置。JAASConfigName设置允许具有不同Kerberos设置的多个JDBC应用程序在一个主机上共存。默认的配置名是verticajdbc。

重点:仔细构造JAAS登录配置文件。如果语法不正确,身份验证将失败。

您可以在java中配置与jaas相关的设置。安全主安全属性文件。这个文件位于JRE的lib/security目录中。

Create a JDBC Login Context

下面的示例演示如何在JDBC客户机上为Kerberos身份验证创建登录上下文。客户端使用verticajdbc的默认JAASConfigName,并指定:

  • 将从票证缓存中获取票证授予票证
  • 如果无法从缓存、keytab文件或通过共享状态获得凭据,则不会提示用户输入密码。
verticajdbc {
  com.sun.security.auth.module.Krb5LoginModule 
  required
  useTicketCache=true 
  doNotPrompt=true;
};

JDBC Authentication Request and Connection

您可以配置Krb5LoginModule来使用缓存的票据或keytab。如果调用用户提供了密码,驱动程序还可以自动获取票据或keytab。
在前面的示例中,登录过程使用一个缓存的票证,并且不提示输入密码,因为useTicketCache和doNotPrompt都被设置为true。如果doNotPrompt=false,并且在登录过程中提供了用户名和密码,则驱动程序将该信息提供给LoginModule。然后驱动程序代表您调用kinit实用程序。

  • 在JDBC客户机上,调用kinit实用程序获得一个票据:
$ kinit kuser@EXAMPLE.COM
  • 连接到Vertica:
Properties props = new Properties();
props.setProperty("user", "kuser");
props.setProperty("KerberosServiceName", "vertica");
props.setProperty("KerberosHostName", "vcluster.example.com");
props.setProperty("JAASConfigName", "verticajdbc");
Connection conn = DriverManager.getConnection
"jdbc:vertica://myserver.example.com:5433/VMart", props);

Have the Driver Acquire a Ticket

有时,您可能希望自己不调用kinit实用程序,但仍然使用加密的相互身份验证。在这种情况下,您可以选择向驱动程序传递一个明文密码,以便从KDC获取票据。密码在通过网络发送时进行加密。例如,在下面的例子中,useTicketCache和doNotPrompt都为false。因此,调用用户的凭证不是通过票据缓存或keytab获得的。

$ verticajdbc  {
  com.sun.security.auth.module.Krb5LoginModule  
  required  
  useTicketCache=false 
  doNotPrompt=false;
};

前面的示例演示了JAAS的灵活性。driver不再寻找缓存的票,你不需要调用kinit。相反,驱动程序接受密码和用户名,并代表您调用kinit。

翻译自:
Configure JDBC Clients on All Platforms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章