2015-08-28 48 views
2

我最近更新了兩個Windows控制檯應用程序的證書。在過去,我們剛剛更新了證書,但這次不可能,因爲我們的第三方提供商不再允許這樣做。這一次創建了一個新的證書,名稱略有修改。兩個應用程序使用此證書,一個正在運行,另一個在每次運行時都會收到下面的錯誤。訪問證書時出錯:鍵盤不存在

Exception (CryptographicException) 
System.Security.Cryptography.CryptographicException: Keyset does not exist 
Server stack trace: at 
System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) at 
System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) at 
System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() at 
System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() at 
System.IdentityModel.Tokens.X509AsymmetricSecurityKey.get_PrivateKey() at 
System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetSignatureFormatter(String algorithm) at 
System.IdentityModel.SignedXml.ComputeSignature(SecurityKey signingKey) at 
System.ServiceModel.Security.WSSecurityOneDotZeroSendSecurityHeader.CompletePrimarySignatureCore(SendSecurityHeaderElement[] signatureConfirmations, SecurityToken[] signedEndorsingTokens, SecurityToken[] signedTokens, SendSecurityHeaderElement[] basicTokens) at 
System.ServiceModel.Security.SendSecurityHeader.CompleteSignature() at 
System.ServiceModel.Security.SendSecurityHeader.CompleteSecurityApplication() at 
System.ServiceModel.Security.SecurityAppliedMessage.OnWriteMessage(XmlDictionaryWriter writer) at 
System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initialOffset, Int32 maxSizeQuota) at 
System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.WriteMessage(Message message, Int32 maxMessageSize, BufferManager bufferManager, Int32 messageOffset) at 
System.ServiceModel.Channels.HttpOutput.SerializeBufferedMessage(Message message) at System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout) at 
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout) at 
System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at 
System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) at 
System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at 
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at 
System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 
Exception rethrown at [0]: at 
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at 
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 

我已將證書加載到相應的證書存儲區。我已授予用戶完全訪問權限。我已經給了「每個人」訪問證書。我甚至用private來識別物理文件,並讓用戶完全控制它。仍然沒有成功。

下面是從用於設置配置用於訪問證書的配置文件的摘錄:

<clientCertificate 
     findValue="certifcatesubjectishere" 
     storeLocation="LocalMachine" 
     storeName="TrustedPeople" 
     x509FindType="FindBySubjectName" 
     /> 

任何幫助或建議將在此階段將不勝感激。

+0

看看這個答案︰http://stackoverflow.com/a/10955915/2707705 – Biscuits

+0

這對我有效。非常感謝您的幫助。 –

回答

0

我知道回答已經太遲了,但對別人來說可能有用。在IIS中安裝WCF應用程序時遇到同樣的問題,我用winhttpcertcfg解決了這個問題。它是Windows授予/撤銷證書權限的官方程序。 Here你可以使用instractions找到。