Je dois consommer un service Web via SSL. Pour ce faire, j'ai construit un client Web dans Delphi 6 qui utilise Indy pour lire les certificats clients et écrire la demande de savon via https. La version compilée du code est une DLL qui s'exécute dans IIS 5.0. Après avoir testé le code dans ma machine locale, cela fonctionne bien (je suis derrière un proxy). Mais après que le code est déployé pour prod serveurs (pas proxy) la connexion SSL échoue en disant "Erreur de connexion avec SSL".La connexion Delphi 6 et Indy SSL ne fonctionne pas
Voici mon code:
var
Response: TStringStream;
IdHttp: TIdHTTP;
IdCnxSLL: TIdConnectionInterceptOpenSSL;
XmlSoapDoc: IXMLDocument;
begin
Response := TStringStream.Create('');
IdHttp := TIdHTTP.Create(nil);
IdCnxSLL := TIdConnectionInterceptOpenSSL.Create(nil);
XmlSoapDoc := TXMLDocument.Create(nil);
with IdCnxSLL do
begin
IdCnxSLL.SSLOptions.Method := sslvSSLv23;
IdCnxSLL.SSLOptions.RootCertFile := IniHttpConnectionData.Values['RootCertFile'];
IdCnxSLL.SSLOptions.CertFile := IniHttpConnectionData.Values['CertFile'];
IdCnxSLL.SSLOptions.KeyFile := IniHttpConnectionData.Values['KeyFile'];
IdCnxSLL.OnGetPassword := IdConInterceptOpenSSLGetPassword;
end;
with IdHttp do
begin
if bUseProxy then
begin
Request.ProxyServer := IniHttpConnectionData.Values['ProxyServer'];
Request.ProxyPort := StrToIntDef(IniHttpConnectionData.Values['ProxyPort'], 0);
end
else
begin
Host := IniHttpConnectionData.Values['HTTPHost'];
Port := StrToIntDef(IniHttpConnectionData.Values['HTTPPort'], 443);
end;
Request.ContentType := 'text/xml';
Intercept := IdCnxSLL;
InterceptEnabled := True;
end;
try
IdHttp.Post(ServiceURL, SoapEnv, Response);
except
on E:EIdOSSLConnectError do
LogError('SSL Connect Error: ' + E.Message);
on E:Exception do
LogError('Error' + E.ClassName + ' - ' + E.Message);
end;
J'essaie aussi de ce code compilation dans un programme exe et il fonctionne. Y at-il quelque chose d'autre que j'ai besoin de configurer/ajouter?
Merci.
Vous avez raison, je travaille sur D6/Indy 8. Je ne peux pas mettre à jour pour indy 9 ou 10, car il existe des applications existantes qui utilise cette version de Delphi et Indy. Pour les futurs développements je vais certainement passer à Indy 10. Merci pour votre réponse. – tecnotalk