使用Navision用户(启用SSL)验证通过PHP访问Web服务

时间:2016-05-06 07:58:45

标签: php web-services ssl curl navision

我需要访问使用Navision User + SSL的Navision Web服务。我使用的连接器基于PHP。

我能够连接到简单的http访问并使用Window的用户。这是帮助我实现Freddy编写的Navision Web Service PHP的教程。

我仍然在使用它,但在curl / request中添加证书。研究和阅读了很多文章,但我仍然无法实现。

我现在可以使用上面共享的基本php连接器(链接)访问它,但在检索数据时,我收到以下详细信息:

  

...成功设置证书验证位置:
  * CAfile:/Path/Navision.pem
  *使用TLSv1.0 / AES256-SHA进行SSL连接   *服务器证书:
  ......   * SSL证书验证结果:无法获得本地颁发者证书(20),无论如何都要继续。
  *使用NTLM与用户'用户'的服务器认证   POST Navision页面URL名称HTTP / 1.1
  授权:NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA =
  ......   方法:POST
  连接:保持活力
  User-Agent:PHP-SOAP-CURL
  Content-Type:text / xml; charset = utf-8
  SOAPAction:“urn:microsoft-dynamics-schemas / page / pda_item_list:ReadMultiple”
  ......   < HTTP / 1.1 401未经授权......

我使用makecert.exe来使用证书。我有这些文件2 .cer,一个pvk和一个.crl ..我们使用.cer文件中的一个将指纹应用到navision服务实例上。哪个文件是php curl连接器使用的正确文件。

这是我的请求php代码:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, USERPWD);
curl_setopt($ch, CURLOPT_VERBOSE, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/Navision.pem');

如果我能够通过使用Navision用户和SSL访问它使用PHP连接器来使用Navision的Web服务,那么任何相关的链接都将非常受欢迎。

更新

我现在可以使用有效证书并且能够正确传递。 仍然它现在不起作用并返回上面相同的错误..未经授权的401。

很可能是因为我的Navision设置或者我只是以错误的方式传递凭据?我目前仍在研究和播放,但我仍然无法提取数据。

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  • 具有使用用户名身份验证的第二个服务层。这将使PHP能够使用Basic Auth。在这种情况下,您需要一个证书

  • 第二个选项是使用相同的服务层,但生成一个Web服务密钥以供PHP使用。您可以使用相同的用户名使用基本身份验证,但使用Web服务密钥作为密码

PHP不是NTLM身份验证的粉丝......

干杯