Vzpostavitev TLS Seje

Vse kar se tiče programiranja za internet.
dr*no
Prispevkov: 11
Pridružen: 19.07.2013 08:47:29

Vzpostavitev TLS Seje

Odgovor Napisal/-a dr*no » 02.10.2015 12:08:12

Pozdravljeni.

Na tem področju sem čisti začetnik. Želim vzpostativi TLS sejo s testnim okoljem https://blagajne-test.fu.gov.si:9002/v1/cash_registers. Gre za davčno potrjevanje računov.
Prosim, če mi lahko kdo pomaga ter zapiše osnove za Indy10 za vzpostavitev TLS1.2 povezave. Kako nato komuniciraš z strežnikom. Nikjer na netu ne najdem nič uporabnega.

Že v naprej hvala.

dr*no
Prispevkov: 11
Pridružen: 19.07.2013 08:47:29

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a dr*no » 04.10.2015 20:04:29

OK,
povezava uspela s pomočjo idTCPClient in IdSSLIOHandlerSocketOpenSSL komponente. Zdaj pa naprej. :)

Strežnik javil:
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server key exchange A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = DHE-RSA-AES256-GCM-SHA384; description = DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
; bits = 256; version = TLSv1/SSLv3;

usbdoo
Prispevkov: 4
Pridružen: 29.09.2015 08:37:01

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a usbdoo » 05.10.2015 08:39:41

Zanimivo?



V čem programiraš?
Katero verzijo indy uporabljaš.
Kje ti je to uspelo linux, windows?

Men javi ne ne more load -at ssl
Kak si, pa nastavil prametre od clienta?

grinta007
Prispevkov: 5
Pridružen: 10.09.2015 17:51:26

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a grinta007 » 05.10.2015 13:05:37

meni stvar deluje, spodaj je primer za echo:

Koda: Izberi vse

procedure TForm1.Button1Click(Sender: TObject);
var
  HTTPReqResp: THTTPReqResp;
  Stream: TMemoryStream;
  StrStream: TStringStream;
  xmldata: AnsiString;
  rezultat: TXMLDocument;
  aNode: IXMLNode;
begin
  Stream := TMemoryStream.Create;
  StrStream := TStringStream.Create('');
  HTTPReqResp := THTTPReqResp.Create(nil);
  try
    rezultat := TXMLDocument.Create(Application);

    xmldata := '';
    xmldata := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:fu="http://www.fu.gov.si/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">'
      + '<soapenv:Body>' + '<fu:EchoRequest>' + eEchoSpor.text +
      '</fu:EchoRequest>' + '</soapenv:Body>' + '</soapenv:Envelope>';

    mInput.text := xmldata;
    HTTPReqResp.Agent := 'Borland SOAP 1.1';
    HTTPReqResp.UseUTF8InHeader := true;
    HTTPReqResp.SoapAction := '/echo';
 (*   if cb1.text = 'Echo' then
      HTTPReqResp.SoapAction := '/echo';
    if cb1.text = 'Račun' then
      HTTPReqResp.SoapAction := '/invoices';
    if cb1.text = 'Prostor' then
      HTTPReqResp.SoapAction := '/invoices/register'; *)

    HTTPReqResp.URl :=  'https://blagajne-test.fu.gov.si:9002/v1/cash_registers/';
    HTTPReqResp.Execute(xmldata, Stream);
    StrStream.CopyFrom(Stream, 0);
    Stream.Position := 0;
    if Stream.Size > 0 then
    begin
      rezultat.LoadFromStream(Stream);
      mOutput.Lines.Clear;
      mOutput.text := rezultat.XML.text;

      aNode := rezultat.ChildNodes.FindNode('soapenv:Envelope');
      if Assigned(aNode) and aNode.HasChildNodes then
      begin
        aNode := aNode.ChildNodes.FindNode('soapenv:Body');
        if Assigned(aNode) and aNode.HasChildNodes then
        begin
          aNode := XMLFindNode(aNode, 'fu:EchoResponse');
          if Assigned(aNode) then
            eRezEcho.text := aNode.NodeValue
          else
            eRezEcho.text := 'Napaka';
        end;
      end;
     end
    else
    begin
      eRezEcho.text := 'NONET'
    end;

  finally
    HTTPReqResp.Free;
    Stream.Free;
    StrStream.Free;
  end;
end;


dr*no
Prispevkov: 11
Pridružen: 19.07.2013 08:47:29

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a dr*no » 07.10.2015 17:12:25

Programiram v delphi 7, indy 10

Natsvaitve pa so:

Koda: Izberi vse

IdSSLIOHandlerSocketOpenSSL1.Port := 9002;
IdSSLIOHandlerSocketOpenSSL1.Host :=  'blagajne-test.fu.gov.si';
IdSSLIOHandlerSocketOpenSSL1.Destination := 'blagajne-test.fu.gov.si:9002';
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.RootCertFile := '.\test-tls.cer';

Koda: Izberi vse

  object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
    Destination = 'blagajne-test.fu.gov.si:9002'
    Host = 'blagajne-test.fu.gov.si'
    MaxLineAction = maException
    Port = 9002
    DefaultPort = 0
    SSLOptions.Method = sslvTLSv1_2
    SSLOptions.SSLVersions = [sslvTLSv1_2]
    SSLOptions.Mode = sslmBoth
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    OnStatusInfo = IdSSLIOHandlerSocketOpenSSL1StatusInfo
    Left = 472
    Top = 8
  end
Lp

sandiT
Prispevkov: 1
Pridružen: 08.10.2015 09:27:32

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a sandiT » 08.10.2015 09:30:22

Pozdravljeni,

jaz pa dobivam napako pri postu s idhttp unsupported encoding, oz unsupported media type

Ali ve kdo kaj bi bilo lahko narobe.

lp s

dr*no
Prispevkov: 11
Pridružen: 19.07.2013 08:47:29

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a dr*no » 08.10.2015 17:45:57

sandiT napisal/-a:Pozdravljeni,

jaz pa dobivam napako pri postu s idhttp unsupported encoding, oz unsupported media type

Ali ve kdo kaj bi bilo lahko narobe.

lp s
Dodaj spodnjo kodo.

Koda: Izberi vse

IdHTTP1.Request.ContentType := 'text/xml;charset=UTF-8';
IdHTTP1.Request.Connection := 'KeepAlive';
IdHTTP1.Request.CustomHeaders.Add('SOAPAction: /invoices');

jamsi
Prispevkov: 1
Pridružen: 27.10.2015 09:55:00

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a jamsi » 27.10.2015 21:09:59

Pozdravljeni vsi prisotni.

Tisti, ki delate z Delphi-jem 7...

Kako kaže z davčnim potrjevanjem računov ?
Meni je do takrat, ko še ni bilo dvosmerne komunikacije vse delalo.
V bistvu enaka stvar kot pri hrvatih.
Zdaj po novem pa več nič ne dela.
Do sedaj sem uporabljal samo THTTPReqResp objekt...

Trenutno sploh ne vem kaj je sedaj sploh potrebno dodati, da bo stvar spet delovala.
Z pomoč in ideje se toplo priporočam.

MRx
Prispevkov: 6
Pridružen: 16.09.2013 21:22:41

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a MRx » 29.10.2015 22:03:47

po moje kaj takega ..

Koda: Izberi vse

procedure TXmlSendDlg.BtnSendClickNoSender(VanuitRun : Boolean);
Var
  ReturnStr, FoutReturnMsg : String;
  XMLStr: TFileStream;
  Http_Connection_OK : Boolean;
begin {procedure TXmlSendDlg.BtnSendClickNoSender}

    FoutReturnMsg := NulStr;
    Http_Connection_OK := True;
    Memo1.Lines.Clear;
    XMLStr := TFileStream.Create(XmlSendDlg.XmlFileIn,
      fmOpenRead Or fmShareDenyWrite);
    Try
      IdSSLIOHandlerSocketOpenSSL1.OnGetPassword:=IdSSLIOHandlerSocketOpenSSL1GetPassword;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.CertFile     := PemCrtFile;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.KeyFile      := PemKeyFile;
      XmlSendDlg.Bepaal_SSLOptions_Method;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyDepth  := 2;
      IdSSLIOHandlerSocketOpenSSL1.SSLOptions.VerifyMode := [];
      IdSSLIOHandlerSocketOpenSSL1.ReadTimeout := ReadTimeoutConst;

      IdHTTP1.HandleRedirects := True;
      IdHTTP1.HTTPOptions := [hoInProcessAuth, hoKeepOrigProtocol, hoForceEncodeParams];
      IdHTTP1.Request.BasicAuthentication := False;
      IdHTTP1.Request.Host := XbrlSoapHost;
      IdHTTP1.Request.ContentType := 'text/xml';
      IdHTTP1.Request.CharSet := 'utf-8';
      IdHTTP1.Request.ContentLength := MyGetFileSize(MeXmlFile.Text);
      IdHTTP1.IoHandler.Port := 443;
      IdHTTP1.ReadTimeout := ReadTimeoutConst;
      IdHTTP1.Request.CustomHeaders.Clear;
      IdHTTP1.Request.CustomHeaders.Add
        ('SOAPAction: "' + MeSoapAction.Text + '"');

      Try
        ReturnStr := IdHTTP1.Post(MeWebSite.Text, XMLStr);
      Except
        On E: Exception Do
        begin
          FoutReturnMsg := E.Message;
          Memo1.Lines.Add('Fout: ' + E.Message);
          FoutMsg := ' Verzendactie met bestand '+XmlSendDlg.XmlFileIn+' is mislukt (' + FoutReturnMsg + ').';
          MsgWaarschuwing(FoutMsg);
          Http_Connection_OK := False;
          Memo1.Lines.Add('ReturnStr: ' + ReturnStr + Ster);
        end;
      end;

      Memo1.Lines.Add('Response: ' + IdHTTP1.ResponseText);
      if (Http_Connection_OK = True) then
      begin
        IdHTTP1.Disconnect;
      end;

      if (Http_Connection_OK = True) and (IdHTTP1.ResponseText = HTTP200) then
      begin
        BapiOK := True;
        if (XmlSendDlg.ShowAllIn = True) then
        begin
          if (XmlSendDlg.IsSendDocument)
            then MsgInformatie(' Correct verzonden.');
        end;
      end;
    Finally
      XMLStr.Free;
      if (Http_Connection_OK = True) then
      begin
        if (BapiOK = False) then
        begin
          if (IdHTTP1.ResponseText <> NulStr)
            then FoutMsg := IdHTTP1.ResponseText
            else FoutMsg := ReturnStr;
          FoutMsg := ' Bestand niet verzonden (' + FoutMsg + ').';
          MsgWaarschuwing(FoutMsg);
        end;
      end;
    end;

end; {proc TXmlSendDlg.BtnSendClickNoSender}

mal boš predelal pa bo :)

traktor
Prispevkov: 7
Pridružen: 02.11.2015 14:49:20

Re: Vzpostavitev TLS Seje

Odgovor Napisal/-a traktor » 02.11.2015 15:06:43

grinta007 ,
ali bi se dalo dobiti sample source za tvojo rešitev, ker gornje kode nikakor ne morem spreviti v delujoče stanje...

Odgovori