C# PHP与C之间的安全通信#

C# PHP与C之间的安全通信#,c#,php,security,dynamics-crm,C#,Php,Security,Dynamics Crm,我正在开发一个需要与Microsoft Dynamics CRM集成的PHP应用程序。我研究了PHP和MSCRM服务器之间直接通信的方法,最终决定使用C#bridge进行设计,即PHP应用程序连接到与MSCRM交互的C#服务 现在我的问题是安全性,C#服务和MSCRM服务器之间的通信是安全的,但在PHP应用程序和C#服务之间,我对如何实现某种加密有点困惑 基本上,我在寻找建议,以前有人处理过这样的问题吗?你做了什么?有没有一种简单、安全的方法可以做到这一点,或者这是一个复杂的过程?您可以让PHP

我正在开发一个需要与Microsoft Dynamics CRM集成的PHP应用程序。我研究了PHP和MSCRM服务器之间直接通信的方法,最终决定使用C#bridge进行设计,即PHP应用程序连接到与MSCRM交互的C#服务

现在我的问题是安全性,C#服务和MSCRM服务器之间的通信是安全的,但在PHP应用程序和C#服务之间,我对如何实现某种加密有点困惑


基本上,我在寻找建议,以前有人处理过这样的问题吗?你做了什么?有没有一种简单、安全的方法可以做到这一点,或者这是一个复杂的过程?

您可以让PHP直接安全地与CRM对话。额外的桥梁只是架空的,实际上没有提供多少好处

下面是一篇关于CRM Online的PHP helper类的博文:

只需从该助手开始,然后用您需要的任何特定功能扩展它。该助手甚至包括一个示例函数,演示如何添加您自己的特定功能:

  //Returns the Parent Account Name of the specified Contact
  public function sampleFunction($contactid){

    $getParentCustomer = '
                        <Retrieve xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                          <entityName>contact</entityName>
                          <id>'.$contactid.'</id>
                          <columnSet xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
                            <a:AllColumns>false</a:AllColumns>
                            <a:Columns xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
                              <b:string>parentcustomeridname</b:string>
                            </a:Columns>
                          </columnSet>
                        </Retrieve>';

    $getParentCustomerResult = $this->sendQuery($getParentCustomer, 'Retrieve');

    $responsedom = new DomDocument();
    $responsedom->loadXML($getParentCustomerResult);
    $KeyValuePairs = $responsedom->getElementsbyTagName("KeyValuePairOfstringanyType");

    foreach($KeyValuePairs as $results) {
      if ($results->childNodes->item(0)->nodeValue == "parentcustomeridname") {
        return $results->childNodes->item(1)->childNodes->item(0)->nodeValue;
      }
      else {
        return 'No Result';
      }
    }
  }
//返回指定联系人的父帐户名
公共函数sampleFunction($contactid){
$getParentCustomer=
接触
“.$contactid。”
假的
parentcustomeridname
';
$getParentCustomerResult=$this->sendQuery($getParentCustomer,'Retrieve');
$responsedom=新的DomDocument();
$responsedom->loadXML($getParentCustomerResult);
$KeyValuePairs=$responsedom->getElementsbyTagName(“KeyValuePairOfstringanyType”);
foreach($KeyValuePairs作为$results){
如果($results->childNodes->item(0)->nodeValue==“parentcustomeridname”){
返回$results->childNodes->item(1)->childNodes->item(0)->nodeValue;
}
否则{
返回“无结果”;
}
}
}
然后在主程序中,您将运行以下内容:

require_once('dynamicsclient.php');
$dynamicsClient = new dynamicsClient(0);

//prints the Parent Account name of the specified Contact ID
echo $dynamicsClient->sampleFunction("<CONTACTID>");
require_once('dynamicclient.php');
$dynamicclient=新的dynamicclient(0);
//打印指定联系人ID的父帐户名称
echo$dynamicclient->sampleFunction(“”);

将ssl/tls添加到运行Web服务的主机上,并确保您的php使用用户名/密码/密钥系统对应用程序进行身份验证,您会没事的。感谢您的回复,Dave。我当然希望能够在主机上安装SSL,但问题是我可能无法始终控制服务器,但我仍然需要确保它的安全性;因此,如果您必须在没有SSL的情况下执行此操作,您会怎么做?如果SSL不是一个选项,您将不得不使用消息级加密来保护您的通信免受嗅探攻击。查看WCF消息安全性。如上所述,您还可以添加有效负载加密。请记住,php端的mcrypt和pkcs包装上的c#encryption是不同的。谢谢你们,我会看看你们说了什么。