0

IIS6 で SSL を使用して WCF トランスポート セキュリティを設定しようとしています。

クライアントは同じドメインの別のマシンにあります。

私は証明書、ルート CA などの前提を理解しており、メッセージ セキュリティ用の証明書のワーキング セットを持っており、同じ環境設定でこれらの no probs を使用できます。(私は先週、あまり学んでいません:)

SSL に切り替えたときに、IIS 6 サービスに対してクライアントを認証させようとする悪夢に悩まされています。呼び出し時に常に「匿名認証は許可されていません」を受け取ります。

IISで私は持っています

  • SSL ポート 443 のサイトに設定されたルート署名付き CA 証明書 (https:// svc ページを参照すると、IE 南京錠が表示され、通信するには証明書が必要であるとページに表示されます)

私が持っている安全な通信の下で

  • SSL チャネルが必要
  • 128 ビット暗号化が必要
  • クライアント証明書が必要
  • クライアント証明書マッピングを有効にします (証明書サブジェクト O フィールドで一致するように、IIS ボックスの管理者アカウントへの多対 1 マッピングで設定します)

Web サイトのセキュリティ (認証とアクセス制御) の下で

  • 匿名アクセス = オン
  • 統合 Windows 認証 = オフ
  • 基本認証 = オン

クライアント wsHttpBinding の場合、認証の準備が整った証明書と、この情報を提供するためのカスタム エンドポイント動作がありますが、ここまで到達するとは思いません!

更新されたサーバー構成

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="CertificateWithTransport">
                <security mode="Transport">
                    <transport clientCredentialType="Certificate"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <services>
        <service name="WCFServiceCertificate.Service1" behaviorConfiguration="credentialConfig">                
            <endpoint address="https://svnvmig02/Service1.svc" 
                        binding="wsHttpBinding" 
                        bindingConfiguration="CertificateWithTransport" 
                        contract="WCFServiceCertificate.IService1">
            </endpoint>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="credentialConfig">                   
                <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>                    
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

更新されたクライアント構成

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WSHttpBinding_IService1">
                <security mode="Transport">
                    <transport clientCredentialType="Certificate" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="https://svnvmig02/Service1.svc" binding="wsHttpBinding" behaviorConfiguration="CustomBehavior"
            bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1"
            name="WSHttpBinding_IService1">
        </endpoint>
    </client>
    <behaviors>
        <endpointBehaviors>
            <behavior name="CustomBehavior">
                <clientCredentials>
                    <clientCertificate findValue="svnvmig02" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
                    <serviceCertificate>
                        <authentication certificateValidationMode="PeerTrust"/>
                    </serviceCertificate>
                </clientCredentials>
            </behavior>
        </endpointBehaviors>
    </behaviors>
</system.serviceModel>  

編集: おそらく私のVSプロジェクトは3.5ですが、IIS6は.net4を実行していることに言及する価値があります

修正された構成 (ありがとう Fabio ;) を使用して、クライアント マシンからアドレスhttps://svnvmig01/Service1.svcを IEで参照し、生成された svc ページを表示して、wsdl URl をクリックすることもできます。

私がネット上で見つけたページの大部分は、セルフホスティングまたは IIS7 を参照しています....IIS7 のサポートがより優れていることを願っています ;)

どんな助けでも大歓迎です:)

4

2 に答える 2

1

あなたの設定には以下が含まれます:

https://svnvmig02:8091/Service1.svc

SSL の通常のポートは 443 です。

リクエストが送信先のサイトに送信されない可能性があります。したがって、予期しないエラー メッセージが表示されます。

IIS ログをチェックして、要求を受信して​​いるサイトを確認します。

于 2011-06-28T14:43:52.903 に答える
1

ここでの問題は、IIS が次のように設定されている可能性があると思います。

匿名アクセス = オフ

いくつかのサーバーでトランスポート セキュリティを使用していますが、IIS6 のすべてのサーバーで、その設定がオフではなくオンになっています。これは、提供したエラー メッセージにも対応しています。

「匿名認証は許可されていません」

anon アクセスをオフにしないと、IIS はユーザーにユーザー名/パスワードを入力するか、windows / Active Directory / kerberos の資格情報を渡すよう求めます。

于 2011-06-28T14:51:06.277 に答える