Tingkatkan koneksi HTTP ke SSL / TLS

8

Saat ini saya memiliki server yang secara otomatis mengalihkan semua permintaan HTTP ke situs HTTPS yang setara. Masalahnya adalah sepertinya beberapa browser tidak menerima sertifikat SSL (StartSSL.com) atau tidak mendukung SNI, oleh karena itu mereka mendapat peringatan Sertifikat dan pengguna tidak akan terus berselancar di situs web.

Apakah ada mekanisme yang mencoba membuat browser menggunakan HTTPS alih-alih HTTP biasa dan ketika itu tidak berfungsi (mis. Sertifikat tidak diterima atau SNI tidak didukung) terus menggunakan HTTP.

Saat ini saya menggunakan Apache 2.4 dengan beberapa virtual host yang semuanya mengarahkan koneksi HTTP Redirect / https://domain.example/.

foxylion
sumber
3
Mengubah dari HTTPS ke HTTP ketika sertifikat tidak memperbaikinya sesuatu yang Anda seharusnya tidak ingin terjadi sebagai pengunjung. Fakta bahwa sertifikat salah seharusnya merupakan pertanda bahwa ada sesuatu yang salah, kembali ke koneksi yang tidak dienkripsi adalah hal terburuk yang dapat Anda lakukan. Solusi terbaik yang Anda miliki adalah memperbaiki sertifikat Anda sehingga cocok dengan nama host Anda, baik dengan menggunakan CA lain atau dengan tidak menggunakan SNI.
Teun Vink
OK mengerti. Tetapi ketika kami berharap ada browser yang tidak mendukung koneksi HTTPS atau tidak mendukung mekanisme enkripsi yang disediakan dari server. Maka klien itu (dalam kasus saya) tidak memiliki kemungkinan untuk menggunakan situs ini, karena saya secara otomatis mengarahkan ulang ke situs yang setara dengan HTTPS.
foxylion
Di dunia sekarang ini sangat mungkin untuk mengatasi keterbatasan ini. Situs yang sangat besar hanya memiliki peralihan ke SSL. Jika mereka bisa melakukannya, Anda bisa melakukannya.
MichelZ

Jawaban:

15

Peramban tidak boleh downgrade dengan sendirinya ke http jika https tidak berfungsi, karena semua penyerang perlu lakukan adalah membuat https tidak tersedia (misalnya memblokir port 443). Jadi satu-satunya cara ini bisa dilakukan adalah dengan menginstruksikan browser dari server untuk melakukannya, misalnya dengan mengirim pengalihan http. Tentu saja ini harus dikirim melalui koneksi aman (jika tidak seorang pria di tengah bisa memalsukannya) tetapi sayangnya justru masalah Anda bahwa koneksi aman gagal.

Singkatnya: Tidak, itu tidak mungkin dan lebih baik begini.

BTW, semua browser modern mendukung SNI, tetapi tidak semua aplikasi (mis. Aplikasi Java, dll) melakukannya. Jika Anda memiliki beberapa domain di server web tetapi hanya satu domain yang diperlukan oleh aplikasi ini, Anda dapat menetapkan sertifikat untuk domain ini sebagai default. Kalau tidak, Anda perlu mendapatkan sertifikat (lebih mahal) yang berisi semua domain yang diperlukan sebagai nama alternatif subjek.

Edit dengan ide lain: apa yang bisa Anda coba lakukan adalah mengunduh gambar dari sisi Anda sebagai https dan periksa keberhasilannya dengan penangan kesalahan pada img-tag. Mungkin ini tidak memicu peringatan yang terlihat oleh pengguna tetapi malah gagal dimuat. Dan jika berhasil, Anda tahu bahwa akses https dimungkinkan dan mengarahkan ulang pengguna.

Selain itu Anda harus bertanya pada diri sendiri, mengapa Anda ingin menawarkan https sama sekali, jika Anda menerima akses dengan http juga. Entah ada data yang harus dilindungi atau tidak. Selama Anda menawarkan fallback ke http, mudah bagi penyerang untuk menegakkan http alih-alih https.

Steffen Ullrich
sumber
1
Sangat baik dinyatakan.
Tim Brigham
3

Pertama-tama harus dimungkinkan untuk menentukan satu sertifikat yang akan digunakan untuk semua klien yang tidak memiliki dukungan SNI. Ini berarti dari semua domain yang dihosting pada alamat IP itu, Anda dapat memiliki setidaknya satu dari mereka yang bekerja untuk klien tanpa SNI.

Apa yang dapat Anda lakukan saat mengalihkan dari http ke https adalah pengalihan dua tahap. Pengalihan pertama dari http ke https menggunakan nama domain, yang Anda pastikan akan berfungsi dengan atau tanpa dukungan SNI. URL asli lengkap harus disertakan, sehingga dari situs https ini Anda dapat mengarahkan kembali ke URL yang benar sesudahnya.

Nama domain, yang berfungsi dengan atau tanpa SNI dapat berperilaku berbeda tergantung pada apakah SNI didukung oleh klien. Dengan begitu Anda akan tahu klien mendukung SNI sebelum Anda mengarahkannya ke domain, yang mensyaratkan SNI.

Bagaimana tepatnya mengkonfigurasi ini di Apache akan sedikit menebak dari sisi saya (karena saya tidak pernah mengkonfigurasi Apache dengan lebih dari satu sertifikat). Saya kira cara untuk melakukannya adalah dengan membuat host virtual berbasis nama untuk semua domain termasuk domain perantara.

Kemudian buat virtual host default untuk klien tanpa SNI, yang menggunakan sertifikat yang sama dengan yang menggunakan nama. Dua host virtual dengan sertifikat yang sama, akan mengirimkan pengalihan yang berbeda kepada klien tergantung pada apakah mereka mendukung SNI.

Akhirnya, saya akan mengaktifkan IPv6 di server. Dengan IPv6 Anda mendapatkan alamat IP yang cukup sehingga Anda dapat mengalokasikan satu untuk setiap host virtual. Rangkaian host virtual yang sama dapat berupa nama berdasarkan IPv4 dan IP berdasarkan IPv6, sehingga Anda tidak perlu menduplikasi konfigurasi apa pun dengan cara ini.

Hasil akhirnya adalah pengaturan yang berfungsi selama klien mendukung SNI atau IPv6. Hanya klien yang mendukung keduanya maka akan memiliki masalah, tetapi Anda masih akan dapat mendeteksi mereka dan server pengalihan berbeda atau pesan kesalahan.

Sedangkan untuk klien yang tidak menyukai CA, satu-satunya saran saya adalah mengenalinya oleh agen-pengguna mereka dan menanganinya sesuai dengan kebutuhan Anda. Pastikan Anda memiliki tautan ke situs https, yang dapat mereka klik jika Anda tidak sengaja memasukkan terlalu banyak klien.

kasperd
sumber
0

Hanya tebakan liar: Mungkinkah Anda tidak memiliki arahan SSLCertificateChainFile di konfigurasi apache Anda yang mencakup file sub.class1.server.ca.pem yang Anda butuhkan untuk StartSSL?

Kai Bojens
sumber
Tidak, semuanya berfungsi dengan baik, tetapi beberapa browser lama tidak mendukung SNI atau tidak mempercayai StartSSL.com. Masalahnya adalah bahwa pengunjung ini tidak memiliki kemungkinan untuk melihat halaman tanpa mengabaikan peringatan sertifikat (apa yang bukan solusi).
foxylion