SSL을 통해 웹 서비스를 사용해야합니다. 이를 위해 Delphi 6에서 Indy를 사용하여 클라이언트 인증서를 읽고 https를 통해 SOAP 요청을 작성하는 웹 클라이언트를 구축했습니다. 컴파일 된 버전의 코드는 IIS 5.0에서 실행되는 DLL입니다. 내 로컬 컴퓨터에서 코드를 테스트 한 후 제대로 작동합니다 (프록시 뒤에서). 그러나 코드가 프록시가 아닌 서버를 프로비저닝하기 위해 배포 된 후 SSL 연결은 "SSL 연결 오류"를 나타내지 못합니다.Delphi 6와 Indy SSL 연결이 작동하지 않습니다.
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;
나는 또한이 코드는 EXE 프로그램에 컴파일하고 작동 시도 :
여기 내 코드입니다. 구성/추가해야 할 다른 것이 있습니까?
감사합니다.
D6/Indy 8에서 작업 중입니다.이 버전의 Delphi와 Indy를 사용하는 기존 앱이 있기 때문에 indy 9 또는 10으로 업데이트 할 수 없습니다. 앞으로의 새로운 개발을 위해 나는 확실히 Indy 10으로 전환 할 것입니다. 귀하의 회신에 감사드립니다. – tecnotalk