Hello.
My mission is to develop a client to a third party's webservice, which server machine and source codes I can't access or handle. All I have is the API specifications and the addresses.
The program works fine on DevelopEnvironment without authentication, but at ProductionEnvironment it requires basic http authentication plus certificate, and then I can't even receive any answer.
They said me that I could use a self-signed certificate, so I've created one in my Server ( CentOS Apache2+PHP5.3.3 ).
The company sent me a functional DotNetServiceClient piece of code, which includes the app.config which follows bellow.
I need some example of how to send this authentication and more the certificate in PHP SoapClient or CURL.
Here is the C# application's app.config, with fake IP and certificate:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<settings>
<servicePointManager expect100Continue="false" />
</settings>
</system.net>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ISyasAutoServices">
<security>
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://200.200.200.200/Auto/WebServiceAuto/SyasAutoServices.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISyasAutoServices"
contract="ServiceReference1.ISyasAutoServices" name="WSHttpBinding_ISyasAutoServices">
<identity>
<certificate encodedValue="AwAAAAEAAAAUAAAAmqc2gWanBIqn7sbzoxWEw==" />
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior>
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
And here is my current client code:
/* PHP WebService Client */
$connectionParameters = array(
'login' => 'login'
,'password' => 'password'
,'trace' => TRUE
,'encoding' => 'UTF-8'
,'exceptions' => TRUE
,'cache_wsdl' => WSDL_CACHE_NONE
,'soap_version' => SOAP_1_2
,'local_cert' => file_get_contents('/my/certificate/directory/selfsignedcertificate/thatwebservice.pem')
,'passphrase' => 'd3e343der434wds'
);
$theClient = new SoapClient($serverWSDLURL, $connectionParameters);
$r = $theClient->GetBasicWorkData();
The answer: No answer! Only timeOut.
Any example or tip?
Thank you very much.