Bisakah klien telnet atau netcat berkomunikasi melalui SSL?

62

Saya ingin menguji koneksi klien dengan IMAP melalui SSL, HTTPS, dan protokol Internet berbasis teks aman lainnya melalui SSL / TLS, dengan cara yang sama saya akan menggunakan telnet atau netcat jika tidak terhubung melalui protokol yang aman. Apakah ada cara untuk mendapatkan telnet atau netcat melalui SSL / TLS seperti dengan pipa atau program alternatif?

pengguna553702
sumber
2
Sama pada serverfault: serverfault.com/questions/102032/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

131

Tidak ada klien Telnet / Netcat - mereka adalah dua program yang terpisah, dan terdapat setidaknya 10 klien Telnet yang berbeda dan setidaknya 6 versi Netcat yang berbeda (netcat asli, netcat GNU, netcat OpenBSD, ncat ncat; lupa sisanya).

Alat yang disukai berasal dari perpustakaan TLS sendiri. Mereka mungkin sedikit bertele-tele.

  • GnuTLS memiliki alat klien TLS di Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Gunakan -suntuk STARTTLS; Anda harus secara manual memasukkan perintah protokol yang diperlukan dan tekan CtrlDsaat siap.

    Mendukung IPv6, memvalidasi sertifikat server secara default.

  • OpenSSL memiliki alat klien TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Ini tersedia untuk semua sistem operasi. STARTTLS didukung melalui -starttls imapatau -starttls smtpopsi, dan program akan secara otomatis menegosiasikannya. (Meskipun itu membuang balasan server awal setelah melakukannya, tetapi biasanya baik-baik saja.)

    Hanya versi ≥ 1.1 yang mendukung IPv6.

    Hanya versi ≥ 1.0.2 (IIRC) yang memvalidasi sertifikat server secara default; versi yang lebih lama memerlukan spesifikasi -CApath manual.

(Saya juga ingin memiliki alat untuk menguji NSS dan SChannel, tetapi tidak dapat menemukannya.)

Program juga menggunakan pustaka yang sama, tetapi mungkin memiliki tombol konfigurasi yang lebih sedikit. Beberapa bahkan melewatkan pemeriksaan sertifikat rekan secara default ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    mode readline dapat digunakan untuk kenyamanan:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS tidak didukung.

  • ncat dari nmap mendukung TLS (tetapi tidak STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Beberapa klien Telnet, seperti paket telnet-ssl di Debian, juga mendukung TLS:

    telnet-ssl -z ssl imap.gmail.com 993
    

    STARTTLS dapat diaktifkan menggunakan starttlsdari Ctrl]menu escape.

grawity
sumber
4
Saya berharap saya bisa dengan mudah menjawab jawaban Anda alih-alih pertanyaan yang si penanya bahkan tidak anggap sebagai tanda telah diterima.
Sammitch
gnutls-cli juga tampaknya menjadi satu-satunya, yang dengannya saya dapat menguji STARTLS dengan IPv6. Terima kasih!
karoshi
OpenSSL s_clientmemiliki dukungan IPv6 dalam rilis 1.1.
grawity
1
OpenSSL s_clientmemiliki fitur "berguna" di mana baris yang dimulai dengan R atau Q diperlakukan sebagai perintah (lihat manual ). Gunakan -ign_eofuntuk menonaktifkan ini. Juga, s_clientakan berlanjut meskipun verifikasi gagal; Anda harus memeriksa bahwa isinya "Verifikasi kode pengembalian: 0 (ok)" dan berharap server tidak mencoba untuk menipu pesan ini. Lebih baik digunakan gnutls-clijika memungkinkan.
tom
1
Untungnya itu juga berlaku -verify_return_erroruntuk itu.
grawity
5

Anda mungkin ingin melihat openssl s_client , mis

# openssl s_client -connect dummy.com:8443
dchampion
sumber
2

Ya ada program yang disebut stunnel

ini memiliki file konfigurasi,

Anda memberi tahu port apa yang ingin Anda dengarkan, port apa untuk diteruskan.

ini berfungsi untuk sisi klien, atau sisi server, atau keduanya.

sehingga dapat mengubah server yang tidak mendukung ssl, menjadi server yang efektif.

atau klien yang tidak mendukung ssl, efektif menjadi yang tidak.

atau membuat klien dan server memiliki koneksi ssl.

barlop
sumber
1

Ada juga sclient ( git ) jika Anda memerlukan dukungan lintas platform (yaitu Windows).

Buat server lokal yang membuka tl untuk example.com

$ sclient example.com:443 localhost:3000
> [listening] example.com:443 <= localhost:3000

Buat permintaan ke example.com dengan telnet

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
CoolAJ86
sumber