1

構成ファイルでセキュリティ動作の構成を設定しながら、コードでサービスエンドポイントのURIを設定できるようにしたい。

以下は私にいくつかの方法を教えてくれます、サービスは正しいバインディング構成を使用します-しかし私は証明書構成を構成ファイルに移動する方法を見つけることができません。

編集:ここでいくつかの混乱があったことに注意してください-設定ファイルはメッセージレベルのセキュリティの証明書を構成し、SSLポートはトランスポートレベルの証明書を制御します-リチャードブルーエットの答えによると

var svc = new ServiceHost( typeof (MyService), new Uri(s));
svc.Authorization.PrincipalPermissionMode = 
                  PrincipalPermissionMode.UseWindowsGroups;
svc.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding("MyBinding"), "");
//svc.Credentials.ServiceCertificate.SetCertificate(
//    StoreLocation.LocalMachine,
//    StoreName.My,
//    X509FindType.FindBySubjectName,
//    "mycertname"
//    );

コメントアウトされたコードは、構成ファイルで同等のものを見つけるために必要なものです

   <system.serviceModel>
     <services>
       <service name="MyNamespace.MyService" behaviorConfiguration="MyBehavior">
       </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="MyBinding">
          <security mode="Transport">
            <transport clientCredentialType="Windows"/>
          </security>
          <!-- Or for message level security
          <security mode="Message">
            <message clientCredentialType="Certificate"/>
          </security>
          -->
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>  

編集:後世のために、メッセージレベルとトランスポートレベルの両方に対応する必要があるため、質問と回答を更新してメッセージレベルとトランスポートレベルの両方をカバーしました。

4

1 に答える 1

1

メッセージセキュリティの場合、このサービスの動作により、必要なものが提供されます。

<behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceCredentials>
            <serviceCertificate findValue="mycertname"
                                x509FindType="FindBySubjectName"
                                storeLocation="LocalMachine"
                                storeName="My"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
</behaviors>

ただし、トランスポートセキュリティを使用しています。つまり、HTTPSとwsHttpBinding。したがって、証明書はhttp.sys、証明書をポートにバインドする場所の構成によって定義されます。Windows 2008ではnetsh.exe、この構成を制御および表示するために使用します。Windows 2003では、はるかに使いにくいツールを使用しますhttpcfg.exe

于 2012-01-25T17:17:28.507 に答える