使用PHP连接到web服务,只给出用户名、密码和证书授权


Connecting to a web service with PHP given only username, password and certificate authority

我使用Microsoft c#成功连接到Microsoft web服务。我必须提供一个用户名,密码(在c#代码);并在系统证书的"根证书颁发机构"部分安装一个证书(.cer格式)。

如何在PHP中连接到这样的web服务?我问这个问题的原因是,我所见过的所有方法(比如wsdl2php,它创建了一个SoapClient子类)似乎都假定了各种各样的东西,比如SSL证书、SSL密钥文件和SSL密钥口令。

所以这让我很困惑。我不确定应该把什么放在哪里。我不确定我的"根证书颁发机构"(.cer文件)应该放在哪里,以及用户名和密码应该放在哪里。什么好主意吗?

所有这些都可以使用soapclient和stream_context_create使用SSL选项完成

<?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
));

在soap中不使用HTTP认证而只是soap调用是很常见的,文档是必不可少的

使用带有类的soapclient是有益的使用classmap将soaptype映射到PHP类

通常如果你使用常规SSL调用web服务,你的URL将看起来像:

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

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

还有,你的代码是PHP代码还是c#代码?如果是c#,你可能需要做一些完全不同的事情。