2012-01-29 10 views
1

私はwcfサービスを作成し、うまく動作するIIS(7.5)でホストしました。私は今ユーザー名認証を追加したいと思うし、いくつかの問題に遭遇する。私は(MSDNからインスピレーションを得た)以下のなかった証明書についてWCFの問題 - ユーザー名の認証とTransportWithMessageCredentialsを使用したwsHttpBinding

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="warServBehavior" name="WcfServiceLibrary.WarcraftService"> 
     <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.IWarcraftService" bindingConfiguration="warWsHttpBinding" /> 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="warWsHttpBinding"> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="None"/> 
      <message clientCredentialType="UserName"/> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="warServBehavior"> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="BogusValidator, App_Code"/> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

: 設定ファイルがこれです

  1. 1)makecert -n "CN = RootCATest" -r -sv RootCATest。 PVK RootCATest.cer

  2. 2)makecert -sk CertTest -iv RootCATest.pvk -n "CN =偽" -ic RootCATest.cer)信頼されたルート証明機関

  3. 3にこれを追加しました enter image description here

    私はhttps://localhost/WarcraftServiceSite/WarService.svc svcutil実行すると、私はこの例外を取得:私の-sky為替-ss -SR LOCALMACHINEは-pe IISで

iは、httpsのため、私はこれを持っているサーバー証明書のバインディングを追加しました: "There was an error downloading https://localhost/WarcraftServiceSite/WarService.svc. The underlying connection was closed.Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure."

その後編集:svcutilを呼び出すための正しい方法は、httpであることを思わないのhttps私が持っているにもかかわらず、この<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

答えて

2

このため、テスト証明書に過ぎません。クライアントに次の機能を追加することができます。あなたがverisignなどからプロダクション証明書を取得したら、これは必要ありません。 以下を参照して追加する - System.Net、System.Net.Security、System.Security.Cryptography.X509Certificates;

使用ServicePointManagerクラスとプロキシを使用する前に、どこかで線

private static bool RemoteCertificateValidate(
    object sender, X509Certificate cert, 
    X509Chain chain, SslPolicyErrors error) 
{ 
    // trust any certificate 
    return true; 
} 

IMPLその後ServerCertificateValidationCallback

ServicePointManager.ServerCertificateValidationCallback 
       += RemoteCertificateValidate; 

ハンドラにハンドラをハンドラを追加します。 makecertのこのコードとcertsは、テストにのみ使用する必要があります。

関連する問題