2016-09-12 3 views
1

CentOS6.6, Postfix, dovecot 2.0.9 und MySQL 5.1.73SASL Login-Authentifizierung fehlgeschlagen: UGFzc3dvcmQ6

dovecot Konfiguration (/etc/dovecot/dovecot-sql.conf.ext):

driver = mysql  
connect = host=127.0.0.1 dbname=postfix user=root password=lingo 

default_pass_scheme = SHA512 
password_query = SELECT email as user, password FROM virtual_user WHERE email='%u'; 

MySQL Datenbank:

mysql> SELECT email as user, password FROM virtual_user WHERE email='[email protected]'; 
+--------------------------+------------------------------------------------------------------------------------------------------------+ 
| user      | password                         | 
+--------------------------+------------------------------------------------------------------------------------------------------------+ 
| [email protected] | 0da3b4b0385c432a800ca15eae1a8485e5f7abad7b70b4e1c2b9cf15f68afd256cedb2029c6f7cec09e1221e6b10142081e1bb8e5c | 
+--------------------------+------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Das Kennwort wird von commons-codec, Java-Code:

generiert Jetzt

Ich schrieb einige Java-Code zur Authentifizierung:

public static void sendEmail() throws EmailException, GeneralSecurityException { 

     SimpleEmail email = new SimpleEmail(); 
     // smtp host 
     email.setHostName("192.168.15.139"); 
     email.setSmtpPort(25); 
     email.setDebug(true); 
     // DigestUtils.sha512Hex("lingo".getBytes()) 
     email.setAuthentication("[email protected]", "lingo"); 

     email.setStartTLSEnabled(true); 
     MailSSLSocketFactory socketFactory = new MailSSLSocketFactory(); 
     socketFactory.setTrustAllHosts(true); 
     Properties propsSSL = email.getMailSession().getProperties(); 
     propsSSL.put("mail.smtp.port", "465"); 
     propsSSL.put("mail.smtp.ssl.checkserveridentity", "false"); 
     propsSSL.put("mail.smtp.ssl.socketFactory", socketFactory); 
     email.addTo("[email protected]", "John Doe"); 
     email.setFrom("[email protected]", "Me"); 
     email.setSubject("Test message"); 
     email.setMsg("This is a simple test of commons-email"); 
     email.send(); 
     System.out.println("success"); 
    } 

    public static void main(String[] args) throws Exception { 
     SendEmailTest.sendEmail(); 
     // System.out.println(DigestUtils.sha512Hex("lingo".getBytes())); 
    } 

aber es funktioniert nicht mit folgenden Fehler:

Sep 12 13:30:51 localhost dovecot: auth: Debug: sql([email protected],192.168.15.243): query: SELECT email as user, password FROM virtual_user WHERE email='[email protected]'; 
Sep 12 13:30:51 localhost dovecot: auth: Error: sql([email protected],192.168.15.243): Password in passdb is not in expected scheme SHA512 
Sep 12 13:30:53 localhost postfix/smtpd[1872]: warning: unknown[192.168.15.243]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 
Sep 12 13:30:53 localhost dovecot: auth: Debug: client out: FAIL#0115#[email protected] 
Sep 12 13:30:53 localhost postfix/smtpd[1872]: lost connection after AUTH from unknown[192.168.15.243] 
Sep 12 13:30:53 localhost postfix/smtpd[1872]: disconnect from unknown[192.168.15.243] 

Wie kann ich die Authentifizierung beheben?

Antwort

1

Dies ist ein Taubenschlagkonfigurationsproblem. Dovecot kennt zwei Hash-Kodierungen, die "traditionelle" Hex-Kodierung (dh SHA512.HEX) und die Base64-Kodierung (dh SHA512.b64). Letzteres ist platzsparender, wenn es als Zeichenfolgen und als Standard in Dovecot gespeichert wird. Ein Beispiel für die Erzeugung des Hash mit sha512, sha512.b64 und sha512.hex Codierungen:

$ doveadm pw -p lingo -s sha512 
{SHA512}DaO0sDhcQyqADKFerhqEheX3q617cLThwrnPFfaK/SVs7bICnG987AnhIh5rEBQggeG7jlyAL7l+g8iTwo2GFA== 
$ doveadm pw -p lingo -s sha512.b64 
{SHA512.b64}DaO0sDhcQyqADKFerhqEheX3q617cLThwrnPFfaK/SVs7bICnG987AnhIh5rEBQggeG7jlyAL7l+g8iTwo2GFA== 
$ doveadm pw -p lingo -s sha512.hex 
{SHA512.HEX}0da3b4b0385c432a800ca15eae1a8485e5f7abad7b70b4e1c2b9cf15f68afd256cedb2029c6f7cec09e1221e6b10142081e1bb8e5c802fb97e83c893c28d8614 

Verwenden default_pass_scheme = SHA512.HEX wenn Sie hex-codierte Passwörter Hashes in Java erstellen. Die bessere Lösung wäre, die Kodierung {SCHEME}hash von Dovecot zu verwenden, anstatt die default_pass_scheme zu setzen: Auf diese Weise können Sie die Hash-Methode später leicht ändern/aktualisieren, ohne die Passwörter aller Benutzer gleichzeitig zu entwerten. Ein Beispiel für die Hash Sie in diesem Schema verwendet:

{SHA512.hex}0da3b4b0385c432a800ca15eae1a8485e5f7abad7b70b4e1c2b9cf15f68afd256cedb2029c6f7cec09e1221e6b10142081e1bb8e5c 

Schließlich: plain Hashing von Passwörtern ist nie, sparen auch nicht, wenn großen SHA512 Hash-Wert verwendet wird. Speichern Sie ungesalzene Passwort-Hashes niemals. Sie sind anfällig für Angriffe auf Rainbow-Tabellen, wenn die Datenbank ausläuft.

+0

ich dies tun und es funktioniert jetzt –

+0

Wenn die Antwort Ihr Problem gelöst, sollten Sie auf der linken Seite das Häkchen auswählen. Schaut euch auch die [FAQ] an. –

+0

Hallo Jens Erat, wie sha512 von Java zu generieren ?? –

0

i erzeugen durch diesen Code:

private String SHA(final String strText, final String strType) { 
     String strResult = null; 
     if (strText != null && strText.length() > 0) { 
      try { 
       MessageDigest messageDigest = MessageDigest.getInstance(strType); 
       messageDigest.update(strText.getBytes()); 
       byte byteBuffer[] = messageDigest.digest(); 
       StringBuffer strHexString = new StringBuffer(); 
       for (int i = 0; i < byteBuffer.length; i++) { 
        String hex = Integer.toHexString(0xff & byteBuffer[i]); 
        if (hex.length() == 1) { 
         strHexString.append('0'); 
        } 
        strHexString.append(hex); 
       } 
       strResult = strHexString.toString(); 
      } catch (NoSuchAlgorithmException e) { 
       e.printStackTrace(); 
      } 
     } 

     return strResult; 
    } 

    public static void main(String[] args) { 
     EncryptUtils et=new EncryptUtils(); 
     String pas=et.SHA512("lingo"); 
     System.out.println("{SHA512.HEX}"+pas); 
    } 
Verwandte Themen