从IIS进程(WCF和WF)通过HTTPS发布的问题

时间:2010-09-21 06:50:38

标签: c# security iis-6 https

我有一些包含PayflowPro .NET API的代码。它基本上从C#发布到HTTPS地址(支付网关)。我可以在本地运行此代码,它运行良好。我可以在我的MSUnit测试中运行它并且它可以工作,我可以在我的测试环境中从控制台应用程序运行它,它也可以工作。

我有一个在IIS 6.1中托管的工作流,它实例化一个类,该类又调用此代码。启动此工作流程时,代码每次都会失败;我从API对象中收到了System.Exception: Failed to connect to host Input Server Uri = https://pilot-payflowpro.paypal.com/之类的错误。

此异常来自API,但我完全不知道如何从控制台应用程序成功发布,而不是从IIS进程发布。

  • 班级完全相同,一字不差。
  • 我以管理员身份登录,因此控制台应用程序以管理员身份运行。因此,我尝试将管理员帐户用于网站的应用程序池(显然仅用于此测试)
  • 控制台应用可以发布,因此防火墙/代理不会干扰...对吗?

我是否需要在IIS中调整以允许应用程序在外部进行通信?我有没有明显的安全设置?有关测试用例的任何建议,以找出可能发生的情况吗?

edit:原来这个问题与服务器运行的VM环境有某种关系。我的开发盒,测试服务器或生产服务器上不会发生此问题 - 它只发生在集成服务器上。原因尚不清楚,但我不再努力了。

2 个答案:

答案 0 :(得分:1)

这可能是由ASP.NET信任配置问题引起的。要检查信任级别,请在编辑器中打开以下文件:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config(如果是ASP.NET 2.0)

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\CONFIG\web.config(如果是ASP.NET 4.0)

如果您在64位Windows上运行,则可能还需要编辑这些版本的C:\WINDOWS\Microsoft.NET\Framework64

向下滚动到<securityPolicy>配置部分,如下所示:

<location allowOverride="false">
    <system.web>
        <securityPolicy>
            <trustLevel name="Full" policyFile="internal"/>
            <trustLevel name="High" policyFile="web_hightrust.config"/>
            <trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
            <trustLevel name="Low" policyFile="web_lowtrust.config"/>
            <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
        </securityPolicy>
        <trust level="Medium" originUrl=""/>
    </system.web>
</location>

如果您看到<trust level="Full" originUrl=""/>以外的任何内容,则表示服务器正在部分信任下运行。

打开相关.config属性指定的policyFile文件,例如web_mediumtrust.config level="Medium"。{/ p>

服务器极不可能在低于低信任度的情况下运行。

找到<NamedPermissionSets>部分,其下方有一个<PermissionSet>,如下所示:

<PermissionSet
    class="NamedPermissionSet"
    version="1"
    Name="ASP.Net">

这包含许多<IPermission>个节点。寻找一个叫WebPermission的人,它看起来像这样:

<IPermission
    class="WebPermission"
    version="1">

如果它缺失或看起来像:

<IPermission
    class="WebPermission"
    version="1">
    <ConnectAccess>
        <URI uri="$OriginHost$"/>
    </ConnectAccess>
 </IPermission>

您需要添加或修改,如下所示:

<IPermission 
    class="WebPermission" 
    version="1" 
    Unrestricted="true"/>

此设置控制应用程序与URI之间的出站和入站访问。

可能还需要确保SocketPermission配置的配置类似:

<IPermission 
    class="SocketPermission" 
    version="1" 
    Unrestricted="true"/>

答案 1 :(得分:0)

事实证明,此问题与运行服务器的VM环境有某种关系。我的开发盒,测试服务器或生产服务器上不会发生此问题 - 它只发生在集成服务器上。原因尚不清楚,但我不再努力了。