我正在使用DidiSoft OpenPGP for .NET库将C#编译成一个由Classic ASP执行的exe。目标是更新此旧网站的安全性以使用PGP。这是一个旧网站,所以我们不能在没有大量费用的情况下重写它。
我尝试使用这个库的原因是,当我们调用编译的C#EXE引用时:
using System.Security.Cryptography;
我会在ASP中得到一个空白输出,并且IIS会在事件日志中抛出类似这样的错误:
Faulting application name: PGPTest.exe, version: 1.0.0.51, time stamp: 0x52f28ee5
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18229, time stamp: 0x51fb1116
Exception code: 0xe0434352
Fault offset: 0x0000c41f
Faulting process id: 0x5f08
Faulting application start time: 0x01cf22a83ae734f4
Faulting application path: d:\inetpub\_bin\[redacted website name]\PGPTest.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll
Report Id: 789751fa-8e9b-11e3-87e1-0050568e508f
Application: PGPTest.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileLoadException
Stack:
at PGPTest.Program.Main(System.String[])
================
.NET Runtime version 4.0.30319.1008 - There was a failure initializing profiling API attach infrastructure. This process will not allow a profiler to attach. HRESULT: 0x80004005
Process ID (decimal): 24328. Message ID: [0x2509].
因此,当我使用DidiSoft OpenPGP或System.Security.Cryptography时,我会收到错误。
在Classic ASP中,应用程序调用:
WshShell.Exec(%pathtoexe%)
如果我们将应用程序池更改为在LocalSystem而不是NetworkService下运行,我们会收到输出IF 。所以它似乎与权限有关。
我们的服务器正在运行:
我们假设在LocalSystem下运行应用程序池是不安全的;它是否正确? 关于如何让这个工作的任何想法?
谢谢
更新:图书馆的作者向我确认它确实使用了System.Security.Cryptography作为其部分算法。
更新2:要进行ulluoink:如果您完全阅读本文,您会发现这事实上与Classic ASP有关。我怎么知道你问的?因为将代码从经典ASP执行的C#应用程序移动到ASP.NET 4 Web API应用程序时,完全相同的服务器上的相同代码工作正常。它似乎是一个权限问题,与Classic ASP的执行权限直接相关。
因此,当前的解决方法是将引用System.Security.Cryptography的代码部署到ASP.NET Web API应用程序中的同一服务器。我们正在使用Classic ASP发布到ASP.NET应用程序;具体发送序列化的数据:http://www.aspjson.com/
答案 0 :(得分:0)
是的,因为LocalSystem不安全,所以运行暴露在互联网上的网站。您可以在加载页面时使用filemon或processmon来查看哪些文件需要来自哪些用户的权限。
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx