0

私はWCFサービスに取り組んでいます。IIS でホストされ、SSL で保護されています。Soap11 でカスタム ビディングを使用しています。このサービスの秘密鍵があり、web.config ファイルで参照されています。秘密鍵から公開鍵をエクスポートしました。この公開鍵を、このサービスを呼び出すベンダーに渡す予定です。

クライアントを使用してサービスをテストしようとすると。以下のエラーが表示されます。私のクライアントでは、公開鍵を参照しました。私のクライアントは、秘密鍵で保護されたサービスにリクエストを送信しています。秘密鍵をチェックして、「この証明書に対応する秘密鍵を持っていることを確認しました。また、IIS アプリケーション プールを自分のユーザー名で実行しています。私はコンピューターの管理者です。

しかし、リクエストを送信しようとすると、「X.509 証明書に秘密鍵が存在しません」というエラーが表示されます。クライアントで。このエラーの原因は何ですか?

スタックトレース:

System.NotSupportedException was caught
  HResult=-2146233067
  Message=The private key is not present in the X.509 certificate.
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       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, Boolean isPrimarySignature)
       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`1.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.Dispatcher.RequestChannelBinder.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)
       at PaymentGatewayTestClient.Customer.ICustomerDetails.CustomerDetails(CustomerDetailRequest request)
       at PaymentGatewayTestClient.Customer.CustomerDetailsClient.CustomerDetails(CustomerDetailRequest request) in c:\temp\Test\PaymentGatewayTestClient\PaymentGatewayTestClient\Service References\Customer\Reference.cs:line 937
       at PaymentGatewayTestClient.Program.Main(String[] args) in c:\temp\Test\PaymentGatewayTestClient\PaymentGatewayTestClient\Program.cs:line 38
  InnerException: 
4

1 に答える 1

0

サーバーが鍵の秘密部分にアクセスできないようです。アプリ プールを実行するユーザーの秘密キーにアクセス許可を付与する必要があります。

これも参照してください: ローカル マシンの「信頼されたルート」証明書の PrivateKey 信頼アクセス許可

于 2013-11-12T08:46:46.767 に答える