Witam,
Samohostujący sie webserwis WCF z SSL, kod jest taki:
string addressHttp = String.Format("https://{0}:8080",System.Net.Dns.GetHostEntry("").HostName);
WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.TransportWithMessageCredential;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
Uri a = new Uri(addressHttp);
Uri[] baseAddresses = new Uri[] { a };
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddresses);
Type c = typeof(ICalculator);
selfHost.AddServiceEndpoint(c, b, "CalculatorService");
selfHost.Credentials.ServiceCertificate.SetCertificate(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySerialNumber,
"10 01 04");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpsGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
Przy probie polaczanie z adresem wskazywanym przez selfHost.Description.Endpoints[0].ListenUri.AbsoluteUri okazuje sie, ze polaczenie nie moze zostac zrealizowane, a dokladniej komunikat z Firefoksa:
Przerwano przesyłanie danych
Połączenie z localhost:8080 zostało przerwane podczas wczytywania strony.
Przeglądarka nawiązała połączenie, ale zostało ono przerwane podczas przesyłania informacji. Spróbuj ponownie.
* Nie możesz oglądać innych witryn? Sprawdź swoje połączenie z siecią.
* Jeśli nadal występują problemy, skonsultuj się z administratorem sieci lub dostawcą usług internetowych.
Podpowie ktos o co chodzi? Certyfikat znaleziony, kod kompiluje sie bez bledow - co tutaj jest nie tak?
Przestrzegajac zalecen Microsoftu, skonfigurowalem certyfikat w taki sposob:
httpcfg set ssl -i 0.0.0.0:8080 -h [odcisk palca]
Wynik:
HttpSetServiceConfiguration completed with 0.
Oraz:
httpcfg set ssl -i 0.0.0.0:8080 -h [odcisk palca] -f 2
Wynik:
HttpSetServiceConfiguration completed with 183.
Jeszcze podam wynik httpcfg query ssl:
IP : 0.0.0.0:8080
Hash : [hash]
Guid : {00000000-0000-0000-0000-000000000000}
CertStoreName : (null)
CertCheckMode : 0
RevocationFreshnessTime : 0
UrlRetrievalTimeout : 0
SslCtlIdentifier : (null)
SslCtlStoreName : (null)
Flags : 0