Menggunakan pengunduh situs web baris perintah, seperti wget
, curl
atau yang lainnya ... Dalam skrip ...
Saya memiliki sidik jari sertifikat SHA-1 dan SHA-256 dari sebuah situs web. Karena masalah keamanan ( 1 ) ( 2 ), saya tidak ingin menggunakan sistem otoritas sertifikat SSL publik. Sidik jari harus dikodekan dengan keras.
Bisakah aplikasi wget like memeriksa sidik jari SSL?
wget tidak memiliki fungsi seperti itu. ( 3 )
Menggunakan wget --ca-certificate
atau curl --cacert
saya harus menjalankan otoritas sertifikat lokal saya sendiri, yang ingin saya cegah, karena itu menambah banyak kerumitan. Ini juga sangat sulit dan tidak ada yang pernah melakukan itu sebelumnya. ( 4 )
Apakah tidak ada alat, seperti
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
Solusinya tentu saja tidak harus rentan terhadap TOCTOU. ( 5 ) MITM dapat membiarkan sidik jari yang valid untuk permintaan klien openssl dan merusak permintaan wget berikut.
Jawaban:
Sumber
Instal perangkat lunak yang diperlukan:
Unduh sertifikat SSL publik:
Atau lebih baik:
Dapatkan sidik jari SHA-1:
Dapatkan sidik jari SHA-256:
Secara manual membandingkan sidik jari SHA-1 dan SHA-256 dengan FAQ torproject.org: SSL .
Opsional membuat sertifikat-ca tidak berguna untuk tujuan pengujian. Menggunakan curl di sini, tetapi wget memiliki Bug bug dan tetap menggunakan ca-file.
Unduh dengan ikal dan sertifikat yang disematkan:
sumber
Dalam tcsh:
sumber
zsh
, harus bekerja untuk bash jugaIni juga cukup:
sumber
-md5
opsi untuk mengambil Sidik Jari MD5.-md5
harus tidak diletakkan di antara-in
danserver.crt
.Ini cukup mudah dilakukan dengan
openssl
perintah dan fungsionalitas kliennya.Skrip kecil berikut akan mengambil domain tertentu (tanpa awalan https) dan sidik jari SHA-1, dan keluar tanpa kesalahan (0) jika sidik jari yang diambil cocok, tetapi dengan kode keluar 1 jika tidak ada yang cocok. Anda kemudian dapat memasukkannya ke dalam skrip Anda dengan hanya menguji kode keluar terakhir
$?
:sumber
wget
dan mengompilasinya dengan OpenSSL sehingga ia melakukan apa yang Anda inginkan sebaris, tetapi itu berada di luar cakupan jawaban AU.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
seharusnya bekerja, bukan? Nah, Anda harus membagi info sesi SSL dari balasan konten yang sebenarnya.sumber
Seperti yang diuraikan dalam dokumentasi Net :: SSLeay, metode ini berarti verifikasi setelah transaksi HTTP, dan karenanya tidak boleh digunakan jika Anda ingin memverifikasi bahwa Anda sedang berbicara dengan server yang benar sebelum mengirimnya data. Tetapi jika semua yang Anda lakukan adalah memutuskan untuk mempercayai apa yang baru saja Anda unduh (yang sepertinya Anda berasal dari referensi # 4) Anda baik-baik saja.
sumber
Itu naskah saya sehari-hari:
Ouput:
sumber