仅使用用户名,密码和证书颁发机构连接到使用PHP的Web服务

时间:2011-07-26 12:39:47

标签: php web-services security soap ssl

我使用Microsoft C#成功连接到Microsoft Web服务。我必须提供用户名,密码(在C#代码中);并将证书(以.cer格式)安装到系统证书的“根证书颁发机构”部分。

如何在PHP中连接到这样的Web服务?我问的原因是我所看到的所有方法(例如wsdl2php,它创建了一个SoapClient子类)似乎都假设了各种各样的东西,例如SSL证书,SSL密钥文件和SSL密钥密码。

所以这一切都让我感到困惑。我不确定应该去哪里。我不确定我的“根证书权限”(.cer文件)应该去哪里,以及用户名和密码应该去哪里。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

使用soapclient

可以stream_context_createssl options完成所有操作
<?php
$context = stream_context_create(array(
  'https' => array(
     'cafile' => '/path to file',
     'verify_peer' => true
  )));

new soapclient("https://localhost/index.php?wsdl",array(
  'login'=>'admin',
  'password'=>'passss',
  'stream_context'=> $context
));

在肥皂中使用http auth而不仅仅是肥皂呼叫并不常见,documnetation是必不可少的

使用soapclient whith类使用classmap将soaptypes映射到php clases是有益的

答案 1 :(得分:0)

通常,如果您使用常规SSL呼叫网络服务,您的网址将如下所示:

https://username:password@myserver.com/mywebservice.php

然后是SSL证书的问题。我正在使用类似于从受SSL保护的SVN Web前端读取的内容。除了以运行您的Web服务器(apache / IIS)并手动接受证书的用户身份登录服务器之外,我不知道任何其他解决方案。在SVN的情况下,您可以结账,它会要求您接受证书。我不完全确定这对于普通的HTTPS请求是如何工作的,但也许您可以通过在浏览器中加载Web服务来获取证书? (或者如果你有幸运行Linux,可以使用wget或者花哨的东西)

此外,您的代码是PHP代码还是C#代码?如果它是C#,你可能需要完全做其他事情。