O modalitate foarte simpla de a crea o sesiune client server este folosirea utilitarului nc(netcat).
Intr-o consola, porniti nc, cu rol de server, sa asculte pe portul 12345:
$ nc -l 12345
Apoi, dintr-o alta consola, folositi nc cu rol de client, pentru a va conecta local pe portul 12345:
$ nc localhost 12345
Observati ca textul introdus in client apare pe server, si invers.
Porniti wireshark sau tcpdump si observati conversatia TCP pe portul 12345. Observati ca datele sunt transmise in clar, necriptate.
Opriti apoi cele doua procese nc.
Pentru a crea o sesiune client/server, dar de data aceasta criptata, putem folosi utilitarul openssl:
openssl s_server va avea rol de serveropenssl s_client va avea rol de client
Incercati sa porniti openssl s_server pe portul 12345:
-
$ sudo openssl s_server -accept 12345
Error opening server certificate private key file server.pem
140455789008536:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('server.pem','r')
140455789008536:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load server certificate private key file
Observati ca openssl s_server nu poate porni, deoarece are nevoie de un certificat de server si de o cheie privata.
Descarcati:
Apoi, porniti din nou openssl s_server, specificand parametrii -cert si -key:
$ openssl s_server -cert server.ixlabs.crt -key server.ixlabs.key -accept 12345 Using default temp DH parameters ACCEPT
Observati ca serverul a pornit cu succes si asteapta conexiuni.
Dintr-o alta console, folositi openssl s_client pentru a va conecta local pe portul 12345:
$ openssl s_client -connect localhost:12345 CONNECTED(00000003) depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server verify error:num=21:unable to verify the first certificate verify return:1 [...]
Observati ca:
Pentru a putea valida certificatul serverului, avem nevoie de certificatul CA-ului care l-a semnat.
Descarcati certificatul CA-ului ca.crt de aici
Apoi, lansati din nou openssl s_client, dar cu parametru -CAfile:
$ openssl s_client -CAfile ca.crt -connect localhost:12345
CONNECTED(00000003)
depth=1 C = RO, O = Ixia, OU = Development, CN = Ixia-CA
verify return:1
depth=0 C = RO, ST = Some-State, O = Ixia, OU = Development, CN = server
verify return:1
---
Certificate chain
0 s:/C=RO/ST=Some-State/O=Ixia/OU=Development/CN=server
i:/C=RO/O=Ixia/OU=Development/CN=Ixia-CA
---
[...]
Verify return code: 0 (ok)
Observati ca de data aceasta certificatul este validat.
Similar cu nc, textul introdus in client apare pe server, si invers.
Porniti wireshark sau tcpdump si observati conversatia TCP pe portul 12345. Observati ca datele sunt criptate in cadrul unei sesiuni SSL.
Folositi certificatul server.ixlabs pentru a realiza o configurare a unui virtual host pe serverul Apache local (instalați-l dacă nu este instalat) cu suport HTTPS.
Pașii pe care trebuie să îi urmați sunt:
server.ixlabsserver.ixlabs cu suport HTTPS.a2ensite.a2enmod ssl
/etc/ssl/certs/ și a cheii private în /etc/ssl/private/.server.ixlabs cu suport HTTPS. Vedeți liniile de configurare de aici./etc/hosts pentru numele server cu adresa locală (poate chiar adresa de loopback) ca să aveți rezolvat numele de domeniu.
server si nu cu server.ixlabs pentru ca browserul se asteapta ca domeniul din URL sa faca match cu CN-ul din certificat, iar acesta este server.
https://server pentru a valida configurarea corectă a serviciului.Pe sistemul local instalați pachetul Courier IMAP
sudo apt-get install courier-imap courier-imap-ssl
Configurați pentru IMAPS certificatul server.ixlabs și apoi folosiți un client de e-mail pentru vă conecta la server prin IMAPS.
Folosiți și openssl s_client pentru a verifica folosirea corespunzătoare a certificatului pe server.