1

WCFクライアントを使用してJavaWebサービスを呼び出すASP.NETアプリケーションがあります。通信は、証明書が必要になるまで機能します。設定を更新しましたが、通話中にエラーが発生します。誰かが構成の良い例を持っていますか?証明書は証明書ストアに保存されます。

クライアント証明書が不要な場合に機能する構成:

<system.serviceModel>
    <bindings>
            <basicHttpBinding>
                <binding name="DocManagementSOAP" 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="Mtom" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://acme.com/services/docmanagement_V3" 
                      binding="basicHttpBinding"
                      bindingConfiguration="DocManagementSOAP"
                      contract="FileNetDmsServiceReference.docManagement" 
                      name="DocManagementSOAP" />
        </client>
    </system.serviceModel>

クライアント証明書を渡すようにセットアップしようとしている失敗している構成:

 <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="DocManagementSOAP" 
                         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="Mtom" 
                         textEncoding="utf-8" 
                         transferMode="Buffered"
                         useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="Transport">
                        <transport clientCredentialType="Certificate" proxyCredentialType="None" realm=""/>
                        <message clientCredentialType="Certificate" algorithmSuite="Default"/>
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://acme.com/services/docmanagement_V3"
                      binding="basicHttpBinding"
                      bindingConfiguration="DocManagementSOAP"
                      behaviorConfiguration="CertificateBehavior"
                      contract="ServiceReference.docManagement"
                      name="DocManagementSOAP">
                <identity>
                    <dns value="cert.acme.com" />
                </identity>
            </endpoint>     
        </client>
        <behaviors>
            <endpointBehaviors>
                <behavior name="CertificateBehavior">
                    <clientCredentials>
                        <clientCertificate x509FindType="FindBySubjectName" findValue="cert.acme.com" storeLocation="LocalMachine"/>
                        <serviceCertificate>
                            <authentication certificateValidationMode="PeerOrChainTrust"
                                            revocationMode="NoCheck"
                                            trustedStoreLocation="LocalMachine" />
                        </serviceCertificate>
                    </clientCredentials>
                </behavior>
            </endpointBehaviors>
        </behaviors>
    </system.serviceModel>
4

1 に答える 1

1

Microsoft テクニカル サポートと連携した後、これは最終的に機能する構成です。

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="DocManagementSOAP" 
                         messageEncoding="Mtom" 
                         textEncoding="utf-8">
                    <security mode="Transport">
                        <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://acme.com/services/docmanagement_V3"
                      binding="basicHttpBinding"
                      behaviorConfiguration="cert"
                      bindingConfiguration="DocManagementSOAP"
                      contract="docManagement"
                      name="DocManagementSOAP" />
        </client>
        <behaviors>
            <endpointBehaviors>
                <behavior name="cert">
                    <clientCredentials>
                        <clientCertificate findValue="cert.acme.com"
                                           storeLocation="LocalMachine"
                                           storeName="My"
                                           x509FindType="FindBySubjectName"/>
                    </clientCredentials>
                </behavior>
            </endpointBehaviors>
        </behaviors>
    </system.serviceModel>

注: サービスが MTOM をサポートしていない場合は、messageEncoding 属性を削除または変更してください。

于 2012-07-25T18:18:46.177 に答える