2012-02-24 6 views

Odpowiedz

7

Jeśli to tylko klient i serwer, można (i należy) używać SSL bez konieczności zakupu czegokolwiek. Kontrolujesz serwer i klienta, więc każdy powinien ufać tylko jednemu certyfikatowi, który należy do drugiego i nie potrzebujesz w tym celu urzędów certyfikacji.

Oto podejście wysokiego poziomu. Utwórz samopodpisany certyfikat SSL serwera i zainstaluj go na swoim serwerze sieciowym. Możesz użyć keytool dołączonego do zestawu SDK systemu Android w tym celu. Następnie utwórz klienta z podpisem własnym i zainstaluj go w aplikacji w niestandardowym magazynie kluczy dołączonym do aplikacji jako zasobu (keytool również to wygeneruje). Skonfiguruj serwer tak, aby wymagał uwierzytelniania SSL po stronie klienta i akceptuj tylko wygenerowany certyfikat klienta. Skonfiguruj klienta tak, aby korzystał z tego certyfikatu po stronie klienta w celu identyfikacji i zaakceptuj tylko jeden certyfikat po stronie serwera zainstalowany na serwerze dla tej części.

Krok po kroku jest o wiele dłuższą odpowiedzią, niż jest to tutaj uzasadnione. Proponuję robić to etapami, ponieważ w sieci dostępne są zasoby dotyczące sposobu radzenia sobie z samopodpisanym certyfikatem SSL w systemie Android, zarówno po stronie serwera, jak i klienta. W książce "Application Security for the Android Platform" opublikowanej przez O'Reilly'a znajduje się także pełny przegląd.


Będziesz normalnie przechowywać że świadectwo/prywatnego klucza w magazynie kluczy z kluczy sometype (a jeśli używasz Android) i kluczy będą szyfrowane. Szyfrowanie jest oparte na haśle, więc musisz albo (1) przechowywać to hasło w swoim kliencie, albo (2) zapytać użytkownika o hasło podczas uruchamiania aplikacji klienckiej. To, co musisz zrobić, zależy od Twojego zastosowania. Jeśli (2) jest akceptowalne, chroniłeś swoje referencje przed inżynierią wsteczną, ponieważ będzie ona zaszyfrowana, a hasło nie będzie przechowywane nigdzie (ale użytkownik będzie musiał wpisać to za każdym razem). Jeśli to zrobisz (1), wtedy ktoś będzie mógł wykonać inżynierię wsteczną, uzyskać hasło, pobrać magazyn kluczy, odszyfrować klucz prywatny i certyfikat oraz utworzyć kolejnego klienta, który będzie mógł połączyć się z serwerem.

Nic nie możesz zrobić, aby temu zapobiec; możesz sprawić, że inżynieria odwrotna będzie ciężej (przez zaciemnianie, itp.), ale nie możesz uniemożliwić. Musisz określić, jakie ryzyko próbujesz złagodzić za pomocą tych metod i ile pracy warto wykonać, aby je złagodzić.

+0

Czy ktoś może ukraść ten certyfikat z aplikacji i użyć go w fałszywej aplikacji? – pyeleven

+0

Tak. Zobacz poprawioną odpowiedź powyżej. – jeffsix

+0

To wystarczająca informacja, aby podjąć decyzję, dziękuję! Chciałbym zrozumieć, w jaki sposób certyfikat aplikacji Android odnosi się do tego wszystkiego, czy możesz wskazać mi właściwy kierunek? Czy certyfikat aplikacji może być używany jako certyfikat ssl po stronie klienta? – pyeleven

1

Jeśli jesteś absolutnie pewien, że to serwis internetowy będą musiały być dostępne tylko przez autoryzowanych aplikacji/urządzeń, iść z certyfikatów po stronie klienta SSL i ograniczyć dostęp na serwerze tylko do klientów z autoryzowanymi certyfikatami. Ma to dodatkową zaletę polegającą na zmuszaniu SSL przez cały czas, więc nie lubisz sekretów auth na otwartym kanale. Oto krótki przewodnik dla Apache, ale można użyć też nginx:

http://it.toolbox.com/blogs/securitymonkey/howto-securing-a-website-with-client-ssl-certificates-11500

+0

Czy ten certyfikat może zostać skopiowany przez inną aplikację? Czy ta aplikacja będzie mogła korzystać z usługi? – pyeleven

Powiązane problemy