Grupy dyskusyjne   »   pl.biznes.banki   »   SSL - ktoś będzie tak miły i przełoĹźy na chłopski rozum?

SSL - ktoś będzie tak miły i przełoży na chłopski rozum?

Data: 2016-03-29 22:32:12
Autor: janek z pola
SSL - ktoś będzie tak miły i przełoży na chłopski rozum?
Piotr Gałka wrote:

Zażarta dyskusja pod tematem "Ciekawe orzeczenie - bank ma oddać kasę" o
bezpieczeństwie transakcji skłoniła mnie do zapytania o prawdopodobnie coś
podstawowego.
Przyznam, że liczę na odpowiedź od Sebastiana.

Chciałbym ogarnąć ogólnie SSL. Jak szukam to są opisy albo za proste - nie
dające mi odpowiedzi na moje wątpliwości, albo tak zawikłane, że
odstraszają od próby przebrnięcia (przy notorycznym braku czasu na to).

Ja to rozumiem tak. Chcę (mój komputer chce) ustanowić sesję z bankiem.

OK.

Bank przysyła certyfikat który zawiera: Dane banku i jego klucz publiczny,
wszystko podpisane kluczem prywatnym przez jakąś organizację. Zawiera
jeszcze coś istotnego?

Teraz ogólnie się spotyka często łańcuch certyfikatów - tzn. masz certyfikat danego serwera (jego klucz publiczny) oraz klucze publiczne centrów certfikacji, które podpisały ten klucz publiczny.

Możesz sobie taki program openssl pobrać i czarnym okienku zrobić polecenie:

openssl s_client -connect mbank.pl:443

Dostaniesz tenże łańcuch:

Certificate chain
 0 s:/1.3.6.1.4.1.311.60.2.1.3=PL/businessCategory=Private Organization/serialNumber=0000025237/C=PL/postalCode=00-950/ST=mazowieckie/L=Warszawa/street=Senatorska 18/O=mBank S.A./OU=mBank/CN=www.mbank.pl
   i:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G3
 1 s:/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 EV SSL CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5

W outpucie będziesz miał też certyfikat tego serwera - zapisz sobie do jakiegoś pliku - np. ja sobie zapisałem do mbank.crt, potem takie polecenie:

openssl x509 -in mbank.crt -noout -text

Tam dostaniesz pełne dane certyfikatu:
* CN - na jaką domenę jest ważny - oraz ogólnie nazwa tego certyfikatu
* SAN - na jakie ewentualnie dodatkowe domeny jest ważny
* Serial - numer seryjny certyfikatu w ramach danego klucza podpisującego
* Issuer - kto podpisał - to jest ciąg znaków - nazwa klucza podpisującego
* Validity - nie ważny przed data, nie ważny po dacie (dwie daty)
* skrót klucza podpisującego - wiadomo kilka klucze może mieć tą samą nazwę
* Public-Key - klucz publiczny będący esencją tego certyfikatu
* Signature - podpis klucza podpisującego - czyli to, co uwiarygadnia cert
* dodatkowo info o adresie listy odwołanych certyfikatów i ew. inne dane

Chcę zweryfikować podpis - potrzebuję klucza publicznego tej organizacji.

Ogólnie tak :D

Dostaje od niej certyfikat, który zawiera jej dane i jej klucz publiczny,
wszystko podpisane przez kogoś innego jego kluczem prywatnym.
Aby to zweryfikować potrzebuję klucza publicznego tego kogoś innego. itd.

Dostajesz w zasadzie taką samą strukturę jak powyżej, tylko że jako CN nie jest podana już domena banku, tylko w cercie podpisującym cert banku jako CN jest podane to, co w cercie banku jest podane w polu "Issuer". Dodatkowo odcisk klucz publicznego (skrót) musi być taki sam - czyli to co w cercie banku jest podane jako "skrót klucza podpisującego" to w cercie podpisującym musi być rzeczywiście skrótem jego klucza publicznego.


Kiedy i jak ten proces się kończy?

Idziesz tą "drabinką" tak wysoko aż trafisz na taki certyfikat (dokładnie o takiej samej strukturze jak powyżej), któremu bezwarunkowo ufasz. Tak jak ktoś już tutaj napisał, te certy - znane jako RootCA - są zwykle zaszyte w sofcie komputera.

Z tym są związane różne śmieszne historie: np. Lenovo dodawało do wszystkich sprzedawanych kompów jakieś swoje RootCA jako zaufane i serwowało reklamy po https w przeglądarce, deszyfrując pod spodem ruch https. Czyli po naszemu: robiło dokładnie to, co by robił złodziej bankowy, tylko że oni wstrzykiwali tam reklamy. Złodziej by wstrzykiwał jakiś komunikat typu "teraz podaj nam numer telefonu".

Jak trafisz na zaufany cert w tym łańcuszku, to po pierwsze zwykle to będzie RootCA jakiegoś centrum certyfikacji, a po drugie to będzie jednocześnie prawie koniec drogi. Dodatkowo jest sprawdzana lista odwołanych certów - czyli CRL (trudno jasno ocenić czy nie można się pod to podszyć). Natomiast współczesne przeglądarki mają w sobie zaszyte skróty kluczy publicznych tych najbardziej popularnych witryn. Czyli nawet jak ktoś wstrzyknie Tobie trefne RootCA, to i tak przeglądarka się powinna zorientować w przypadku niektórych stron, że jest coś nie tak.

Dodam tylko, że RootCA zwykle jest podpisane samo przez siebie, ale w sumie te czasy już minęły. Teraz jest tak, że RootCA jakie masz w systemie podane to jest tak naprawdę jakiś certyfikat podpisany jeszcze przez jakiś inny cert w danej firmie wystawcy - tzn. taki np. GeoTrust ma jakiś swój główny klucz prywatny, podpisuje tym swoje CA i odciski tego CA przesyła do firm, które produkują soft, żeby wrzuciły do przeglądarek.


Opis na Wiki "Zasada działania SSL" jest tak napisany, jakby problem
weryfikacji dostarczonego klucza publicznego nie istniał.
Czego nie wiem?

Któremuś kluczowi publicznemu ufasz - tzn. w zasadzie któremuś certyfikatowi ufasz.


Jak już załóżmy mam klucz publiczny banku i wiem, że nie jest to jakaś
podróba to dalej z opisu na Wiki wynika, że do ustalenia klucza sesji
brane są dwie liczby losowe przesłane wcześniej przez mój komputer i
serwer banku oraz jakiś ustalony przez mój komputer klucz, który jest
podpisywany kluczem publicznym banku i wysyłany do banku.

Tak.

Wcześniej przesłane liczby losowe - a więc jawne (bo przed ustaleniem
sesji). Czyli jedyną tajną rzeczą na tym etapie jest ten wylosowany przez
komputer klucz.

Kluczem sesji jest sekretna liczba. Powiedzmy wartość. Taka, żeby było ją trudno odgadnąć. Jak już wiesz, że ufasz danemu certowi, to wyciągasz z niego klucz publiczny i tą sekretną liczbę szyfrujesz tym kluczem. Serwer banku sobie odszyfrowuje i od tego momentu macie współdzieloną sekretną liczbę. Ona jest używana do symetrycznego szyfrowania (czyli szyfrowanie oraz deszyfrowanie za pomocą tego samego klucza)

Wiadomo, że generator jest wystarczająco dobry?

Nie wiadomo :D

P.G.

--
Wysłane z pola.

Data: 2016-03-30 10:43:44
Autor: Piotr Gałka
SSL - ktoś będzie tak miły i przełoży na chłopski rozum?

Użytkownik "janek z pola" <adres@email.pl> napisał w wiadomości news:ndeoob$fsh$1gioia.aioe.org...

Wiadomo, że generator jest wystarczająco dobry?

Nie wiadomo :D

 :(

Wysłane z pola.

Dzięki.
Druknąłem sobie i wrzuciłem w miejsce, co mi się (obecnie) wydaje, że jak bym kiedyś szukał to znajdę :).
P.G.

Data: 2016-04-03 19:25:16
Autor: Borys Pogoreło
SSL - ktoś będzie tak miły i przełoży na chłopski rozum?
Dnia Tue, 29 Mar 2016 22:32:12 +0200, janek z pola napisał(a):

W outpucie będziesz miał też certyfikat tego serwera - zapisz sobie do jakiegoś pliku - np. ja sobie zapisałem do mbank.crt, potem takie polecenie:
openssl x509 -in mbank.crt -noout -text

Można też kliknąć w kłódkę na pasku adresu przeglądarki i wyświetlić
szczegóły certyfikatu, zamiast grepować kernele ;)

--
Borys Pogoreło
borys(#)leszno,edu,pl

SSL - ktoś będzie tak miły i przełoży na chłopski rozum?

Nowy film z video.banzaj.pl więcej »
Redmi 9A - recenzja budżetowego smartfona