X509Certificate2 使 IIS 崩溃

27
当我使用 X509Certificate2(string, string) 实例化一个对象时,我的 IIS 进程会崩溃。没有 .Net 异常,也没有其他任何异常,只有我的事件日志中出现了这个问题。
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: 

我感到非常震惊,不知道从哪里开始寻找。当将调试器附加到该进程时,我可以中断在这一行,但是当跨过它时,整个程序就会崩溃。

_certificate = new X509Certificate2(pfxFile, pfxPassword);

pfxFile是一个有效的路径,如果我更改它,我会立即得到正确的.Net PathNotFound异常。

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

更新
这篇文章描述了同样的问题,其中解决方案是确保App Pool身份验证启用了LoadUserProfile


说实话,http://stackoverflow.com/questions/9259581/our-application-crashes-how-to-find-the-cause-of-the-crash 可能是朝着正确方向迈出的一步。 - lc.
1个回答

37

我曾经遇到过相似的问题,也是在 Windows Server 2012 上出现的,当使用某些方法时导致了 IIS 崩溃。

new X509Certificate2(fileName, keyPassword, X509KeyStorageFlags.Exportable)

通过更改构造函数进行了修复

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

3
我遇到了完全相同的问题,你提供的解决方案对我也奏效了。真希望我可以多次点赞这个答案。非常感谢! - Rodrigo Sieiro
2
@RodrigoSieiro 我来帮你顶一下。我在使用 Google Admin SDK 服务账户时也遇到了这个问题。 - Damon Drake
3
这太难以置信了。由于这个问题导致我的应用程序池崩溃,我不得不在代码中硬编码跟踪语句,才能找出错误发生的位置。但这引发了一个问题,为什么会出现这个问题,改进后的构造函数如何解决它?第三个问题是,这让我感到非常恐惧,为什么这会导致应用程序池崩溃?我不喜欢现在使用X509Certificate2时感到如此脆弱! - kstubs
对于VB.NET而言,以下方式同样适用:new X509Certificate2(fileName, keyPassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)。VB使用关键字Or表示按位操作符"OR",即| - tresf
可能是这个原因:https://connect.microsoft.com/VisualStudio/feedback/details/790360/ssl-certificates-wont-load-into-an-iis-worker-process-unless-loaduserprofile-is-enabled - Noah Stahl
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接