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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig alle sichere WCF-Bindungen (wie wsHttpBinding) verschlüsseln und signieren von Nachrichten.
SSL zwingend ein Zertifikat verwenden, und der hack in dem link, den Sie geben, ist das hacken wcf, nicht SSL. Weil ohne SSL WCF untersagen die Nutzung der basicHttpBinding (das senden von xml in klar) und UserNamePasswordValidator, weil in diesem Fall jeder, der die Nachricht abzufangen, können Sie den Benutzernamen/Passwort.
Mit WSHttpBinding Sie vermeiden könnte, SSL, und setzen Sie die Sicherheit auf message-Ebene.
Rate ich dir dringend zu Lesen dieser Artikel, vor allem die Service-Anmeldeinformationen und Verhandlung Kapitel:
Mit der
UserNamePasswordValidator
, müssen Sie ein Zertifikat konfigurieren auf dem server und den client signieren und verschlüsseln jeder Nachricht (mit dem Zertifikat für den öffentlichen Schlüssel).Wenn Sie Windows-Authentifizierung verwenden, es wird nicht nötig sein.
Warum sind Sie so besorgt über das Zertifikat ?