【问题标题】:Classic asp "An error occurred when verifying security for the message." iis7 transport level security经典 asp“验证消息的安全性时出错。” iis7 传输级安全性
【发布时间】:2011-10-20 18:58:16
【问题描述】:

在 II7 上,我们托管了一个基于 WCF/asp.net 的 API。为了允许经典 ASP 应用程序的用户连接到 API,我们必须发布一个我们称为“传输”的版本。这个Transport 版本也是用asp.net 编写的,它指向同一个程序集,只是安全层不同以允许经典asp 进行身份验证。使用传输级安全性,而不是基于消息的安全性。

当使用浏览器加载服务引用时,我可以加载 svcutil.exe ... WDSL 页面。

当使用我的测试 asp 页面从该引用中调用 web 方法时,我得到以下返回:

已完成调用 Web 服务。 状态 = 内部服务器错误 ResponseText = a:InvalidSecurity 验证消息的安全性时发生错误。

这表明身份验证失败。当使用 asp.net 或应用程序 WCF 风暴进行测试以联系​​普通 API 时,一切正常。

API 最近被迁移,看起来有些东西没有正确设置,但我不知道是什么。

我可以浏览到 svcutil.exe ... WDSL 服务参考,当通过浏览器选择它时,我得到了预期的 XML 响应。

使用基于消息的安全性的 API 的非经典 asp publicaiton 时使用的用户名和密码有效。

是否可以发布一些可能有助于诊断问题的故障排除提示,请特别针对传输级安全故障查找和设置?

谢谢 斯科特

编辑添加以下更新:

尝试使用默认应用程序池和新的应用程序池,但同样的问题仍然存在。

我的测试页错误:ResponseText = a:InvalidSecurityAn 验证消息安全性时发生错误。

IIS LOG 显示: v3/transport/testclassicasptransportwcfservice.asp ( 200 0 0 ) (即 iis 200) /V3/Transport/DeviceService.svc/DeviceService (500 0 0)(即 iis 错误 500)

注意:在 TRANSPORT 和 V3 上定义的虚拟目录。 V3 使用 .net 可以正常工作,而不是使用经典的 asp 进行身份验证。

事件日志: 由于以下错误,应用程序池“传输”的模板持久缓存初始化失败:无法为应用程序池创建磁盘缓存子目录。数据可能有额外的错误代码。

此参考似乎建议修复,但“appcmd”中的许多 DIR 路径和参考不存在。

_http://theether.net/kb/100127

【问题讨论】:

    标签: asp.net api iis-7 asp-classic transport-security


    【解决方案1】:

    参考http://theether.net/kb/100127

    1. 加载 cmd 提示符
    2. CD 到 C:\Windows\System32\inetsrv
    3. 输入:appcmd list config -section:system.webServer/asp
    4. 显示如下路径:c:\inetpub\conf\temp\ASP 编译模板
    5. 检查路径是否存在(确实存在)
    6. 检查NETWORK SERVICE是否有权限访问“ASP编译模板”如果不是从appcmd执行;

      icacls "c:\inetpub\conf\temp\ASP Compiled Templates" /grant "NETWORK SERVICE:(OI)(CI)(M)"
      

      应该是“成功处理了1个文件”

      重新启动应用程序池。

    “验证消息安全性时发生 InvalidSecurityAn 错误”问题仍然存在,但事件日志中的“无法创建磁盘缓存子目录 ....”错误不再发生。

    抱歉,再次更新。网络服务权限变更没有解决问题,改成DEFAULT APP POOL解决了问题。

    终于领先了。检查:

    1. ServiceSecurityAudit 设置在服务行为中。参考http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/#
    2. IIS 日志(仅显示非特定错误 500。)
    3. 已启用故障跟踪(也显示错误 500)。
    4. 自定义错误已关闭
    5. 友好的 IE 消息已关闭
    6. Asp 客户端和服务器端调试开启
    7. ProcessMon 正在运行,没有错误。
    8. Web.config httpErrors errorMode="Detailed" /> +

    ServiceSecurityAudit 发现“对象引用未设置为对象的实例”,所以听起来我们的应用程序有错误。


    跟进(11 年 8 月 17 日):

    此处记录的服务安全审计:

    http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/

    是我们解决这个问题的关键。发现对象引用错误表明业务对象和数据访问 dll 不对齐。使用 CLASSIC ASP 通过 TRANSPORT AUTHENTICATION 联系 WCF.NET API,直到在 WCF 部署中的 behavior.config 文件上启用服务安全审核之前,绝对没有任何迹象表明此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2020-05-19
      • 2014-05-22
      • 2014-05-14
      • 2011-06-17
      • 2019-04-30
      • 1970-01-01
      相关资源
      最近更新 更多