[HTTPS][C++] Szyfrowanie połączenia aplikacji c++ z domeną dobreprogramy.pl


(wojtek20124) #1

Przewaliłem przynajmniej z dwieście stron (200!) i nic sensownego nie znalazłem. Chcę za pomocą socketów (lub curl) łączyć się z witryną wymagającą szyfrowania SSL/TSL. Założyłem serwer TS i chcę sobię zrobić aplikację, która będzie logowała się do hostingu i pobierała dane w trybie live (logi serwa, itd.). Chciałbym zaimplementować także modół powiadamiania o odpowiedziach z postów z tego forum.


(Fizyda) #2

Pierwszy wynik z google: http://stackoverflow.com/questions/7024433/sending-http-and-https-requests-from-c-c

Jeśli chcesz zachować jakiś wyższy poziom abstrakcji to QT powinno mieć jakąś kasę do komunikacji po http z ssl, a jak nie to użyj do nawiązania połączenia biblioteki openssl lub jakiegoś innego odpowiednika. Tylko w drugim przypadku sam musisz stworzyć nagłówek z żądaniem http czyli musisz znać dość dobrze protokół http.


(wojtek20124) #3

Wszędzie piszą, że do konfiguracji OpenSSL jest potrzebny … klucz SA! Skąd mam to wziąć? Przecież żaden urząd certyfikacji nie publikuje własnych kluczy, bo by każdy zrobił sobie klucz do domeny i nielegalne contenty byłyby zatajone. Wygenerować samemu nie warto, bo w tym przypadku przeglądarka (w przypadku serwera) pojazuje ostrzeżenie o nieautoryzowanym certyfikacie. Zamierzam skompilować curl z OpenSSL i coś pokombinować. Czy ten klucz jest potrzebny? Logicznie - chyba tak


(Fizyda) #4

Do nawiązania połączenia nie potrzebujesz klucza. Nie stawiasz serwera tylko klienta, klient korzysta z klucza publicznego serwera oraz certyfikatu firmy która go wystawiła do weryfikacji czy serwer jest faktycznie zaufanym serwerem czy może podstawionym przez osoby trzecie.

 

Znów pierwszy link z google i mam odpowiedź wraz z przykładem - http://stackoverflow.com/questions/4357109/openssl-establish-connection-between-client-and-server


(wojtek20124) #5

Skąd taki certyfikat wytrzasnąć? Jest potrzebny do aplikacji wykorzystującej OpenSSL. Chodzi o certyfikat, który ma być załadowany - “Trust certificate store” (chodzi prawdopodobnie o klienta)

EDIT: Sory, nie ma tematu. Domyślny taki certyfikat jest w kodzie źródłowym OpenSSL.


(Fizyda) #6

Certyfikat potrzebujesz mieć na serwerze, z tego co piszesz chcesz się łączyć z serwerem czyli musisz pobrać certyfikat sprawdzić go u wystawcy certyfikatu wynegocjować klucze SHA i szyfrować oraz deszyfrować dane wychodzące i przychodzące przy użyciu odpowiednich kluczy podczas połączenia.

Żeby tego wszystkiego nie robić używasz biblioteki która umie nawiązać bezpieczne połączenie takiej jak np openssl, na twojej głowie zostaje jedynie sprawdzić certyfikat, albo to olać i zawsze uznawać że łączysz się z prawdziwym serwerem. Możesz też użyć jakiejś innej biblioteki która ostatni krok zrobi też za Ciebie i one i tak najczęściej używają biblioteki openssl - http://stackoverflow.com/questions/9802024/good-c-library-for-https-connection-certificate-is-signed-by-a-certificate-a

 

Poza tym gdybyś chciał używać certyfikatu wygenerowanego przez openssl na serwerze to będziesz miał ciągle problemy i łącząc się z serwerem który przedstawia się przy pomocy takiego certyfikatu otrzymasz ostrzeżenie że certyfikat jest niepodpisany, a tym samym niezaufany.