Ist TransportWithMessageCredential ohne Zertifikat sicher genug für einen WCF-Dienst?

Entwickelt ich eine WCF-self-hosted-service, für den habe ich zwei grundlegende Anforderungen an die Sicherheit, wie es zugegriffen werden soll über das Internet:

  • Transport layer sollte Manipulationen verhindern und schnüffeln, vor allem das abrufen von Anmeldeinformationen für die Authentifizierung. Dies ist, was SSL bedeutet, sondern von dem, was ich gesehen habe, das einrichten von SSL erfordert die installation von Zertifikaten (außer vielleicht durch dieser hack verwendet plain-Zertifikat-Dateien), die ich lieber nicht zu tun haben.

  • Die Authentifizierung Schicht sollte bestehen aus einer Benutzername/Passwort-Prüfung.

Konfigurierte ich meinen Dienst zu verwenden:

      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="Basic" />
      </security>

Selbst wenn der transport layer ist HTTP (nicht HTTPS), das macht den WCF erstellen Sie eine weitere security-Schicht, die ist äquivalent zu SSL? Wenn nicht, was ist der Unterschied in Bezug auf die Sicherheit Stärke?

Außerdem gibt es jede Möglichkeit, um die meta-Daten-Endpunkt, ohne ein SSL-Zertifikat (nicht notwendig, aber wäre willkommen)?

Hier ist meine vollständige Konfiguration code für die self-hosted-service:

<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
  <system.serviceModel>
    <services>
      <service name="MyService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8000/Services" />
          </baseAddresses>
        </host>
        <endpoint address ="MyService" binding="wsHttpBinding" contract="IMyService">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding1" maxReceivedMessageSize="2147483647">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CR.Common.Services.CustomValidator, Common" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Danke!

InformationsquelleAutor Erwin Mayer | 2012-05-22
Schreibe einen Kommentar