eDavki in SOAP

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 22.07.2005 10:53:50

No evo, problemi. Dve uri sem porabil, da sem spedenal tole proceduro tako, da mi sploh dela. Javi pa isto kot prej "A certificate is required to complete client auth..." Se komu sanja kje bi lahko bil problem.

Koda: Izberi vse

 
procedure TForm1.Button1Click(Sender: TObject);
const
  DAVCNA_STEVILKA = 33897441;
  TAX_PAYER_TYPE = 'FO';
var
  Edp: EdpSoapServiceSoap;
  LoginHandle: string;
begin
  Edp := GetEdpSoapServiceSoap(false, '', HTTPRIO1);

  LoginHandle := (HTTPRIO1 as EdpSoapServiceSoap).LoginUsingClientCertificate(DAVCNA_STEVILKA, TAX_PAYER_TYPE);

  Edp.Logout(LoginHandle);
end;

procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  Store        : IStore3;
  Certs        : ICertificates2;
  Certs2       : ICertificates2;
  Cert         : ICertificate2;
  CertContext  : ICertContext;
  PCertContext : Pointer;
begin
  Store := CoStore.Create;
  Store.Open(CAPICOM_CURRENT_USER_STORE, 'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

  Certs := Store.Certificates as ICertificates2;
  Certs2 := Certs.Select('Haha', 'bla', false);

  if Certs2.Count = 1 then
  begin
    Cert := IInterface(Certs2.Item[1]) as ICertificate2;
    Cert.Display;
    //ShowMessage(Cert.Thumbprint);

    CertContext := Cert as ICertContext;
    CertContext.Get_CertContext(Integer(PCertContext));

    if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
                             PCertContext, Sizeof(CERT_CONTEXT)) then
    begin
      ShowMessage( 'Something went wrong' );
    end;
  end;
end;
 

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 22.07.2005 12:09:57

V funkciji GetEdpSoapServiceSoap spremeni vrsto povezave za defURL iz http v https, npr.:

Koda: Izberi vse

defURL  = 'https://beta.edavki.durs.si/SoapPortal/EdpSoapService.asmx';
Če boš ob povezavi naletel na ESOAPHttpException 'The certificate authority is invalid or incorrect', preveri če si naložil njihov (eDavki) beta certifikat pod trusted certifikate, oz. poglej kako lahko prezreš neveljavne (npr. self-signed) certifikate na http://qc.borland.com/wc/qcmain.aspx?d=10823.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 22.07.2005 12:56:50

Ni pod trusted, če je to res problem. Ali ga lahko kako prestavim pod trusted?
Sicer pa je res, dobim ESOAPHttpException. Ampak ne s tem messageom, tisti ki sem ga že napisal.
Kaj pa tale workarround? Ali prav zastopim, popraviti direktno kodo v SoapHTTPTrans unitu?
Zadnjič spremenil odisej, dne 22.07.2005 12:59:29, skupaj popravljeno 1 krat.

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 22.07.2005 13:18:23

Ok, še enkrat lepo po korakih:

1. Napako 'A certificate is required to complete client authentication' odpraviš tako, da spremeniš URL do WebServica iz HTTP v HTTPS (saj za navadno HTTP povezavo InternetSetOption ne pošlje certifikata, tudi če ga explicitno dodaš). Poglej moj predzadnji post za primer kako naj bi izgledala spremenljivka defURL.

2. Če se bo certifikat pravilno poslal, boš dobil napako 'The certificate authority is invalid or incorrect', če certifikata beta.edavki.durs.gov nimaš nameščenega v Trusted Root Certificate Authorities mapi (oz. kateri drugi trusted mapi). Omenjeni certifikat prestavi v eno izmed trusted map:

- Start -> Run -> mmc.exe
- File -> Add/Remove Snap In...
- gumb Add
- izberi 'Certificates' iz seznama 'Available Standalone Snap-ins'
- Za vrsto snap-ina izberi 'My user account'
- Poišči certifikat 'beta.edavki.gov.si' in ga prestavi v 'Trusted Root Certification Authorities -> Certificates' mapo
- Odpri certifikat in na jezičku Certification Path preveri, da je pot izpisana kot 'sigov-ca -> beta.edavki.durs.si'
- Če 'sigov-ca' certifikata ni pod Certification Path, pojdi na tole stran in namesti sigov-ca root certifikat.
Ali prav zastopim, popraviti direktno kodo v SoapHTTPTrans unitu
Ne, zaenkrat na tvojem mestu ne bi popravljal ničesar.
Zadnjič spremenil _MeSSiah_, dne 22.07.2005 13:18:48, skupaj popravljeno 1 krat.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 22.07.2005 14:48:11

Uf, kolk enga kompliciranja. Pa certifikat od sigen-ca, pa od sigov-ca...groza.
Kokrkol no, hvala zaenkrat za vsa priporočila, korak po koraku grem naprej. Zadnja napaka ki jo dobim je 'Nimate pravic za izvedbo željene operacije'. Zakaj bi blo to zdej se mi ne sanja.

frenk
Prispevkov: 127
Pridružen: 24.10.2002 23:22:26

eDavki in SOAP

Odgovor Napisal/-a frenk » 24.07.2005 12:44:39

Poskusi s PocketSOAP (www.poceketsoap.com)
LP
Frenk

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 26.07.2005 09:47:09

Spet se moram torej obrniti sem. Zadnje kar mi javi je torej 'Nimate pravic za izvedbo željene operacije'. Ne vem kaj sedaj, kaj naj iščem.

Uporabniški avatar
_MeSSiah_
Prispevkov: 1040
Pridružen: 17.05.2001 01:09:32

eDavki in SOAP

Odgovor Napisal/-a _MeSSiah_ » 26.07.2005 13:56:38

Hmm, na kateri vrstici pa dobiš to napako?

No, sam sem se medtem nekaj igral z eDavki in se lahko z uporabo opisane kode in postopka brez težav prijavim (LoginUsingClientCertificate) in odjavim. Kaj več pa še nisem preizkušal.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 27.07.2005 07:50:26

Ja na tej vrstici: LoginUsingClientCertificate
Preko browserja vstopim brez problemov. Čudno.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

eDavki in SOAP

Odgovor Napisal/-a odisej » 27.07.2005 08:30:37

Čakat mal. Pi***. Zdej sm kot parameter čist za hec probal PO in očitno gre skoz. Pri telih stvareh sm pa res zelen.

Odgovori