2010. november 15., hétfő

WCF service Https-en keresztül

Elsőre nem tűnik túl bonyolultnak, van egy wcf service, hostoljuk, méghozzá https-en.
Amikor az ember nekiszalad, akkor látja hogy azért van ezzel szopó, mert ugyan a neten soksok cikk van, de viszonylag kevés olyan, amiben minden választ megkapunk a hogyan-okról.
Ez egy egész jó leírás, ha végigolvassuk, mielőtt nekiugrunk, sokat segít.

Ami nem triviális, az a cert generálás a makecert paranccsal, és a "namespace reservation" a netsh-val (win2008). Sok helyen el lehet tolni, de 2 nagyon fontos dolog van:
  1. A legfontosabb talán az, hogy a namespace reservation-nél a gép HELYI ip címét kell megadni, még véletlenül sem azt, ami kívülről esetleg látszik weben keresztül. 127.0.0.1 és localhost pedig gyorsan elfelejtendők!
  2. Amikor a cert-et generáljuk, a CN=valami property-nél mindenképpen azt a domain nevet kell megadni, amin keresztül majd el lehet érni a szolgáltatást (kívülről). Ezt érdmes bevésni az agyba, mert ha simán egy web oldalt szeretnénk https-en publikálni, ott ugyanígy kell a cert-et generálni (tehát ha https://mydomain.com/valamilyenoldal lesz az url, akkor CN=mydomain.com -nak kell lenine).

Sokszor elkövetett konfigurációs hibákra meg talán ez az oldal elég összeszedett (asztal csapkodások közepette érdemes megnézni)

2 megjegyzés:

  1. Ezt a megjegyzést eltávolította a szerző.

    VálaszTörlés
  2. Ha a HTTPS-es WCF szolgáltatásunkat localhoston szeretnénk tesztelni, akkor érdemes netsh-zásnál az ipport paraméternek 0.0.0.0-t megadni, különben a localhoston lévő kliens nem biztos, hogy csatlakozik. Persze ezelőtt nem árt egy törlés. Példa:

    netsh http delete sslcert ipport=0.0.0.0:8001
    netsh http add sslcert ipport=0.0.0.0:8001 certhash=3bc0fc81481dd91d4275ea0f0e11bcb2f745d6cf appid={0918185a-85ff-4220-ba2a-e4939fb0a667} clientcertnegotiation=enable

    VálaszTörlés