Certificate issues running app in Windows 7

2019-02-11 04:46发布

问题:

I'm having some problems with my app. I'm using the 'org.mentalis.security' assembly to create a certificate object from a 'pfx' file, this is the line of code where the exception occurs:

Certificate cert = Certificate.CreateFromPfxFile(publicKey, certificatePassword);

This has always worked and still does in production, but for some reason it throws an exception when run in Windows 7 (tried it on 2 machines).

CertificateException : Unable to import the PFX file! [error code = -2146893792]

I can't find much on this message via Google, but when checking Event Viewer I get an 'Audit Failure' every time this exception occurs:

Event ID = 5061
Source = Microsoft Windows Security
Task Category = system Integrity
Keywords = Audit Failure

Cryptographic operation.

Subject:
 Security ID:  NT AUTHORITY\IUSR
 Account Name:  IUSR
 Account Domain:  NT AUTHORITY
 Logon ID:  0x3e3

Cryptographic Parameters:
 Provider Name: Microsoft Software Key Storage Provider
 **Algorithm Name: Not Available.**
 Key Name: VriendelijkeNaam
 Key Type: User key.
<BR>
Cryptographic Operation:
 Operation: Open Key.
 Return Code: 0x2

I'm not sure why this isn't working on Win 7, I've never had problems when I was running on Vista with this. I am running VS2008 as administrator but I guess that maybe the ASP.NET user doesn't have sufficient rights or something.

It's pretty strange that the 'Algorithm name' is 'Not Available'.

Can anyone help me with this?

回答1:

Sorry Corrected

Hi

I solved this by going to c:\windows\system32\inetsrv or syswow64\inetsrv

and running the following command

appcmd set apppool "[you app pool name]" -processModel.loadUserProfile:true

This solved it

Richard Allen



回答2:

In IIS 7 you can do this in IIS management console.

  • Expand the server on the left
  • Click on Application Pools
  • Click on your website's application pool name and click Advanced Settings in the Actions pane on the right
  • Under the Process Model section, change Load User Profile to True
  • Click OK
  • Recycle the App Pool from the Actions pane on the right
  • Restart the website (expand Sites on the left, click on your website, click Restart in the actions pane.)


回答3:

I solved this by going to c:\windows\system32\inetsrv or syswow64\inetsrv

and running the following command

appcmd set apppool "" -processModel.loadUserProfile:true

This solved it

Richard Allen