2013-02-21 83 views
22

当新建一个X509Certificate2(string, string)的实例时,我的IIS进程只是崩溃。没有的.NET异常,什么都没有,除了这在我的事件日志X509Certificate2使IIS崩溃

Faulting application name: w3wp.exe, version: 8.0.9200.16384, time stamp: 0x50108835 
Faulting module name: ntdll.dll, version: 6.2.9200.16420, time stamp: 0x505ab405 
Exception code: 0xc0000374 
Fault offset: 0x00000000000ea485 
Faulting process id: 0x102c 
Faulting application start time: 0x01ce10301e250c4d 
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe 
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll 
Report Id: 5e55321c-7c23-11e2-93f9-00155d8a0f17 
Faulting package full name: 

Im相当愕然,不知道从哪里开始寻找。当将调试器附加到进程中时,我能够突破这一线,但是当它跨过它时,整个事情就会崩溃。

_certificate = new X509Certificate2(pfxFile, pfxPassword); 

pfxFile是一个有效的路径,如果我改变它,我立即得到一个正确的.Net PathNotFound例外。

服务器是Windows 2012,运行IIS8和.Net 4.5。

更新
This article描述了一个解决方案,以确保应用程序池身份LoadUserProfile启用了同样的问题。

+0

FWIW时,也有类似的问题,也是Windows Server 2012中,坠毁IIS上,HTTP://计算器.com/questions/9259581 /我们的应用程序崩溃 - 如何找到导致崩溃的原因可能是迈向正确方向的一步。 – 2013-02-21 13:37:50

回答

32

我使用

new X509Certificate2(fileName, keyPassword, X509KeyStorageFlags.Exportable) 

这是固定的,通过改变构造函数

new X509Certificate2(fileName, keyPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable) 
+1

我有完全相同的问题,您的解决方案也适用于我。我希望我能多次提出这个答案。非常感谢! – 2013-07-04 17:30:36

+2

@RodrigoSieiro我会继续努力,帮助你克服这一点。我在使用Google Admin SDK服务帐户时自己遇到了这个问题。 – 2014-06-16 16:03:05

+0

@maxp这个答案是我喜欢堆栈溢出的原因。 – CameraSchoolDropout 2014-06-25 04:11:16