Exceção ao tentar ler uma PrivateKey no Windows certstore

Criei um par de chaves públicas e privadas usando o OpenSSL e, em seguida, gerei um arquivo .p12 para importá-lo para o meu certstore do Windows. O par de chaves e os arquivos .p12 foram criados no Windows XP e estou tentando usá-lo no Windows 7. Estou tentando acessar a chave em um Serviço da Web (.svc) no IIS. Se eu tentar ler a chave privada de um aplicativo independente, posso fazê-lo sem problemas, mas quando tento lê-la no meu aplicativo Web, sempre recebo a seguinte exceção:

'cert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'

E este é todo o stacktrace:

en System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
en System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
en System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
en System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
en System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey()
en ValidKeyDll.ValidKey.getLlaveDeAlmacen(String almacen, Boolean esLlavePrivada) en C:\Users\desarrollo\Documents\ValidKeyDll\ValidKeyDll\ValidKey.cs:línea 58
en ValidKeyDll.ValidKey.firmaCadena(String almacen, String cadenaFirmar) en C:\Users\desarrollo\Documents\ValidKeyDll\ValidKeyDll\ValidKey.cs:línea 117

E esta é a minha parte do código que lê a chave:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
RSACryptoServiceProvider csp = null;
foreach (X509Certificate2 cert in store.Certificates)
{
   if (cert.Subject.Contains(almacen))
   {
      if (cert.NotAfter.CompareTo(System.DateTime.Now) <= 0)
         throw new CertificadoVencidoException();

      if (isPrivateKey)
         csp = (RSACryptoServiceProvider)cert.PrivateKey;
      else
         csp = (RSACryptoServiceProvider)cert.PublicKey.Key;

      break;
   }
}

Suponho que tenha a ver com algum tipo de problema de permissão, mas não consigo descobrir o que é ... Por favor, se alguém tiver alguma sugestão, será muito apreciad

COISAS A CONSIDERAR

chave privada é exportáve O usuário IIS_IUSRS tem permissões no certificad

questionAnswers(2)

yourAnswerToTheQuestion