Newsgroup: it.comp.lang.delphi
Titolo: caricamento certificato con httprio

Buongiorno a tutti, volevo porre un quesito.
Devo interrogare un webservice che dispone di un certificato. Non è 
possibile invocare il servizio da browser e non è possibile scaricare il 
wsdl con il comando ?WSDL
Il mio problema è caricare correttamente il certificato in questione, di 
seguito alcune righe di codice.
 
Il web service mi restituisce l'errore: EsoapHttpException: Errore nel 
supporto per il canale sicuro.
 
 
 
Ecco il codice:
 
 
procedure TMenu.HTTPRIOHTTPWebNode1BeforePost (const HTTPReqResp: 
THTTPReqResp;  Data: Pointer);
 
Const
 
   INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 
Var
   S: String;
   Store        : IStore;
   Certs        : ICertificates;
   Cert         : ICertificate2;
   CertContext  : ICertContext;
   PCertContext : PCCERT_CONTEXT;
begin
 
   Cert:=CreateComObject(CLASS_Certificate) as ICertificate2;
 
Cert.Load('C:\certificato.cer','',CAPICOM_KEY_STORAGE_DEFAULT,CAPICOM_LOCAL_MACHINE_KEY);
   CertContext := Cert as ICertContext;
   CertContext.Get_CertContext( Integer( PCertContext ) );
   if InternetSetOption( Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, 
PCertContext, Sizeof( CERT_CONTEXT ) ) = False
     then ShowMessage( 'Errore!');
  s:='';
  s:=s+'Authorization Basic 
'+TIdEncoderMIME.EncodeString('U86H32YM,PQDR5R2U', 
IndyTextEncoding_UTF8)+' [\r][\n]';
 
if not HttpAddRequestHeaders(Data, PChar(s), Length(s), 
HTTP_ADDREQ_FLAG_ADD) then
     ShowMessage('HttpAddRequestHeaders ' + 
SysErrorMessage(GetLastError()));
end;
 
 
 
Al click di un bottone ho aggiunto questo codice:
 
 
  _rio := THTTPRIO.Create(nil);
   _rio.OnBeforeExecute := Self.httpRioBeforeExecute;
   _rio.OnAfterExecute := Self.httpRioAfterExecute;
   _rio.HTTPWebNode.OnBeforePost := Self.HTTPRIOHTTPWebNode1BeforePost;
 
 
   _rio.URL:='
https://www.pippopluto.it
';
   ParametridaPassare:=VisualizzaErogatoRichiesta.Create;
  ParametridaPassare.pinCode:='23423423';
   ParametridaPassare.codiceRegioneErogatore:='444';
   ParametridaPassare.codiceAslErogatore:='555';
   ParametridaPassare.codiceSsaErogatore:='888888';
   ParametridaPassare.nre:='xxxxxxx';
ParametridaPassare.cfAssistito:='3333332333';
   ParametridaPassare.tipoOperazione:='1';
   myservice:=_rio as visualizzaErogatoPT;
   _ccSoap:=myservice.visualizzaErogato(ParametridaPassare);
 
 
Qualche idea?
 
Grazie
 
Marco

Ciao, a distanza di un anno nessuno ha risposto: come sei riuscito a risolvere (sempre che tu ci sia riuscito)?
Grazie

ha scritto nel messaggio 
news:f06f3c63-c7a7-4128...@googlegroups.com...
Ciao, a distanza di un anno nessuno ha risposto: come sei riuscito a 
risolvere (sempre che tu ci sia riuscito)?
Grazie
-
Se non è morto, questo newsgroup è praticamente morimondo... 
 
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 


EEEEE bhe! ogni volta che cerco di ravvivarlo con post intelligenti , mi 
etichettano come troll, cosa pretendi?
E pensare che non ho mai fattom il troll in vita mia, ma ho sempre 
espresso le mie idee, anche scomode, ma sempre le mie idee, ....e allora 
c'è chi invece di riflettere si offende e mi etichetta come troll! 
incredibile!
 
-- 
Quando la dittatura è un dato di fatto, la rivoluzione diventa un diritto.
(Victor Hugo)
 
“L’intelligenza sa di essere libera, quali che siano le coercizioni 
esteriori. Sa che la grandezza dell’Uomo è nel pensiero, e sa che c’è 
sempre almeno un altro uomo che lo afferra e lo trasmette.”
(Ida Magli, Omaggio agli Italiani)

Moribondo o no.... a quanto pare restiamo ignoranti in materia ;-)

 Moribondo o no.... a quanto pare restiamo ignoranti in materia ;-)
 
Ciao, 
 
io ci sto sbattendo ma con c++builder e non ne esco fuori.
 
Hai qualche idea?

guardando il codice ... anche io mi sono imbattuto nel componente THTTPRIO per comunicare con il server SOAP del servizio sanitario nazionale .. 
 
1. grazie a una imbeccata di un carissimo amico Antonio .. 
vai nelle opzioni del progetto ( io ho usato per questo progetto DelphiXe2)
in coditional defines aggiungi; DEBUG; USE_INDY
USE_INDY forza il compilatore a usare le librerie indy per comunicare con lo strato TCP/IP e non quelle di sistema.
questo ti permette di debuggare l'applicazione e finalmente capirci qualcosa.
 
2. A questo punto con Indy ex per personalizzare l'autenticazione ... 
 
HTTPRIOHTTPWebNode1BeforePost 
var
  tLogin: string;
begin
  inherited;
  (TObject(Data) as TIdHTTP).Request.BasicAuthentication := TRUE;
end;
 
3. granfinale ..
  FileName := 'C:\x730\SanitelCf.Cer';
  Assert(FileExists(FileName));
  HTTPRIO1.HTTPWebNode.ClientCertificate.CertName := FileName;
  HTTPRIO1.HTTPWebNode.UserName := SoapUserName;
  HTTPRIO1.HTTPWebNode.Password := SoapPassword;
  ....
 
 
4. fai attenzione, ad avere username e password corretti .. nel caso il server ti restituisce un errore generico.
 
spero vi sia utile

Se state cercando di accedere al webservice per la comunicazione dei dati per il 730 esiste un kit con il WSDL

 Se state cercando di accedere al webservice per la comunicazione dei dati per il 730 esiste un kit con il WSDL
 
Beh si, ne eravamo credo tutti al corrente....


Mi scoppia al punto 2: ....Request.BasicAuthentication := TRUE;
Cosa sbaglio???? :-(


Idee io no, o almeno.... credo di aver provato di tutto tra ciò che ho trovato in web, l'unica soluzione sembra essere passare a Visual Studio.... :-(

Fatto! Senza certificati!
 

 Fatto! Senza certificati!
 
E' possibile sapere come hai fatto ???
 
Grazie
 
Daniele


Salve, 
io sono riuscito con C++Builder RAD XE8 a comunicare ma solo se avvio Fiddler nel mezzo