Delphi XE i TLS 1.2

Jun 13 at 9:30 AM
Evo da otvorim i ovu temu prije panike. Ako se sjecate ovdje je bila razrađena fiskalizacija sa rjesenjem za Delphi ( mislim da nam je to CipeXP složio ). S obzirom da je meni to i dalje crna rupa po pitanju SSL i TLS protokola, zanima me sto je u tom rjesenju potrebno i dali je potrebno napraviti da sve bude radilo i na TLS 1.2 kad porezna i to pokrene tj. ugasi stare protokole.

Hvala svima na doprinosu
Jun 13 at 11:08 AM
Edited Jun 13 at 2:32 PM
Ako koristiš dot net dll, trebat će ti dot net verzija 4.5 (windows 7 ili noviji)
Ja imam delphi 7 i indy ne radi sa tls 1.2, pa koristnim synacode
http://www.ararat.cz/synapse/doku.php/download
i openSSL dll-ove verzija 1.0.1e
https://indy.fulgan.com/SSL/
Sa novim fininim certifikatima ne radi verifikacija servera, ni sa OpenSSL-om ni na Androidu (Bouncy Castle)
tako da je jednia opcija ne verificirat server.
(u THTTPSend pod Sock.SSL.VerifyCert setiraš na false)
ispod je cila fukcije (ako je CertKeyName= '' nema verifikacije)

function HttpSynapsePostURL(const URL, URLData: string; const Data: TStream;CertKeyName:string): Boolean;
var  HTTP: THTTPSend;
begin
 // synaSSLInit;  //inicijalizira varijable i funkcije za post (tu je za svki slučaj, ako potpis već nije inicijalizira libove) !!!
 
  HTTP := THTTPSend.Create;
  try
    WriteStrToStream(HTTP.Document, URLData);
    HTTP.MimeType := 'text/xml';
    if CertKeyName <> '' then begin
      HTTP.Sock.SSL.VerifyCert := True;
      HTTP.Sock.SSL.CertCAFile := CertKeyName;
    end else begin
      HTTP.Sock.SSL.VerifyCert := False; 
      HTTP.Sock.SSL.CertCAFile := '';
      if c_Fisk_Slo then begin
        HTTP.Sock.SSL.PFXfile := c_Fisk_KeyName;
        HTTP.Sock.SSL.KeyPassword := c_Fisk_Zaporka;
        HTTP.Headers.Add('SOAPAction: /echo');
      end;
    end;
    Result := HTTP.HTTPMethod('POST', URL);
    if HTTP.Sock.LastError<>0 then raise Exception.Create(HTTP.Sock.LastErrorDesc);
    if HTTP.Sock.SSL.LastError<>0 then raise Exception.Create(HTTP.Sock.SSL.LastErrorDesc);
    if Result then
      Data.CopyFrom(HTTP.Document, 0);
  finally
    HTTP.Free;
  end;
end;
Jun 20 at 11:13 AM
Nešto sam testirao sa Fiddlerom komunikaciju sa poreznom u testnom okruženju i izgleda da staro rješenje napravljeno na XE delphiju već podržava TLS 1.1 i 1.2 . Ako u kodu nije striktno definiran protokol za THTTPReqResp, server uredno iskomunicira u najboljem mogućem protokolu, dakle odradi sve s TLS 1.2, naravno ako vaše windoze to podržavaju.

Jel netko probao kod sebe napravit istu probu ?
Jun 20 at 3:51 PM
Vidim da taj Fiddler treba instalirat, pa prije nego idem instalirat da pitam. Jel to komplicirano podesit da mogu provjerit koji protokol se poziva?
Jun 20 at 3:57 PM

Ma ništa posebno. Samo poguraj instalaciju i sve ce ti bit jasno. Minimiziraš ga i onda poguras program za kasu i fiskaliziras jedan racun. Nakon toga odes natrag u fidler i nadjes redak u kojem se poziva url od testcis-a. Tam ce ti bit zapisan protokol itd.....


pon, 20. lip 2016. 16:51 moremore <[email removed]> je napisao:

From: moremore

Vidim da taj Fiddler treba instalirat, pa prije nego idem instalirat da pitam. Jel to komplicirano podesit da mogu provjerit koji protokol se poziva?

Read the full discussion online.

To add a post to this discussion, reply to this email ([email removed])

To start a new discussion for this project, email [email removed]

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe or change your settings on codePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at codeplex.com

Jun 20 at 4:05 PM
Thx,

to bi bilo ovo valjda?

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)
Jun 20 at 4:11 PM

Tocno, a ako dopustis da ti fidler instalira svoj cert i decrypt onda mozes dobiti i puno vise detalja, vidjeti cijeli xml itd. ali i ovo je za pocetak dovoljno. Ocito i tebi radi TLS 1.2. Ja sam se igrao pa forsao kroz delphi stare protokole pa isto fercera i preko njih.


pon, 20. lip 2016. 17:06 moremore <[email removed]> je napisao:

From: moremore

Thx,

to bi bilo ovo valjda?

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)

Read the full discussion online.

To add a post to this discussion, reply to this email ([email removed])

To start a new discussion for this project, email [email removed]

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe or change your settings on codePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at codeplex.com

Jun 20 at 4:13 PM
thx tZac!
Je, instalirao sam cert i decrpyt i moram priznat da je zgodna stvarčica taj fiddler :)
Jun 20 at 4:15 PM

Je, meni su ti protokoli crna rupa, ali evo i crna rupa nekad izbaci nesto pozitivno he he :)


pon, 20. lip 2016. 17:13 moremore <[email removed]> je napisao:

From: moremore

thx tZac!
Je, instalirao sam cert i decrpyt i moram priznat da je zgodna stvarčica taj fiddler :)

Read the full discussion online.

To add a post to this discussion, reply to this email ([email removed])

To start a new discussion for this project, email [email removed]

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe or change your settings on codePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at codeplex.com

Jun 20 at 4:17 PM
cipexp wrote:
Ako koristiš dot net dll, trebat će ti dot net verzija 4.5 (windows 7 ili noviji)
Ja imam delphi 7 i indy ne radi sa tls 1.2, pa koristnim synacode
Mislim da Indy10 radi sa TLS 1.2. Sjećam se da sam se bio igrao sa IOSSLHandlerom ili kako se već zove i znam da se moglo podesit TLS1 i TLS2.
Jun 20 at 4:24 PM
Edited Jun 21 at 2:12 PM
Upravo tako. Indy 10 je uvjet. I moja igra je bila pomocu IOSSLHandlera i fiddler je lijepo pokazao da izbor protokola radi. Ako se stavi onaj parametar za tip protokola, ClientSSL.SSLOptions.Method := sslvSSLv23, onda je autoselect tj. bira sam najbolji mogući koji server podržava
Jul 25 at 9:05 AM
Što dalje to mi je sve manje jasno što se događa :)

Fiddler i kod mene na XE2 prijevljuje da koristi TLS1.2 protokol. Ali mi nije baš potpuno jasno kako.

Ispravite me ako griješim, ali THTTPReqResp komponenta se oslanja na paket Indy komponenti koji se distribuira sa Delphijem. Indy komponente, da bi uopće mogle koristiti SSL/TLS protokole trebaju open SSL library. I to ne bilo koji, nego onaj koji je bio aktualan u trenutku distribucije Indy paketa. Ako se pokuša koristiti neka druga verzija, javlja se greška i stvari ne mogu raditi nikako.

Iz više izvora, zadnji je sa "radionice" APIS-a, TLS 1.2. je podržan u open SSL library-u tek od 1.x verzije(ne znam napamet točnu verziju) od 2012 god.

E, sad, ako se dobro sjećam Indy uz Delphi XE2 koristi open SSL 0.9.x ili tako nešto. Nisam više 100% siguran točno koja je verzija kod mene, ali DLL koji se koristi je iz 2005. god. Što će reći, da je daleko stariji od library-a kada je uveden TLS1.2.


Ostaje nam samo sačekati 1.9.2016 da možemo pouzdano provjeriti da li postojeća rješenja i dalje rade ispravno ili nam Fiddler daje dezinformacije.

Nekako nisam previše optimističan, tako da će rješenja sa Delphi-em ili morati koristiti neki drugi library, ili neka "hibridna" rješenja zasnovana na .net-u. (Dio programa pisan u Delphi-u, dio u C# ili koristiti postojeći raverusov dll)

Da li je netko od vas pokušao tražiti neki drugi pouzdan library ? synapse paket koji je predložio cipexp je još u beta verziji za XE i novije verzije Delphi-a, embarcadero pokušava progurati IPWorks, ali sam nekako skeptičan prema njima. Nekako se nameće eldos sa svojim SecureBlackBox library-em, ali je cijena ta koja je veliki faktor pri odabiru zadovoljavajućeg paketa. Iako, dugoročno, ako se planiraju kupovati nove verzije Delphia, eldos ispada najjeftiniji.
Jul 25 at 9:41 AM
krunof wrote:
Što dalje to mi je sve manje jasno što se događa :)

Fiddler i kod mene na XE2 prijevljuje da koristi TLS1.2 protokol. Ali mi nije baš potpuno jasno kako.

Ispravite me ako griješim, ali THTTPReqResp komponenta se oslanja na paket Indy komponenti koji se distribuira sa Delphijem. Indy komponente, da bi uopće mogle koristiti SSL/TLS protokole trebaju open SSL library. I to ne bilo koji, nego onaj koji je bio aktualan u trenutku distribucije Indy paketa. Ako se pokuša koristiti neka druga verzija, javlja se greška i stvari ne mogu raditi nikako.

Iz više izvora, zadnji je sa "radionice" APIS-a, TLS 1.2. je podržan u open SSL library-u tek od 1.x verzije(ne znam napamet točnu verziju) od 2012 god.

E, sad, ako se dobro sjećam Indy uz Delphi XE2 koristi open SSL 0.9.x ili tako nešto. Nisam više 100% siguran točno koja je verzija kod mene, ali DLL koji se koristi je iz 2005. god. Što će reći, da je daleko stariji od library-a kada je uveden TLS1.2.


Ostaje nam samo sačekati 1.9.2016 da možemo pouzdano provjeriti da li postojeća rješenja i dalje rade ispravno ili nam Fiddler daje dezinformacije.

Nekako nisam previše optimističan, tako da će rješenja sa Delphi-em ili morati koristiti neki drugi library, ili neka "hibridna" rješenja zasnovana na .net-u. (Dio programa pisan u Delphi-u, dio u C# ili koristiti postojeći raverusov dll)

Da li je netko od vas pokušao tražiti neki drugi pouzdan library ? synapse paket koji je predložio cipexp je još u beta verziji za XE i novije verzije Delphi-a, embarcadero pokušava progurati IPWorks, ali sam nekako skeptičan prema njima. Nekako se nameće eldos sa svojim SecureBlackBox library-em, ali je cijena ta koja je veliki faktor pri odabiru zadovoljavajućeg paketa. Iako, dugoročno, ako se planiraju kupovati nove verzije Delphia, eldos ispada najjeftiniji.
Već sam ovdje već pisao da sam testirao fiskalizaciju koristeći Raspberry Pi kao proxy. Na njemu sam forsirao TLS 1.2, aplikaciju nisam ništa dirao (radio sam je koristeći Delphi 7, Indy 9 i OpenSSL 1.0.1) i sve je radilo. Indy je nekada koristio posebne OpenSSl dll-ove, sada koristi standardne.