RSS FeedFeed TwitterTwitter XINGXING
  
Meine Bücher

Erscheint demnächst: Verteilte Systeme und Services mit .NET 4.5: Konzepte und Lösungen für WCF 4.5 und ASP.NET Web-API ,
Hanser Fachbuchverlag

Weitere Infos

 

.NET 4.5 Update,
Microsoft Press

Weitere Infos

 

Verteilte Systeme und Services mit .NET 4.0: Konzepte und Lösungen mit WCF 4.0,
Hanser Fachbuchverlag

Weitere Infos

 
Weitere Bücher
Meine Artikel

Leichtgewichtige Kommunikation: REST-basierte Services mit dem neuen API aus der ASP.NET-Familie,
windows.developer

Weitere Infos

 

Windows Azure Tutorial, Teil 3: Verbindung zwischen Cloud- und lokalen Applikationen,
iX - Magazin für professionelle Informationstechnik

Weitere Infos

 

Weitere Artikel

Schulung & Beratung

Gemeinsam mit meinen Kollegen aus dem IT-Visions Netzwerk unterstützte ich durch zielgerichtete Inhouse-Trainings und Consulting Unternehmen bei der Planung und Umsetzung großer Software-Systeme mit der Microsoft/.NET-Plattform.

 
Konferenzen

Scandinavian Developer Conference 2013 (SDC 2013) von 04.03.2013 bis 06.03.2013 in Göteborg

Meine Talks

Web-Site der Konferenz

 

BASTA! on Tour Spring 2013 von 24.04.2013 bis 26.04.2013 in Düsseldorf

Meine Talks

Web-Site der Konferenz

 

5th SOA and Cloud-Technology Symposium 2012 von 24.09.2012 bis 25.09.2012 in London

Meine Talks

Web-Site der Konferenz

 
Weitere Konferenzen
von Manfred, 18. Juni 2011 00:00
Eines vorweg: Der richtige Ort zum Speichern von Zertifikaten ist der Certificate Store. Wenn das, aus welchen Gründen auch immer, problematisch ist, kann man das Zertifikat bzw. den privaten Schlüssel auch manuell laden und WCF übergeben. Die nachfolgenden Notizen beschreiben dies, indem gezeigt wird, wie man eine Applikation, die sich auf den Certificate Store abstützt, auf eine Verwendug ohne Certificate Store umstellen kann.
 
1. Privaten Schlüssel aus Cert-Store exportieren. Damit dies möglich ist, muss der Schlüssel beim Importieren in den Certificate Store als "exportierbar" markiert werden.
  
2. Benutzerdefinierte ServiceHostFactory erstellen (siehe unten)
  
3. ServiceHostFactory in .svc-Datei angeben:
<%@ ServiceHost Language="C#" Debug="true" Service="FlugService.FlugService" Factory="FlugService.CustomFactory" CodeBehind="FlugService.svc.cs" %>
 4. Validierung gegen Cert-Store am Client abschalten:
[...]

c.ClientCredentials.UserName.UserName = "soa";
c.ClientCredentials.UserName.Password = "geheim";
c.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;

[...]
 5. Validierung gegen das Zertifikat erfolgt über <identity>-Tag in Client-Konfig:
<identity>
       <certificate encodedValue="..." />
</identity>
Nachfolgend noch der Quellcode für  die benutzerdefinierte ServiceHostFactory:
using System.Web;
using System.ServiceModel.Activation;
using System.ServiceModel.Description;
using System.Security.Cryptography.X509Certificates;

namespace FlugService
{
    public class CustomFactory : ServiceHostFactory
    {
        protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            var sh = base.CreateServiceHost(serviceType, baseAddresses);

            ServiceCredentials sc = (ServiceCredentials)sh.Description.Behaviors.Where(b => b is ServiceCredentials).FirstOrDefault();
            
            if (sc == null)
            {
                throw new Exception("ServiceCredentials erwartet!");
            }

	        // Cert inkl. privaten Schlüssel laden 
            sc.ServiceCertificate.Certificate = new X509Certificate2(@"c:\temp\test\my.pfx", "P@ssw0rd");

            return sh;
        }
    }
}
  

Kategorien: WCF