2012-09-27 184 views
4

我正在使用一個網站,它用於重置ldap用戶的passsword。 我無法通過ssl與服務器建立連接。我嘗試了各種代碼和認證類型。連接到SSL打開LDAP

這是在服務器上用於連接託管網站的ldap的用途。 我也用兩個ssl端口測試過它。 636和3269

0 = ldap_set_option(ld, LDAP_OPT_ENCRYPT, 1) 
res = ldap_bind_s(ld, NULL, &NtAuthIdentity?, NEGOTIATE (1158)); v.3 

{NtAuthIdentity?: User='_ldapuser'; Pwd='unavailable';; domain = 'SJTPNOC.DOMAIN'} 

我使用下面的代碼在網站

LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier("SJTP.DOMAIN",636)); 

connection.SessionOptions.ProtocolVersion = 3; 

connection.AuthType = AuthType.Basic; 

connection.Credential = new NetworkCredential("CN=user,CN=Users,DC=SJTPNOC,DC=DOMAIN", "password","CN=Users,DC=SJTPNOC,DC=DOMAIN"); 

connection.SessionOptions.SecureSocketLayer=true; 

connection.Bind(); 

獲得異常 「LDAP服務器不可用」。我嘗試了389端口 的代碼,沒有ssl,它的工作正常。

請讓我知道什麼是錯的。幫助我緊迫。

回答

4

如果只想加密,並且不需要LDAP服務器的強大的身份驗證,也許你應該增加:

connection.SessionOptions.VerifyServerCertificate = 
       new VerifyServerCertificateCallback((con, cer) => true); 
+0

非常感謝。其作品。 –

+0

現在我必須重置用戶密碼 –

+0

我對userPassword使用了替換操作,但出現錯誤「服務器無法處理目錄請求。」。 –

3

我也有通過SSL連接問題,但不超過明文。我做了一些網絡嗅探,並能夠看到,雖然我將LdapConnection.AuthType設置爲Basic,但我的客戶端計算機正在爲SSL握手查找並使用客戶端證書。它發現的證書(不知道我是否應該對VisualStudio或.NET LdapConnection類感到憤怒)是一種俗氣的自簽名證書,LDAP服務器不喜歡。它返回了一個非常安全的「服務器不可用」錯誤;對它有好處。所以在SessionOptions客戶端證書解析委託我需要一個非常簡單的實現提供:

public static X509Certificate ClientCertFinder(LdapConnection connection, 
               byte[][] trustedCAs) 
{ 
    return null; 
} 

然後,設置SessionOptions QueryClientCertificateCallback委託使用存根這樣的:

connection.SessionOptions.QueryClientCertificate = 
     new QueryClientCertificateCallback(ClientCertFinder); 

你可能甚至可以將此作爲一個oneliner,就像在@ jbl的驗證回調的答案中一樣,但是也許有一天我會做客戶端證書認證,並且讓那個存根作爲提醒如何去做。