1

自己ホスト型 WCF サービス用に security mode="TransportWithMessageCredential" で basichttpendpoint を作成しました。

私のサーバー構成は次のとおりです。

enter code here

   <system.serviceModel>    
       <bindings>
    <basicHttpBinding>
     <binding name="BasicHttpBinding_IViewerManager" maxBufferSize="655360000"                  maxReceivedMessageSize="655360000" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
    <security mode="TransportWithMessageCredential">
          <message clientCredentialType="Certificate" />
    </security>

           </binding>
     </basicHttpBinding>
    </bindings>

<services>
    <service behaviorConfiguration="SecureBehavior" name="Lumedx.ApolloLXPACS.ViewerServiceLibrary.ViewerManager">

    <endpoint name="basicHTTP" address="https://localhost:5100/ViewerService" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IViewerManager" contract="Lumedx.ApolloLXPACS.ServiceContracts.IViewerManager"/>
    <host>
     <baseAddresses>
      <add baseAddress="https://localhost:5100/ViewerService"/>
                    </baseAddresses>
                </host>
            </service>
        </services>

        <behaviors>
            <endpointBehaviors>
                <behavior name="HttpsBehavior">
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>

                <behavior name="SecureBehavior">

                    <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="true"/>
                    <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
                    <serviceCredentials>
                        <serviceCertificate findValue="RootCATest"
                                            storeLocation="LocalMachine"
                                            storeName="My"
                                            x509FindType="FindByIssuerName" />
                    </serviceCredentials>
                </behavior>

            </serviceBehaviors>
        </behaviors>

    </system.serviceModel>
my windows client config has:
<?xml version="1.0"?>
<configuration>

    <appSettings>
        <add key="priorityEndpoint1" value="basicHttpEndpoint"/>

        <add key="maxCommunicationRetries" value="0"/>
    </appSettings>


    <system.serviceModel>


        <bindings>

            <basicHttpBinding>
                <binding name="BasicHttpBinding_IViewerManager" maxBufferSize="655360000" maxReceivedMessageSize="655360000" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                    <security mode="TransportWithMessageCredential">
                        <message clientCredentialType="Certificate" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>

        <client>
            <endpoint name="basicHttpEndpoint" address="https://10.10.10.100:5100/ViewerService/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IViewerManager" contract="Lumedx.ApolloLXPACS.ServiceContracts.IViewerManager" behaviorConfiguration="HttpsBehavior"/>
        </client>

        <behaviors>
            <endpointBehaviors>
                <behavior name="HttpsBehavior">
                    <clientCredentials>
                        <clientCertificate findValue="RootCATest"
                                            storeLocation="LocalMachine"
                                            storeName="My"
                                            x509FindType="FindByIssuerName" />
                    </clientCredentials>
                </behavior>
            </endpointBehaviors>
        </behaviors>
    </system.serviceModel>
<

証明書をインストールして構成しました。

https エンドポイントを使用して、Windows クライアントを自己ホスト型 WCF サービスに接続しています。Wireshark を使用してネットワーク トラフィックをキャプチャしました。ネットワーク トラフィックで確認できるのは、サーバーとクライアント間の TCP パケットだけです。TCP ストリームをたどると、メッセージが暗号化されていないようです。

ここで何が間違っていますか?

4

1 に答える 1

0

セキュリティモードTransportWithMessageCredentialはトランスポート(SSL)を暗号化し、メッセージ本文は暗号化されないままにします。

暗号化は証明書を使用して行われます。

暗号化されていないデータが表示される場合は、次のいずれかのシナリオが発生しています。

  1. 何らかの理由でトラフィックがSSLで暗号化されていない
  2. Wiresharkは、証明書とそれを使用する暗号化されたトラフィックにアクセスできます。

これはあなたがしたことと似ていますか?http://trycatch.be/blogs/decaluwet/archive/2009/04/08/decrypting-ssl-traffic-using-wireshark.aspx

いずれの場合も、トランスポートレベルの暗号化が有効になっていて、証明書が危険にさらされていない場合は安全です。

于 2012-06-06T18:41:09.600 に答える