Столкнувшись же исключение: System.Security.Cryptography.CryptographicException, объект содержит только открытый половину пары ключей, я доказал альтернативу, но менее оптимальное решение.
Ситуация: поиск сертификата/ключа отлично работает внутри Visual Studio IIS Express, но пока веб-приложение работает под надлежащей службой IIS, я всегда получал исключение «Содержит только открытую половину пары ключей».
Я использовал WSE3 CertificateTool, чтобы найти раздел секретного ключа в файловой системе и попытался подробно настроить параметры прав пользователя, чтобы предоставить разрешения пользователя ASP в соответствии с приведенным выше ответом.
Мое конечное исправление, которое было не совсем красивым, состояло в том, чтобы создать новый пул приложений IIS, специфичный для моего кода веб-службы, и установить идентификатор пользователя в качестве владельца локальной машины сертификата + закрытый ключ.
Конечным местом, в котором я установил сертификат, был «Локальный компьютер/Надежные люди».
Использование WSE3 CustomPolicyAssertion, C# .NET:
clientToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine,
StoreName.TrustedPeople, "soap.partnersite.com", X509FindType.FindBySubjectName);
После обновления App Pool Идентичность, не закрытый ключ переопределяет файлов не были необходимы при смене владельца пула приложений.
Спасибо. Это помогло. (У меня был закрытый ключ, но у моего приложения не было доступа к нему). – KKP
проверить этот ответ о том, как узнать, какой ключ машины соответствует сертификату: http://serverfault.com/a/642279/401044 – jtate