2015-04-21 39 views
7

Piszę klienta dla mojego webapplication i podpisałem zwalniającą słoik z moim certyfikat programisty, jak mogę sprawdzić, czy wniosek do odpoczynku obsługa była z mojego podpisanej słoika?Sprawdź żądania HTTP z podpisanym słoiku

+13

Nie możesz. Każda osoba posiadająca podpisany słój może ją zdemontować, a zatem dowiedzieć się, jak podrobić takie wnioski. Możesz utrudnić to za pomocą statycznego lub dynamicznego zaciemniania, ale to tylko nieznacznie podnosi przeszkodę. Jeśli z drugiej strony próbujesz bronić się przed atakującymi bez dostępu do twojego słoika, ten słoik może zawierać klucz prywatny, który będzie używany do podpisywania żądań usługi odpoczynku. – mkl

+3

Jaki jest podstawowy problem, który próbujesz rozwiązać? Jeśli edytujesz swoje pytanie, aby je uwzględnić, możemy zaproponować alternatywne rozwiązanie. – merlin2011

+6

@mkl ma rację. Każda usługa publicznie dostępna i którą ktoś może zdobyć dla klienta, może zostać poddana inżynierii odwrotnej, a wraz z klientem nie ma sposobu, aby uniemożliwić komuś znalezienie klucza prywatnego lub innego mechanizmu tajnego przechowywania. Ogólnie staraj się nie martwić zbytnio o to, co * aplikacja * wysyła zapytania do Twojej usługi; martwić się o to, co wysyła * użytkownik *. Jeśli jestem zalogowany i uwierzytelniony, nie powinno to mieć znaczenia, jeśli użyję Twojego klienta lub telnetu. –

Odpowiedz

6

Nie możesz. Podpisywanie służy do sprawdzania poprawności wykonania, co oznacza, że ​​znajduje się po stronie serwera. Ale chcesz sprawdzić podpis na żądanie http/reszta po stronie klienta. Strona klienta nie ma takiego sprawdzania poprawności.

Możesz dodać coś do samej odpowiedzi i potwierdzić ją po stronie klienta, ale znowu nic nie przeszkadza, aby jakikolwiek inny serwer wysłał tę samą wartość, a więc udawał, że jest twoim serwerem.

Można również dodać pewne cechy zachowania do słoika (jak pliki cookie sesji), ale znowu nic nie uniemożliwia innym słoiki naśladować to też.