2

WCF を使用してクライアントの Web サービスを利用しようとしています。クライアントの Web サービスは HTTPS 経由で実行され、次のバインディングで問題なく使用できます。

<bindings>
  <basicHttpBinding>
    <binding name="PurchaseOrderSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>

ただし、Fortify 360 はセキュリティが弱すぎると訴えているため、セキュリティ チームから、Messageまたはセキュリティを使用する必要があると言われました。TransportWithMessageCredentialTransport

試してみるMeesageと、次のエラーが表示されます。

System.InvalidOperationException: BasicHttp binding requires that 
BasicHttpBinding.Security.Message.ClientCredentialType be equivalent to the 
BasicHttpMessageCredentialType.Certificate credential type for secure messages. Select 
Transport or TransportWithMessageCredential security for UserName credentials.

そしてTransportWithMessageCredential、次のエラーが表示されます。

System.InvalidOperationException: The username is not provided. Specify username in 
ClientCredentials.

ユーザー名/パスワードを持っていないので (ブラウザで問題なく接続できます)、質問は次のとおりです。

既存の HTTPS Web サービスを使用するときに (発行者が変更を加えることなく)Messageまたはを使用できますか? TransportWithMessageCredentialsその場合、構成にどのような変更を加える必要がありますか?

質問を明確にするために編集されました。

4

3 に答える 3

2

サード パーティ ベンダーに、メッセージ セキュリティをサポートするサービスにエンドポイントを追加してもらうことができない場合は、行き詰まっています。現在、トランスポート レベルのセキュリティを備えた basicHttpBinding のみをサポートしているようです。

トランスポート セキュリティは、メッセージ レベルのセキュリティよりも安全性が「劣る」わけではありません。メッセージ レベルのセキュリティとは、SOAP メッセージの内容が暗号化されていることを意味します。これにより、メッセージをクリア テキストの方法で保存または中継することができますが、メッセージを覗き見されることはありません。システムとベンダーとの間でインターネットを介して通信するだけであれば、トランスポート レベルとメッセージ レベルのセキュリティは同等に安全です。

于 2011-04-12T13:33:33.120 に答える
1

basicHttpBinding は、ユーザー名と証明書メッセージのセキュリティのみをサポートします。したがって、システムでユーザー資格情報を検証するメカニズムがない場合、1 つのオプションは証明書を使用することです。

<security mode="TransportWithMessageCredential">
    ...
    <message clientCredentialType="UserName"/>
</security>

もう 1 つのオプションは、デフォルトでメッセージ セキュリティが有効になっており、Windows および発行済みトークンの資格情報タイプもサポートする wsHttpBinding などの別のバインディングを使用することです。これらのうちどれを実装するかは、実装要件と環境に大きく依存します。

于 2011-04-12T12:48:49.170 に答える
1

Fortify の最善の推奨事項を実装できない理由を書き留めることができる、ある種の例外ポリシーはありませんか?

あなたができる最善の方法は、Web サービス ベンダーと連絡を取り、Fortify のトランスポート ガイドラインをサポートするための機能強化を依頼することだと思います。

また: Web ブラウザが資格情報なしで接続すると言うのは疑わしいです。これはおそらく、接続しているシステムが想定よりも少し複雑であることを意味します。異なる接続または異なる URL は、異なるサーバー (SSO?) によって提供されるか、異なるセキュリティ ポリシー (クライアント証明書など) の対象となる可能性があります。

于 2011-05-18T06:10:31.247 に答える