Bagaimana saya bisa mengambil daftar cipher SSL / TLS suites yang ditawarkan situs web tertentu?
Saya sudah mencoba openssl, tetapi jika Anda memeriksa hasilnya:
$ echo -n | openssl s_client -connect www.google.com:443
CONNECTED(00000003)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN
gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L
05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5
u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6
z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
---
No client certificate CA names sent
---
SSL handshake has read 1777 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: 748E2B5FEFF9EA065DA2F04A06FBF456502F3E64DF1B4FF054F54817C473270C
Session-ID-ctx:
Master-Key: C4284AE7D76421F782A822B3780FA9677A726A25E1258160CA30D346D65C5F4049DA3D10A41F3FA4816DD9606197FAE5
Key-Arg : None
Start Time: 1266259321
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
itu hanya menunjukkan bahwa cipher suite adalah sesuatu dengan AES256-SHA. Aku tahu aku bisa menerobos keluar dari percakapan hex hex, tapi aku berharap untuk sesuatu yang sedikit lebih elegan.
Saya lebih suka melakukan ini di Linux, tetapi Windows (atau lainnya) akan baik-baik saja. Pertanyaan ini dimotivasi oleh pengujian keamanan yang saya lakukan untuk PCI dan pengujian penetrasi umum.
Memperbarui:
GregS menunjukkan di bawah ini bahwa server SSL mengambil dari cipher suites klien. Jadi sepertinya saya perlu menguji semua suite sandi satu per satu. Saya pikir saya bisa meretas sesuatu bersama-sama, tetapi apakah ada cara yang lebih sederhana, lebih bukti di masa depan (misalnya cipher baru) untuk melakukan ini?
gnutls-cli
?Jawaban:
Saya menulis skrip bash untuk menguji suite sandi. Itu mendapat daftar suite sandi yang didukung dari OpenSSL dan mencoba untuk terhubung menggunakan masing-masing. Jika jabat tangan berhasil, itu akan dicetak
YES
. Jika jabat tangan tidak berhasil, itu dicetakNO
, diikuti oleh teks kesalahan OpenSSL.Berikut contoh output yang menunjukkan 3 cipher yang tidak didukung, dan 1 cipher yang didukung:
EDIT: Tambahkan fleksibilitas karena host dan port disediakan sebagai parameter pada skrip
sumber
if [[ "$result" =~ "Cipher :" ]] ; then
alih-alihif [[ "$result" =~ "Cipher is " ]] ; then
saya juga menguji SSL2 dan mengamankan negosiasi ulang:echo -n Testing ssl2... result=$(echo -n | openssl s_client -ssl2 -connect $SERVER 2>&1) if [[ "$result" =~ "Cipher :" ]] ; then echo supported. INSECURE! else echo no support, OK fi echo -n Testing SSL secure renegotiation... echo -n "" | openssl s_client -connect $SERVER 2>&1 | grep 'Secure Renegotiation'
Nmap dengan ssl-enum-ciphers
Tidak ada cara yang lebih baik atau lebih cepat untuk mendapatkan daftar sandi yang tersedia dari layanan jaringan. Plus, nmap akan memberikan peringkat kekuatan yang kuat, lemah, atau tidak dikenal untuk setiap cipher yang tersedia.
Pertama, unduh skrip nmap ssl-enum-ciphers.nse ( penjelasan di sini ). Kemudian dari direktori yang sama dengan skrip, jalankan nmap sebagai berikut:
Daftar cipher yang didukung oleh server HTTP
Daftar cipher yang didukung oleh server IMAP
Berikut cuplikan output dari server IMAP Dovecot:
sumber
portrule = function() \n return true \n end
AUTH TLS
dll, tetapi itu mungkin.Ya, Anda bisa menggunakan alat online di situs web Lab SSL untuk meminta Database Server SSL Publik.
Berikut cuplikan informasi yang diberikannya:
(tangkapan layar dari hasil google.com)
sumber
sslscan adalah utilitas kecil yang bagus.
Ia menguji koneksi dengan TLS dan SSL (dan skrip build dapat menautkan dengan salinan OpenSSL sendiri sehingga versi SSL yang usang diperiksa juga) dan melaporkan tentang suite dan sertifikat sandi server.
Contoh output untuk
google.com
(dipangkas agar mudah dibaca):sumber
yum install sslscan
bekerja pada CentOS 6.sudo dnf install sslscan
pada Fedora 22 juga.brew install sslscan
pada OSXsudo apt-get install sslscan
di Ubuntu (12,04 - jadi semua versi yang lebih baru harus baik-baik saja).Karena ini adalah utas referensi hebat untuk alat pemindaian SSL, saya akan mencantumkan CipherScan yang dibuat setahun lalu dan juga dapat mengidentifikasi masalah dengan sandi penukar kunci. https://github.com/jvehent/cipherscan
Jika Anda menginginkan garpu yang mendukung SNI dan FreeBSD, URL-nya adalah https://github.com/oparoz/cipherscan
Ini adalah skrip yang memanggil
openssl s_client
dan mendukung menggunakan biner OpenSSL Anda sendiri sehingga Anda dapat menguji fitur yang akan datang atau cipher baru (chacha20 + poly1305 per contoh).Ini juga memungkinkan Anda terhubung ke port apa pun yang Anda inginkan dan menggunakan starttlss.
Berikut ini adalah output khas
Dan berikut adalah daftar opsi
Output json berguna jika Anda memanggil ini dari skrip lain.
sumber
https://github.com/iSECPartners/sslyze
Yang ini berbasis Python, bekerja di Linux / Mac / Windows dari baris perintah.
sumber
Setelah sedikit googling saya menemukan Pengujian ini untuk SSL-TLS (OWASP-CM-001) :
dan juga: Foundstone SSL Digger adalah alat untuk menilai kekuatan server SSL dengan menguji cipher yang didukung. Beberapa cipher ini diketahui tidak aman.
sumber
Saya menggunakan sebagian besar uji SSL testsl.sh (lihat https://testssl.sh / devel versi @ https://github.com/drwetter/testssl.sh . Ia menguji kerentanan, sandi, protokol, dll.)
sumber
SSLScan hebat; alat baru SSLDiagnos berfungsi untuk Windows, atau Anda bisa menulis skrip menggunakan openssl s_client.
sumber
Skrip ssl-enum-cipher Nmap dapat mencantumkan cipher yang didukung dan versi SSL / TLS, serta kompresor yang didukung.
sumber
ssl-enum-ciphers
Jika Anda ingin keluaran yang bagus dan dapat diterima (dan dukungan untuk memeriksa semua versi SSL / TLS)
Penggunaan: ./script.sh www.url.com
sumber
openssl ciphers -tls1.1
danopenssl ciphers -tls1.2
bagaimanapun param itu tampaknya tidak ada ... Hanya ada-tls1
(setidaknya pada platform yang saya coba).tls1_1
dantls1_2
tetapi mereka hanya ditampilkan pada versi master openssl dan bahkan tidak di 1.0.2 ....)Ada skrip kecil yang bagus di pentesterscripting.com untuk memanfaatkan SSLScan dan OpenSSL untuk memeriksa:
http://www.pentesterscripting.com/discovery/ssl_tests (via Internet Archive Wayback Machine )
Digandakan di sini untuk futureproofing karena situs utama sekarang mati:
Penggunaan: ./ssltest.sh HOST PORT
sumber
Berdasarkan jawaban dan saran @ indiv untuk mempostingnya sebagai jawaban sendiri, saya memberikan skrip @ indiv versi tweak saya. Anda dapat memberikan host sebagai argumen pertama, dan itu akan menampilkan hasil yang sama seperti skrip asli, tetapi sedikit lebih terformat:
sumber
OpenSSL Cookbook (gratis) oleh Ivan Ristic, yang mengembangkan alat online SSL Labs yang tercantum dalam jawaban Kez , menyatakan:
(Penekanan saya.)
Satu alat yang belum saya lihat disebutkan dalam jawaban lain adalah SSLTest Stephen Bradshaw , yang, antara lain, dimaksudkan untuk membandingkan "sandi dan protokol yang terdeteksi dengan standar kepatuhan seperti DSD ISM dan PCI-DSS."
Jadi, coba ini atau salah satu alat yang disebutkan dalam jawaban lain, atau bangun sendiri dan pertimbangkan untuk menggunakan pendekatan jabat tangan parsial Ristic.
sumber
Saya menulis alat yang melakukan ini. Ini disebut tlsenum dan tersedia di GitHub .
Berikut ini adalah contoh keluaran alat terhadap
twitter.com
.Ini mirip dengan apa yang dilakukan Lab SSL tetapi saya menemukan bahwa memiliki alat baris perintah yang Anda dapat mengotomatiskan dan menguraikan jauh lebih berguna.
sumber
SSLyze, awalnya di https://github.com/iSECPartners/sslyze , sekarang di https://github.com/nabla-c0d3/sslyze . Itu disebutkan dalam jawaban lain , tetapi tanpa banyak detail.
SSLyze berbasiskan Python, dan bekerja di Linux / Mac / Windows dari baris perintah. Ini menggunakan OpenSSL, dan pada Windows, ia datang dengan salinan OpenSSL yang dibundel.
Daftar protokol, suite sandi, dan detail kunci, ditambah tes untuk beberapa kerentanan umum. Dimungkinkan untuk mengaktifkan atau menonaktifkan pemeriksaan tertentu, untuk mendapatkan lebih banyak data atau mempercepat pemindaian.
sumber
Satu-satunya hal yang dapat Anda lakukan adalah mencoba semuanya, satu per satu, dan lihat mana yang diterima. Saya tidak mengetahui alat untuk melakukan ini, meskipun seharusnya tidak sulit untuk bersama-sama dari alat skrip dan
openssl s_client
.Sementara klien mengiklankan ciphersuites yang akan diterima, server hanya mengambil satu dan menggunakannya atau gagal koneksi jika tidak menemukan apa pun yang disukainya.
sumber
Semua jawaban itu baik-baik saja. Salah satu bagian dari jawabannya dapat menjelaskan mengapa kita memerlukan alat untuk menemukan daftar server dan tidak bertanya langsung di TLS bahwa server memberikan semua suite sandi yang didukungnya seperti yang dilakukan klien TLS ketika terhubung ke server.
Jawabannya adalah bahwa server tidak pernah mengirim daftar , hanya pilih di daftar klien cipher cipher yang ingin digunakan, ini adalah cara protokol SSL / TLS ditulis: http://wiki.opensslfoundation.com/index.php/ SSL_and_TLS_Protocols # Cipher_Suites
Itu sebabnya klien harus menghitung sandi untuk dapat menemukan yang didukung oleh server dan untuk itu harus melakukan setidaknya satu jabat tangan awal baru (ClientHello) untuk setiap rangkaian sandi.
sumber
Sambil mencari sesuatu yang tidak
AUTH TLS
pada FTP, saya menemukan alat ini: ssl-cipher-suite-enumIni adalah skrip perl yang pada dasarnya melakukan apa yang dilakukan skrip shell hackajar, hanya saja lebih canggih.
Ini juga menawarkan evaluasi dasar dari cipher dan protokol yang ditawarkan. Ini agak mirip alat SSL Labs, hanya untuk digunakan di rumah. :)
Secara default, ini hanya mendukung
AUTH SSL
pada FTP, tetapi pencarian dan penggantian yang sederhana dapat memperbaikinya. Sebagai bonus, ia juga mengklaim mendukung SMTP denganSTARTTLS
dan RDP.sumber
TestSSLServer adalah solusi berbasis Java murni. Keuntungan:
ini bekerja sangat rendah, hanya pada Sockets polos, jadi itu terlepas dari kemungkinan tidak tersedia cipher dari JDK atau OpenSSL .
itu tidak memerlukan port tambahan (seperti ICMP untuk ping) untuk dibuka
itu berfungsi dengan sertifikat klien hadir
Kekurangan:
Pengalaman pribadi saya: diberi server yang sangat ketat dengan hanya satu port HTTPS terbuka (tidak ada port lain), sertifikat klien diperlukan dan iptables aktif, masih dapat membuat daftar cipher yang tersedia, sementara solusi terpilih tidak. mencoba skrip shell kecil, SSL Labs, NMap, sslscan)
sumber