Klone i SSL

Spis treści

 

Dzisiaj nie ma aplikacji, która nie korzystałaby z SSL przy przesyłaniu danych do/z klienta. Klone pozwala na łatwą konfigurację SSL.

 

A. Klone i CyaSSL

CyaSSL został stworzony przez WolfSSL. Jest to mała, przenośna, wbudowana biblioteka programistyczna SSL ukierunkowana na użycie w systemach wbudowanych. Posiada implementacje SSL napisane w języku C, zawiera biblioteki kliencie SSL oraz implementacje serwera SSL dla wsparcia wielu API. CyaSSL zawiera także zgodny z interfejsem OpenSSL z najczęściej używanymi funkcjami OpenSSL.
Obecnie CyaSSL jest używany w projektach otwartych i zamkniętych (licencja kosztuje ok. 5 000 dolarów za użycie w komercyjnym projekcie). 

Aby zintegrować KLone i CyaSSL:
1. Pobieramy CyaSSL albo ze strony http://www.yassl.com/yaSSL/Home.html (gdzie trzeba koniecznie podać kilka danych) albo z https://github.com/cyassl/cyassl. Ja wybieram tą drugą opcję.
2. Przechodzimy do katalogu gdzie ściągniemy cyassl, może być to /opt

3. Ściągamy repozytorium cyassl, a następnie wchodzimy do katalogu cyassl

4. Jeżeli chcemy zainstalować cyassl w domyślnej lokalizacji (/usr/local/cyassl) i nie dodawać żadnych opcji wystarczy w konsoli podać polecenia:

RADA: W przyszłości lepiej podać lokalizację zainstalowania cyassl przez –prefix w poleceniu z ./configure oraz –enable-opensslextra, jeżeli SSL ma działać na jednym wątku wystarczy podać: –enable-singlethreaded. Więcej przydatnych opcji można uzyskać poprzez wpisanie ./configure –help przed kompilacją

CyaSSL został skompilowany, następny krok to skonfigurowanie KLone do współdziałania z CyaSSL.

5. W katalogu Klone modyfikujemy plik Makefile, dodając następujące linie:

gdzie:

KLONE_CONF_ARGS – podaje dodatkowe argumenty do skompilowania Klone – tutaj podajemy ścieżkę do biblioteki CyaSSL ( tutaj zainstalowana w /usr/local/cyassl ) oraz nakazujemy włączenie CyaSSL w Klone.
export LD_LIBRARY_PATH – zapisujemy zmienną globalną LD_LIBRARY_PATH wraz ze ścieżką do folderu lib w katalogu CyaSSL

6. Kolejną rzeczą jest dodanie nowej sekcji do webapp/etc/kloned.conf
a) po "server_list app_http" należy dodać: app_https
b) po sekcji app_http należy dodać:

gdzie:
addr – adres pod którym będzie nasłuchiwać serwer, tutaj nasłuchuje pod dowolnym adresem IP oraz portem 4443, używa IPv4
dir_root – folder gdzie będą trzymane pliki dla tej sekcji. Jest to dokładnie folder /opt/klone/webapp/www ( ogólniej: katalog główny klone/webapp/www )
ca_file – położenie certyfikatu urzędu certyfikacji. Tutaj w folderze /etc (dokładniej w katalogu głównym klone/webapp/etc)
cert_file – jak wyżej tylko że wskazujemy gdzie jest plik certyfikatu serwera

7. Teraz trzeba wygenerować certyfikaty: CA i serwera. Możemy też użyć na potrzeby przykładu jakieś przykładowe certyfikaty PEM, które są już dostępne w webapp/etc 

Aby wygenerować nowe certyfikaty najlepiej w katalogu głównym klone z moimi przykładami wejść do katalogu tools i uruchomić generate.sh. Inaczej będziemy musieli wykorzystać własny plik openssl.cnf i stworzyć kilka folderów – idąc tą drogą są poradniki w Internecie. Należy pamiętać aby w każdym pliku .pem był dołączony też jego przypisany klucz prywatny.
My wracamy do mojego skryptu, który w bardzo szybki sposób wygeneruje certyfikat CA, serwera, doda klucze do certyfikatów i przekopiuje certyfikaty do webapp/etc

Podajemy wymyślone przez siebie hasło o min. długości 5 znaków i wciskamy Enter.

Przy certyfikatach będą ważne pola:
– Country Name – kod kraju, dla Polski PL
– Common Name – dla CA podajemy nazwę, swoje imię i nazwisko, itp. poprostu kto wystawia certyfikat, dla serwera jest to nazwa serwera w postaci domeny lub adresu IP – dla naszych celów podajemy 127.0.0.1

Inne pola można pominąć – zostaną podane domyślne wartości z nawiasów lub można dać spację i Entera (wartość pusta)

Następnie cofamy się do katalogu klone

Odpowiednie certyfikaty są na swoich miejscach.

8. Uruchamianie klone. Aby uruchomić klone można przekompilować środowisko poleceniem make, które w zasadzie tylko przekopiuje plik z webapp/etc/kloned.conf do klone-3.1.0/webapp/etc/kloned.conf. Najlepiej więc wymusić na klone skorzystanie z naszego pliku kloned.conf

9. Sprawdzamy, czy SSL działa. W termianlu wydajemy polecenie:

gdzie korzystając z zainstalowanego openssl łączymy się ze swoim komputerem na porcie 4443. Powinniśmy dostać w odpowiedzi informacje o certyfikacie. Jeżeli jest inaczej, jest coś nie tak albo z certyfikatami, ze ścieżkami do certyfikatów, itp. Szczegóły znajdziemy w dzienniku zdarzeń systemu.

10. W przeglądarce wpisujemy adres: https://127.0.0.1:4443

i akceptujemy informację, że strona nie została podpisana przez autoryzowany urząd certyfikacji.  

Właśnie w taki sposób połączyliśmy się przez SSL z naszym serwerem.

 

B. KLone i OpenSSL 

OpenSSL jest najczęściej używanym pakietem przez aplikacje internetowe przy szyfrowaniu danych do/z klienta. 
Aby zintegrować KLone i OpenSSL:
1. Instalujemy w systemie libssl-dev – nagłówki openssl lub pobieramy paczkę ze strony OpenSSL (https://www.openssl.org/source/) ze źródłami i ją kompilujemy. W dzień pisania tego artykułu ostatnia wersja OpenSSL to 1.0.1i. Pobieram ze strony ostatnią wersją oznaczoną jako LATEST. 

2. Rozpakowuje archiwum i wchodzę do folderu ze źródłami:

3. Jeżeli będziemy kompilować dla konkretnej platformy lub/z dodatkowymi poleceniami wybieramy polecenie ./Configure. Tutaj przydatna może być opcja –prefix określająca gdzie ma być zainstalowany openssl.
Jeżeli chcemy zostawić domyślne opcje, wybieramy ./config

4. Wystarczy nam tylko cierpliwie czekać aż wszystko się skompiluje

OpenSSL zostanie domyślnie zainstalowany w /usr/local/ssl/
Info! Kompilacja jest może potrwać ok. 10 minut.

5. W katalogu Klone modyfikujemy plik Makefile, dodając następujące linie:

gdzie:

KLONE_CONF_ARGS – podaje dodatkowe argumenty do skompilowania Klone – tutaj podajemy ścieżkę do biblioteki OpenSSL ( tutaj zainstalowany w /usr/local/ssl/lib ).

6. Dalsze punkty są zgodne z sekcją A. punktami 6-10.