2017-02-18 97 views
1

我正嘗試使用SASL連接到ldap服務器。我使用網址ldaps://ldap.example.com進行連接,但服務器主機名爲host.example.comldap.example.comhost.example.com的cname。我的程序試圖獲取ldap/ldap.example.com的服務票證,而不是執行反向DNS請求並獲取ldap/host.example.com的票證。當我使用ldap://host.example.com時,一切正常,但我更喜歡使用服務CNAME。使用GSSAPI連接到ldap。錯誤的服務負責人

還有就是我創建連接工廠代碼:

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="[email protected]" 
    storeKey=true 
    useKeyTab=true 
    debug=true 
    ; 
}; 

有什麼辦法來改變這種行爲?

回答

1

您應申請一個新的證書,其中ldap.example.com作爲主題名稱,host.example.com作爲主題備選名稱。證書協商在Kerberos之前處理。

一對夫婦更建議:

  1. 所有的SPN應該在KDC定義:

LDAP/ldap.example.com

LDAP/host.example.com

  1. 這兩個A記錄應該在DNS中設置。 Avoid use of CNAMES, while it might be OK at any given time, different browser versions and future updates could cause inconsistent behavior

ldap.example.com

host.example.com

  • jaas.config委託人和密鑰表應該匹配。您有:
  • principal="[email protected]"

    我建議應該是:principal=「ldap/host.example.com「;

  • 最後,LDAP/host.example.com應當被定義爲在SPN你的密鑰表。如果不是,則可能是好的,只要您(1)將其添加爲密鑰表中相關的其他SPN:How do you add multiple SPNs to the same keytab file for Spnego or Kerberos Configuration?或(2)如果您使用的是Active Directory且您的應用程序服務器支持它,請參閱Setspn
  • 查看關於GSSAPI的更多文章。

    +0

    感謝您的回答,但我不確定您是否正確理解了我。 'ldap.example.com'是'host.example.com'的cname(根據你的回答,我不應該,我認爲是這樣),'ldap @ EXAMPLE.COM'是我的客戶端主體,它擁有權限在ldap。什麼更好一切工作正常我使用'ldap:// host.example.com',但我只有ldap.example.com設置在我的tls證書。 – maxmati

    +0

    我更新了我的回答,並附上關於證書角度的聲明,因爲我看到您對您的問題進行了一些編輯。這應該解決這個問題。我會考慮我的其他關於SPN的文章作爲「最佳實踐」。 –