Я создал пару закрытых и открытых ключей с помощью OpenSSL, а затем сгенерировал файл .p12 для импорта его в мое хранилище сертификатов Windows.Пара ключей и файлы .p12 были созданы в Windows XP, и я пытаюсь использовать их в Windows 7. Я пытаюсь получить доступ к ключу из веб-службы (.svc) в IIS.Если я пытаюсь прочитать закрытый ключ из автономного приложения, я могу сделать это без проблем, но когда я пытаюсь прочитать его из своего веб-приложения, я всегда получаю следующее исключение:
'cert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'
Ивот и вся трассировка стека:
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
И это моя часть кода, которая читает ключ:
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;
}
}
Я полагаю, это связано с какой-то проблемой с разрешениями,но я не могу выяснить, что это такое ... Пожалуйста, если у кого-то есть какие-либо предложения, это будет оценено.
ВЕЩИ, КОТОРЫЕ РАССМОТРЕТЬ:
- Закрытый ключ экспортируется.
- Пользователь IIS_IUSRS имеет разрешения на сертификат.