我正在尝试使用SASL连接到ldap服务器。我正在使用网址ldaps://ldap.example.com
进行连接,但服务器主机名为host.example.com
。 ldap.example.com
是host.example.com
的cname。我的程序正在尝试获取ldap/ldap.example.com
的服务票证,而不是执行反向DNS请求并获取ldap/host.example.com
的票证。当我使用ldap://host.example.com
时,一切正常,但我更喜欢使用服务CNAME。
我的代码用于创建连接工厂:
public DefaultConnectionFactory connectionFactory(){
return new DefaultConnectionFactory(connectionConfig());
}
private ConnectionConfig connectionConfig(){
final SaslConfig saslConfig = new SaslConfig();
saslConfig.setMechanism(Mechanism.GSSAPI);
final BindConnectionInitializer connectionInitializer = new BindConnectionInitializer();
connectionInitializer.setBindSaslConfig(saslConfig);
ConnectionConfig connConfig = new ConnectionConfig("ldaps://ldap.example.com");
connConfig.setConnectionInitializer(connectionInitializer);
return connConfig;
}
和jaas.config:
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
keyTab="/etc/ldap.keytab"
principal="ldap@EXAMPLE.COM"
storeKey=true
useKeyTab=true
debug=true
;
};
有没有办法改变这种行为?
答案 0 :(得分:1)
您应该申请一个新的证书,其中ldap.example.com
为主题名称,并以host.example.com
作为主题替代名称。证书协商在Kerberos之前处理。
还有一些建议:
LDAP / ldap.example.com
LDAP / host.example.com
ldap.example.com
host.example.com
principal="ldap@EXAMPLE.COM"
我建议应该是:principal=“ldap/host.example.com“;
请参阅GSSAPI的进一步阅读。