Udostępnij za pośrednictwem


Zabezpieczenia odnajdywania — przykład

Specyfikacja odnajdywania nie wymaga zabezpieczenia punktów końcowych uczestniczących w procesie odnajdywania. Ulepszanie komunikatów odnajdywania przy użyciu zabezpieczeń ogranicza różne typy ataków (zmiana komunikatów, odmowa usługi, odtwarzanie, fałszowanie).

Przykład DiscoveryScenario implementuje niestandardowe kanały, które obliczają i weryfikują podpisy komunikatów przy użyciu formatu kompaktowego podpisu (opisanego w sekcji 8.2 specyfikacji odnajdywania WS). Przykład obsługuje zarówno specyfikację odnajdywania 2005, jak i wersję 1.1.

Kanał niestandardowy jest stosowany w górnej części istniejącego stosu kanału dla punktów końcowych odnajdywania i anonsu. W ten sposób nagłówek podpisu jest stosowany dla każdego wysłanego komunikatu. Podpis jest weryfikowany przy odebranych komunikatach i gdy nie jest zgodny lub gdy komunikaty nie mają podpisu, komunikaty są porzucane. Aby podpisać i zweryfikować komunikaty, przykład używa certyfikatów.

Dyskusja

Program WCF jest rozszerzalny i umożliwia użytkownikom możliwość dostosowywania kanałów zgodnie z potrzebami. Przykład implementuje element bezpiecznego powiązania odnajdywania, który tworzy bezpieczne kanały. Bezpieczne kanały mają zastosowanie i zweryfikuj podpisy komunikatów i są stosowane na początku bieżącego stosu.

Element bezpiecznego powiązania tworzy bezpieczne fabryki kanałów i odbiorniki kanałów.

Bezpieczna fabryka kanałów

Fabryka bezpiecznego kanału tworzy kanały wyjściowe lub dwukierunkowe, które dodają kompaktowy podpis do nagłówków komunikatów. Aby zachować możliwie najmniejszy rozmiar komunikatów, używany jest kompaktowy format podpisu. Struktura kompaktowego podpisu jest pokazana w poniższym przykładzie.

<d:Security ... >
  [<d:Sig Scheme="xs:anyURI"
         [KeyId="xs:base64Binary"]?
          Refs="..."
         [PrefixList]="xs:NMTOKENS"
          Sig="xs:base64Binary"
          ... />]?
  ...
</d:Security>

Uwaga

Element PrefixList został dodany w protokole wersji odnajdywania 2008.

Aby obliczyć podpis, przykład określa rozwinięte elementy podpisu. Podpis XML (SignedInfo) jest tworzony przy użyciu prefiksu ds przestrzeni nazw zgodnie ze specyfikacją odnajdywania WS-Discovery. Treść i wszystkie nagłówki w przestrzeniach nazw odnajdywania i adresowania są przywoływane w podpisie, więc nie można ich modyfikować. Każdy przywoływane elementy są przekształcane przy użyciu funkcji Exclusive Canonicalization (http://www.w3.org/2001/10/xml-exc-c14n#), a następnie obliczana jest wartość skrótu SHA-1 (http://www.w3.org/2000/09/xmldsig#sha1). Na podstawie wszystkich przywoływanych elementów i ich wartości skrótu wartość podpisu jest obliczana przy użyciu algorytmu RSA (http://www.w3.org/2000/09/xmldsig#rsa-sha1).

Komunikaty są podpisane przy użyciu certyfikatu określonego przez klienta. Podczas tworzenia elementu powiązania należy określić lokalizację magazynu, nazwę i nazwę podmiotu certyfikatu. W KeyId podpisie kompaktowym reprezentuje identyfikator klucza tokenu podpisywania i jest identyfikatorem klucza podmiotu (SKI) tokenu podpisywania lub (jeśli ski nie istnieje) skrót SHA-1 klucza publicznego tokenu podpisywania.

Odbiornik bezpiecznego kanału

Odbiornik bezpiecznego kanału tworzy kanały wejściowe lub dwukierunkowe, które weryfikują kompaktowy podpis w odebranych komunikatach. Aby zweryfikować podpis, określony KeyId w kompaktowym podpisie dołączonym do wiadomości jest używany do wybierania certyfikatu z określonego magazynu. Jeśli komunikat nie ma podpisu lub sprawdzanie podpisu zakończy się niepowodzeniem, komunikaty zostaną porzucone. Aby użyć bezpiecznego powiązania, przykład definiuje fabrykę, która tworzy niestandardową UdpDiscoveryEndpointUdpAnnouncementEndpoint i z dodanym elementem bezpiecznego powiązania odnajdywania. Te bezpieczne punkty końcowe mogą być używane w odbiornikach anonsów odnajdywania i wykrywalnych usługach.

Przykładowe szczegóły

Przykład zawiera bibliotekę i 4 aplikacje konsolowe:

  • DiscoverySecurityChannels: biblioteka, która uwidacznia bezpieczne powiązanie. Biblioteka oblicza i weryfikuje kompaktowy podpis dla komunikatów wychodzących/przychodzących.

  • Usługa: usługa uwidaczniająca kontrakt ICalculatorService, hostowany samodzielnie. Usługa jest oznaczona jako Odnajdywanie. Użytkownik określa szczegóły certyfikatu używanego do podpisywania komunikatów, określając lokalizację i nazwę magazynu oraz nazwę podmiotu lub inny unikatowy identyfikator certyfikatu oraz magazyn, w którym znajdują się certyfikaty klienta (certyfikaty używane do sprawdzania podpisu dla komunikatów przychodzących). Na podstawie tych szczegółów jest kompilowany i używany punkt UdpDiscoveryEndpoint z dodanymi zabezpieczeniami.

  • Klient: ta klasa próbuje odnaleźć klasę ICalculatorService i wywołać metody w usłudze. Ponownie element UdpDiscoveryEndpoint z dodanymi zabezpieczeniami jest kompilowany i używany do podpisywania i weryfikowania komunikatów.

  • AnnouncementListener: samoobsługowa usługa, która nasłuchuje anonsów online i offline i używa bezpiecznego punktu końcowego anonsu.

Uwaga

Jeśli Setup.bat jest uruchamiany wiele razy, menedżer certyfikatów monituje o wybranie certyfikatu do dodania, ponieważ istnieją zduplikowane certyfikaty. W takim przypadku należy przerwać Setup.bat i wywołać Cleanup.bat, ponieważ zostały już utworzone duplikaty. Cleanup.bat również monituje o wybranie certyfikatu do usunięcia. Wybierz certyfikat z listy i kontynuuj wykonywanie Cleanup.bat, dopóki nie pozostaną żadne certyfikaty.

Aby użyć tego przykładu

  1. Wykonaj skrypt Setup.bat z wiersza polecenia dewelopera dla programu Visual Studio. W przykładzie użyto certyfikatów do podpisywania i weryfikowania komunikatów. Skrypt tworzy certyfikaty przy użyciu Makecert.exe, a następnie instaluje je przy użyciu Certmgr.exe. Skrypt musi być uruchamiany z uprawnieniami administratora.

  2. Aby skompilować i uruchomić przykład, otwórz plik Security.sln w programie Visual Studio i wybierz pozycję Skompiluj wszystko. Zaktualizuj właściwości rozwiązania, aby uruchomić wiele projektów: wybierz pozycję Uruchom dla wszystkich projektów z wyjątkiem DiscoverySecureChannels. Zwykle uruchamiaj rozwiązanie.

  3. Po zakończeniu pracy z przykładem wykonaj skrypt Cleanup.bat, który usuwa certyfikaty utworzone dla tego przykładu.