OpenSSL w linii poleceń
Napisał: Patryk Krawaczyński
14/06/2012 w Bezpieczeństwo Brak komentarzy. (artykuł nr 356, ilość słów: 812)
A
plikcja openssl, która jest dostarczana z biblioteką OpenSSL umożliwia wykorzystanie szerokiego wachlarzu kryptograficznych operacji. Staje się ona szczególnie przydatna w przypadku wykonywania pojedynczych zadań związanych z protokołem SSL. Program ten posiada bardzo obszerną dokumentację – dlatego poniżej postaram się przedstawić kilka praktycznych opcji i zastosowań tego programu. Zakładam, że w systemie jest już zainstalowany binarny pakiet tego oprogramowania i znajduje się w poprawnej ścieżce systemowej ($PATH
).
1. Sprawdzenie wersji OpenSSL:
openssl version
2. Lista dostępnych opcji i parametrów:
openssl help
3. Lista dostępnych parametrów dla sub-poleceń:
openssl dgst -h
4. Lista dostępnych szyfrów kryptograficznych:
openssl ciphers -v
5. Lista dostępnych szyfrów kryptograficznych TLSv1:
openssl ciphers -v -tls1
6. Lista dostępnych szyfrów obsługujących klucze większe niż 128-bitów:
openssl ciphers -v 'HIGH'
7. Lista dostępnych szyfrów obsługujących algorytm AES:
openssl ciphers -v 'AES+HIGH'
8. Benchmark systemu:
openssl speed
9. Benchmark wybranego algorytmu:
openssl speed rsa
10. Benchmark z wykorzystaniem wszystkich rdzeni systemu:
openssl speed rsa -multi 2
11. Benchmark zdalnego połączenia SSL:
openssl s_time -connect zdalny.host:443
12. Benchmark zdalnego połączenia SSL – dla nowych sesji:
openssl s_time -connect zdalny.host:443 -www /bezpieczne_logowanie.html -new
13. Benchmark zdalnego połączenia SSL – dla nowych sesji przez SSLv3:
openssl s_time -connect zdalny.host:443 -www /bezpieczne_logowanie.html -new -ssl3 \ -cipher HIGH
14. Emulacja serwera WWW z SSL plus jego przetestowanie z drugiego hosta:
openssl s_server -cert darkstar.pem -www openssl s_time -connect darkstar.net:4433 -www / -new -ssl3
15. Ściągnięcie zdalnego certyfikatu za pomocą skryptu:
#!/bin/bash # uzycie: cert.sh [zdalny_host] [port] REMHOST=$1 REMPORT=${2:-443} echo |\ openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |\ sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
16. Uzyskanie informacji o certyfikacie:
openssl x509 -text -in darkstar.pem openssl x509 -noout -in darkstar.pem -issuer openssl x509 -noout -in darkstar.pem -subject openssl x509 -noout -in darkstar.pem -dates openssl x509 -noout -in darkstar.pem -issuer -subject -dates openssl x509 -noout -in darkstar.pem -hash openssl x509 -noout -in darkstar.pem -fingerprint
17. Weryfikacja certyfikatu:
openssl verify darkstar.pem
18. Testowanie serwera SMTP z TLS/SSL:
openssl s_client -connect darkstar.net:25 -starttls smtp openssl s_client -connect darkstar.net:465
19. Wykonanie funkcji skrótu MD5 na pliku:
openssl dgst -md5 plik.tar.gz
20. Wykonanie funkcji skrótu SHA1 na pliku:
openssl dgst -sha1 plik.tar.gz
21. Podpisanie swoim kluczem prywatnym pliku:
openssl dgst -sha1 -sign darkstar_prv.pem -out plik.tar.gz.sha1 plik.tar.gz
22. Weryfikacja podpisanego pliku kluczem publicznym:
openssl dgst -sha1 -verify darkstar_pub.pem -signature plik.tar.gz.sha1 plik.tar.gz
23. Zakodowanie pliku base64:
openssl enc -base64 -in plik.txt
24. Rozkodowanie pliku zakodowanego base64:
openssl enc -base64 -in plik.txt -out rozkodowany.txt
25. Zakodowanie ciągu znaków base64:
echo -n "Zakoduj mnie" | openssl enc -base64
26. Rozkodowanie ciągu znaków zakodowanego base64:
echo "WmFrb2R1aiBtbmllXCEK" | openssl enc -base64 -d
27. Wygenerowanie klucza RSA (standardowo 512-bitów):
openssl genrsa
28. Wygenerowanie klucza RSA – 1024-bitów:
openssl genrsa -out klucz.pem 1024
29. Wygenerowanie klucza RSA – 1024-bitów z hasłem:
openssl genrsa -des3 -out klucz.pem 1024
30. Usunięcie hasła z klucza RSA:
openssl rsa -in klucz.pem -out nowy_klucz.pem
31. Usunięcie hasła z klucza zawartym w pliku z certyfikatem:
openssl rsa -in certyfikat.pem -out nowy_certyfikat.pem openssl x509 -in certyfikat.pem >> nowy_certyfikat.pem
32. Wygenerowanie klucza DSA – 1024-bitów:
openssl dsaparam -noout -out klucz.pem -genkey 1024
33. Wygenerowanie kilku kluczy DSA na podstawie wspólnych parametrów:
openssl dsaparam -out parametry_dsa.pem 1024 openssl gendsa -out klucz1.pem parametry_dsa.pem openssl gendsa -out klucz2.pem parametry_dsa.pem
34. Wygenerowanie klucza krzywych eliptycznych:
openssl ecparam -out klucz.pem -name prime256v1 -genkey
35. Wygenerowanie listy dostępnych krzywych:
openssl ecparam -list_curves
36. Wygenerowanie hash’a hasła za pomocą funkcji crypt:
openssl passwd Tajne.Haslo
37. Wygenerowanie hash’a hasła za pomocą funkcji crypt z ciągiem zaburzającym:
openssl passwd -salt Tajny.Ciag Tajne.Haslo
38. Wygenerowanie hash’a hasła za pomocą skrótu MD5:
openssl passwd -1 Tajne.Haslo
39. Wygenerowanie hash’a hasła za pomocą skrótu MD5 z ciągiem zaburzającym:
openssl passwd -1 -salt xH5.ddjE Tajne.Haslo
40. Testowanie liczb pierwszych:
openssl prime 20988936657440586486151264256610222593863921
41. Wygenerowanie kilku liczb pierwszych:
#!/bin/bash OD=10000 DO=10100 for N in $(seq $OD $DO); do openssl prime $N | awk '/is prime/ {print "ibase=16;"$1}' | bc done
42. Generowanie losowych danych zakodowanych base64:
openssl rand -base64 128
43. Generowanie losowych danych i ich zapis w pliku:
openssl rand -out random.bin 1024
44. Generowanie losowych danych “siejąc” openssl układem plików cache przeglądarki Firefox:
cd $(find ~/.mozilla/firefox -type d -name Cache) openssl rand -rand $(find . -type f -printf '%f:') -base64 1024
45. Generowanie losowych danych “siejąc” openssl pseudolosowym urządzeniem urandom:
head -c 32 /dev/urandom | openssl enc -base64
46. Szyfrowanie wiadomości e-mail publicznym certyfikatem odbiorcy:
openssl smime jej_certyfikat.pem \ -encrypt -des3 -in wiadomosc.txt \ -from 'NFsec <ja@mojadres.com>' \ -to 'Ona' <ona@jejadres.com>' \ -subject 'Moja zaszyfrowana wiadomosc Twoim certyfikatem'
47. Podpisanie wiadomości e-mail własnym certyfikatem:
openssl smime -sign -signer moj_certyfikat.pem -in wiadomosc.txt \ -from 'NFsec <ja@mojadres.com>' \ -to 'Ona' <ona@jejadres.com>' \ -subject 'Moja podpisana wiadomosc'
00. Interpretacja kodów błędów powiązanych z OpenSSL?
openssl errstr [kod błędu]
Więcej informacji: OpenSSL Command-Line HOWTO, man openssl