JavaクライアントからWCFサービス相互運用証明書への相互認証 - 署名を検証するためのKeyInfoを解決できません

例外: MessageSecurityException:署名を検証するためのKeyInfoを解決できません:KeyInfo 'SecurityKeyIdentifier

次のヘッダーで署名されたコンテンツを送信しているJavaクライアントからSOAP呼び出しを受信するWCFサービスをセットアップする必要があります。



  
    
      
      
      
        
          
        
        
        
      
      
        
          
        
        
        
      
    
    
    
      
        
          
            CN=XXXXXXXX
            111122222
          
        
      
    
  
  
    xxxxx
    xxxx
  

次のバインドと動作を設定しようとしました:

      
    
      
      
      
      
    
  







    
    



   

しかし、サーバーのイベントログには次の例外があります。

ClientIdentity: 
   ActivityId: 
   MessageSecurityException: Cannot resolve KeyInfo for verifying signature: KeyInfo
  'SecurityKeyIdentifier
   (
       IsReadOnly = False,
       Count = 1,
       Clause[0] = X509IssuerSerialKeyIdentifierClause(Issuer = 'CN=XXXXXX)
    )
   ', available tokens 'SecurityTokenResolver
(
TokenCount = 0,
)

'

シグネチャの検証を有効にする必要があり、Javaクライアントが送信しているものを変更する可能性はありません。

5

2 答え

実際に私は同じ問題を抱えています、そして、私はYaron Navehによって提案されたaproachを使用しています。

私はまだ終わっていないが、私はいくつかの進歩を遂げている(私が終わったら完全な答えを投稿する)。

この要求では、Yymonが提案したとおり、SymmetricSecurityBindingElementではなくAsymmetricSecurityBindingElementが使用されます。

X509SecurityTokenParametersの包含モードをSecurityTokenInclusionMode.AlwaysToInitiatorに設定する必要があります

バインディングは次のようになります

//Only the following MessageSecurityVersion are asimetric: 

//WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
//WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10

AsymmetricSecurityBindingElement abe =(AsymmetricSecurityBindingElement)
SecurityBindingElement.CreateMutualCertificateBindingElement(    
  MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10);

abe.SetKeyDerivation(false);

X509SecurityTokenParameters x509ProtectionParameters =
    new X509SecurityTokenParameters(X509KeyIdentifierClauseType.IssuerSerial);

x509ProtectionParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToInitiator;
x509ProtectionParameters.X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial;

abe.InitiatorTokenParameters = x509ProtectionParameters;
abe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
abe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDesRsa15;

HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
System.ServiceModel.Channels.Binding binding = new CustomBinding(abe, httpBinding);
return binding;

私はこれが少し助けてくれることを望む

1
追加された
このバインディングを使用すると、あなたの質問の1つと同様の要求を生成することができますが、WCFサービスでこの同じバインディングを置くと、同じエラーが発生します。私は今立ち往生している
追加された 著者 DkAngelito,

リクエストの封筒全体をここに公開してください。

一般的にこのような場合は、まずWCFクライアントを構築し、それが動作することを確認することをお勧めします。次のようなシリアル番号を送信するWCFクライアントを作成することができます。

SymmetricSecurityBindingElement messageSecurity = new SymmetricSecurityBindingElement();
X509SecurityTokenParameters x509ProtectionParameters = 
                new X509SecurityTokenParameters( X509KeyIdentifierClauseType.IssuerSerial);
messageSecurity.ProtectionTokenParameters = x509ProtectionParameters;
HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
Binding binding = new  CustomBinding(messageSecurity, httpBinding);

X509KeyIdentifierClauseType.IssuerSerialの使用方法に注意してください。おそらく、この設定でカスタムバインドを介してサーバーを作成すると、問題全体が解決されますが、wcfからwcfを開始することをお勧めします。

0
追加された
完全なwcfが失敗したリクエストと完全なjava作業リクエスト(Enevelopeタグから)を公開してください
追加された 著者 Yaron Naveh,
現時点では、レスポンスにはBSTではなく参照が含まれているという問題があります。 wcfが実行する前に応答を前処理し、参照をbstに置き換えることをお勧めします。鍵参照部分には署名がないので、これは可能でなければなりません。変更するには問題ありません。また、現在のシリアルナンバーリファレンスが何に関係しているかを知っておく必要があるので、あなたはbstが何であるかを知っていると思います。 wcfストリッピングチャネルに似たものを使用できます。 social.msdn.microsoft.com/Forums/en-US/wcf/thread/…
追加された 著者 Yaron Naveh,
あなたの助けをありがとう、フルヘッダーが追加されました。
追加された 著者 Bjørn Otto Vasbotten,
私たちはJavaクライアントと同じxmlを送信するwcfクライアントを取得しているので、私たちはそこに到達していると楽観的でしたが、まだ固執しています。次のようなServiceHostファクトリメソッドがあります。 msdn.microsoft.com/en-us/library/aa702627.aspx us/library/aa702627.aspx
追加された 著者 Bjørn Otto Vasbotten,
こんにちは、このブログで説明されているようなバイナリセキュリティトークンを使用しています: blogs.msdn.com/b/dhrubach/archive/2010/06/18/10027513.aspx
追加された 著者 Bjørn Otto Vasbotten,