Autor Téma: Spojení na SMTP office365 via TLS1.2  (Přečteno 204 krát)

Offline TomSoft

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 2
    • Verze Delphi: XE7
Spojení na SMTP office365 via TLS1.2
« kdy: 20-07-2019, 21:36:57 »
Excellent
Rated 1 time
Zdravím :)
řeším connect na smtp.office365.com explicitně přes TLS1.2
Samotný kód (viz. níže) funguje OK, ale když si spustím WinShark, abych se podíval jak to skutečně komunikuje, tak vidím, že je sice vše přes TLS1.2, ale začátek komunikace "Client Hello" je ve verzi TLS 1.0.- viz. obrázek.
Když se třeba podívám jak komunikuje Total Commander, když se připojuje na FTPS, který vyžaduje TLS 1.2, tak i ten pozdrav je ve verzi 1.2
Použil jsem Indy v. 10.6.0.516....
Nemáte s tím někdo zkušenosti?
Díky

Kód: Delphi [Vybrat]
  1. var
  2.   idSMTP1: TIdSMTP;
  3.   idSASLLogin: TIdSASLLogin;
  4.   idUserPassProvider: TIdUserPassProvider;
  5.   email: TIdMessage;
  6. begin
  7.   idSMTP1 := TIdSMTP.Create(nil);
  8.   try
  9.     idSMTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSMTP1);
  10.     idSMTP1.UseTLS := utUseExplicitTLS;
  11.     TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.Method := sslvTLSv1_2;
  12.     TIdSSLIOHandlerSocketOpenSSL(idSMTP1.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2];
  13.  
  14.  
  15.     idSMTP1.Host := 'smtp.office365.com';
  16.     idSMTP1.Port := 587;
  17.  
  18.     idSASLLogin := TIdSASLLogin.Create(idSMTP1);
  19.     idUserPassProvider := TIdUserPassProvider.Create(idSASLLogin);
  20.  
  21.     idSASLLogin.UserPassProvider := idUserPassProvider;
  22.     idUserPassProvider.Username := 'email@jmeno.onmicrosoft.com';
  23.     idUserPassProvider.Password := 'heslo';
  24.  
  25.     idSMTP1.AuthType := satSASL;
  26.     idSMTP1.SASLMechanisms.Add.SASL := idSASLLogin;
  27.  
  28.     try
  29.       idSMTP1.Connect;
  30.       try
  31.         idSMTP1.Authenticate;
  32.       finally
  33.         idSMTP1.Disconnect;
  34.       end;
  35.       ShowMessage('OK - Připojeno');
  36.     except
  37.       on E: Exception do
  38.       begin
  39.         ShowMessage(Format('Chyba!'#13'[%s] %s', [E.ClassName, E.Message]));
  40.         raise;
  41.       end;
  42.     end;
  43.   finally
  44.     idSMTP1.Free;
  45.   end;

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Spojení na SMTP office365 via TLS1.2
« Odpověď #1 kdy: 21-07-2019, 10:11:41 »
Ja tedy s PIndy nice nedelal, ale pamatuju si, ze se tady negotiation probiralo https://forum.delphi.cz/index.php/topic,16512.msg103314.html#msg103314

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1126
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Spojení na SMTP office365 via TLS1.2
« Odpověď #2 kdy: 22-07-2019, 20:20:24 »
Excellent
Rated 1 time
Myslím, že nejde o chybu, jen špatný výklad. Kód je správně a Indy vyžaduje TLS1.2
Zbytek už záleží na serveru Microsoftu. To stejné je vidět, když navštívíš google.com v prohlížeči.
Jinak, není potřeba nastavovat Method i SSLVersions (jedno ovlivňuje druhé).

Našel jsem i nějaké fundovanější vyjádření
https://security.stackexchange.com/questions/29314/what-is-the-significance-of-the-version-field-in-a-tls-1-1-clienthello-message

Offline TomSoft

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 2
    • Verze Delphi: XE7
Re:Spojení na SMTP office365 via TLS1.2
« Odpověď #3 kdy: 22-07-2019, 23:47:49 »
Super, díky, to mi stačí.