Exception al intentar leer una PrivateKey del Windows certstore

Creé un par de claves pública y privada usando OpenSSL y luego generé un archivo .p12 para importarlo a mi almacén de certificados de Windows. El par de claves y los archivos .p12 se crearon en Windows XP y estoy tratando de usarlos en Windows 7. Estoy intentando acceder a la clave desde un Servicio web (.svc) en IIS. Si intento leer la clave privada de una aplicación independiente, puedo hacerlo sin ningún problema, pero cuando intento leerla desde mi aplicación web, siempre obtengo la siguiente excepción:

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

Y esta es toda la traza de pila:

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

Y esta es mi parte del código que lee la clave:

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;
   }
}

Supongo que tiene que ver con algún tipo de problema de permisos, pero no puedo averiguar qué es ... Por favor, si alguien tiene alguna sugerencia, será muy apreciado.

COSAS PARA CONSIDERAR

La clave privada es exportable. El usuario IIS_IUSRS tiene permisos en el certificado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta