02.03
In /dev/random , Arty , Linux | Tags: /dev/random, Linux, Security
Najpierw musisz wygenerować klucz z hasłem, CSR (Certificate Signing request), podem podpisać generując cert, potem zdjąc hasło z klucza….. wait what ? WTF self-signed cert nie zapewnia i tak żadnego bezpieczeństwa (o tym później).
openssl genrsa 1024 > host.key
openssl req -new -x509 -nodes -sha1 -days 365 -key host.key >host.crt
i DONE, żadnego pieprzenia się ze zdejmowaniem kluczy, hasłami itd.
A teraz o bezpieczeństwie self-signed cert
W powszechnym mniemaniu self-signed cert ma być do testów przed wrzuceniem prawdziwego certu (right way), lub do zabezpieczenia danych gdy puszczane są przez niebezpieczne połączenia (np. kafejkowe wifi) (wrong way). Why it’s wrong ?
Pomyślmy. Gdy jesteśmy wpięci kablem do netu to raczej nikt nie podejrzy naszych danych (musiałby mieć dostęp do sieci operatora albo naszego dostawcy netu).
Gdy natomiast jesteśmy wpięci przez publiczne wifi, teoretycznie możemy być łatwo podsłuchani.
Tyle że gdy ktoś może nas podsłuchać to w większości wypadków może też przepuścić nasze dane przez co chce. A że cert jest self-signed to jest to banalne ;]. Więc nasz śmieszny cercik nie daje prawie nic (może jakiś script-kiddie nie będzie potrafił tego zrobić ale z liczbą dostępnych narzędzi obecnie to wątpię).
Proper way to do it:
- Zrób cert
- Dodaj go do przeglądarki/whatever (i rozdaj współpracownikom)
- I tym certem podpisuj swoje certy testowe – wtedy póki ktoś nie dorwie Twojego klucza publicznego powinieneś być w miarę safe – i wtedy ma sens robienie tych cyrków z generowaniem CSR ;]
Jeżeli dalej myslisz że self-signed cert = security ur damn WRONG.


6 ResponsesLeave a comment ?
Siła szyfrowania certyfikatu podpisanego przez zaufany organ, i takiego self-signed niczym się nie różni. Różnica polega na tym, że o prawdziwości danych w certyfikacie self-signed, decyduje odbiorca (jego ryzyko).
W swoim artykule piszesz bzdury.
Dane w certyfikacie self-signed nie mają znaczenia, wystarczy że ściągniesz go i wygenerujesz drugi z takimi samymi danymi. Prawda że przeglądarka wtedy pokaże że cert się zmienił ale tylko gdy już wcześniej miałes go zaakceptowanego, gdy np. logujesz się z kompa który go nie ma. Daje pewne zabezpieczenie tylko gdy juz go masz na kompie (bo wtedy przeglądarka zacznie alarmować).
Jasne, to odbiorca decyduje czy nie uwać certowi, ale często spotkałem się z przekonaniem że taki cert jest tak samo bezpieczny jak cert podpisany “bo też szyfruje”.
To jest fine jak zabezpieczasz sobie Web UI na którę bedą wchodzili tylko admini (ale wtedy zrobienie sobie mini urzędu certyfikacji nie jest bardzo skomplikowane), ale typowy user gdy zobaczy zmianę certu self signed zaakceptuje bez czytania.
Jeżeli dalej myślisz że certy self-signed są bezpieczne, jesteś naiwny ;]
Jeśli myślisz, ze szaremu userowi któremu zależy na obejrzeniu witryny nie jest wszystko jedno jaki certyfikat dostaje to jesteś w błędzie.
W 99% przypadków jeśli dostaje podpisany – to nawet nie wie, że idzie przez HTTPS, jesli dostaje selfsigned – klika “zaakceptuj=> TAK ROZUMIEM ZAGROŻENIE => OK => NA PEWNO => TAK CHCE ZOBACZYC TE STRONE”. I dla wielu nie ma znaczenia – do czego się dostają. Userzy działają wg zasady “cel uświęca środki” tj. chcę zrobić przelew to zaloguje się do banku, a to jaki cert jest po drodze – to zainteresuje tylko bardziej świadomych userów.
Kiedyś jak skopałem sobie squida, robiłem nieświadomie atak Man in the Middle, ktoś zwrócił mi uwagę dopiero po… dwóch tygodniach, a userów w sieci było z 60.
To już jest inny problem, mianowicie nieśiwadomość userów, sporo ludzi gdy bardzo chce się gdzieś dostać po prostu klika “dalej” bez czytania. Wtedy żaden cert nie pomoże ;]
imho – każdy cert jest lepszy niż jego brak (gdyż zabezpiecza przed sniffowaniem), a to czy ktoś przeprowadzi atak M-in-M to tak naprawdę zależy tylko od jego chęci a nie od tego jakiego certu użyjemy, gdyż na zwykłego usera nie ma co liczyc.
Racja. Ale już admin który ma pare serwerów, phpmyadmin tu, inny webadmin tam, jeszcze gdzie indziej nagios itd. może sobie łatwo wygenerować “prywatny” cert, zaimportować go do przeglądarki i podpisywać nim inne certy, wtedy zapewnia on podobny poziom bezpieczeństwa jak “prawdziwy” cert (z tą niedogodnością że trzeba go zaimportowac do przeglądarki).
Piszę ku świadomości adminów, jak to mówią “user will always choose dancing bears over security” ;]