Konflik antara SNI dan domain yang disediakan HTTP

22

Saya baru-baru ini memindahkan situs web WordPress dengan toko kecil dari penyedia hosting ke server Ubuntu Server 12.04.2 LTS dan Apache 2.2.22 milik saya sendiri. Saya memerlukan SSL untuk toko. Saya mengatur beberapa vhosts sederhana pada IP baru untuk server, satu mengikat ke port 80 dari IP spesifik dan lainnya mengikat ke port 443. Keduanya memiliki ServerName www.example.comdan ServerAlias example.comdalam konfigurasi vhost. Saya punya SSLStrictSNIVHostCheck off.

Situs ini berjalan sangat lambat, tetapi berfungsi. Saya mendapatkan yang berikut ini di log kesalahan saya.

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

Saya berharap bahwa kelambatan terkait dengan pesan di atas. Adakah ide mengapa itu muncul dan apa yang bisa saya lakukan?

flickerfly
sumber

Jawaban:

24

Lihatlah log akses Anda (bukan log kesalahan). Dengan waktu dan tanggal kesalahan Anda harus dapat mengidentifikasi permintaan yang menyinggung dan mengetahui agen pengguna. Dalam kasus saya, itu adalah bot:

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

Server Saya menjawab dengan HTTP 400: Permintaan Buruk.

Kecuali saya salah, dalam negosiasi TLS, klien mengirim nama host dua kali: sekali SEBELUM koneksi SSL dibuat dalam SNI (Indikasi Nama Server) dan sekali SETELAH dalam permintaan HTTP yang sebenarnya. Jika nama server tidak cocok, ini akan menunjukkan klien yang rusak dan seharusnya tidak ada hubungannya dengan bagaimana server Anda dikonfigurasi.

Mungkin mereka akan memperbaiki bot mereka suatu hari nanti, sementara itu Anda mungkin dapat mengabaikannya. Saya ragu ini dapat menyebabkan kelambatan pada tuan rumah, kecuali permintaan datang pada tingkat yang sangat tinggi.

Arno Schäfer
sumber
11

Mungkin kesalahan ini sengaja ditimbulkan oleh beberapa klien untuk menguji kerentanan server Anda. Saya telah menemukan bahwa permintaan dari researchscan367.eecs.umich.edumemicu kesalahan pada server yang saya kelola. Dalam hal ini adalah hal yang baik bahwa kesalahan terjadi.

Saya ingin tahu serangan macam apa yang mungkin terjadi, dan saya menanyakan pertanyaan ini di Security Stack Exchange: Serangan apa yang dicegah oleh kode kesalahan Apache2 AH02032?

jknappen - Pasang kembali Monica
sumber
1

Kedengarannya seperti masalah klien pada pandangan pertama ... Browser apa yang menyebabkan masalah ini?

Pesan akan menyarankan nama host yang dikirim klien selama pengaturan ssl tidak sama dengan yang dikirim klien dalam permintaan HTTPS setelah lapisan SSL naik.

alxgomz
sumber
Saya tidak tahu apa yang menyebabkan ini. Kesalahan tidak melaporkan informasi klien. Saya hanya tahu saya melihat ini secara teratur. Saya berharap ServerAlias ​​cukup untuk membuatnya bahagia karena secara teori server tahu bahwa www.domain.com dan domain.com adalah setara.
flickerfly
@ flickerfly Ya, ini adalah klien buggy, dan tidak banyak yang bisa Anda lakukan kecuali Anda bisa mengidentifikasinya.
Michael Hampton
2
Oke, cukup nonaktifkan SNI dengan menghapus direktif NameBasedVirtualHost untuk port 443. Saya kira saya tidak membutuhkannya saat ini. Saya pikir itu seharusnya berhasil.
flickerfly
1

Dalam kasus saya, pembuatan virtualhost baru dengan garis bawah adalah masalahnya. Saya memiliki sertifikat SSL wildcard.

Tidak bekerja:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

Meskipun Apache berhasil restart, saya mendapat kesalahan HTTP 400. Dalam log kesalahan:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

Tetapi menghapus garis bawah berhasil:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>
MS Berends
sumber
1
Selamat Datang di ServerFault. Menempatkan garis bawah di nama host bertentangan dengan RFC dan akan pecah dengan berbagai cara. stackoverflow.com/questions/2180465/…
anak ayam
1
Persis! Jadi itu sebabnya sekarang juga ada di sini sebagai referensi.
MS Berends
0

Periksa file / etc / hosts Anda untuk melihat apakah Anda menetapkan nama domain ke alamat IP lokal (internal). Jangan lupa untuk me-restart daemon cache layanan nama setelah mengubah / etc / hosts service nscd restart

Jim Da Otter
sumber