HTTPS tidak berfungsi dengan Safari

15

Saya memiliki instance EC2 dengan Apache sebagai server web (dan Wildfly sebagai server-aplikasi, meskipun saya tidak yakin ada hubungannya dengan masalah ini). Di depan EC2 saya memiliki penyeimbang beban yang mengakhiri HTTPS dan menerapkan sertifikat SSL.

HTTP dan HTTPS berfungsi dengan baik di Chrome, tetapi sayangnya tidak di Safari. Mengakses http://test.papereed.com berfungsi dengan baik, tetapi mengakses https://test.papereed.com memberikan kesalahan

"Safari can't open the page. The error is "The operation couldn't be completed. Protocol error" (NSPOSIXErrorDomain:100)"

Saya telah mencari di / etc / httpd / logs / error_log dan / etc / httpd / logs / access_log dan juga di konsol Safari tanpa menemukan petunjuk untuk menyelesaikan masalah. Dan itu tentang sejauh mana pengetahuan saya :-( Ada petunjuk bagaimana melacak masalah ini akan sangat dihargai.

jola
sumber

Jawaban:

21

curl (jika dikompilasi dengan dukungan HTTP / 2) menunjukkan masalah yang sama tetapi menunjukkan alasannya:

Kesalahan http2: Bidang tajuk HTTP tidak valid diterima: jenis bingkai: 1, aliran: 1, nama: [upgrade], nilai: [h2, h2c]

Sepertinya server Anda menawarkan peningkatan ke HTTP / 2 walaupun koneksi sudah dilakukan dengan HTTP / 2 - yang tidak masuk akal. Tidak hanya itu, itu secara eksplisit dilarang. Dari RFC 7540 bagian 8.1.2.2 :

Titik akhir HARUS TIDAK menghasilkan pesan HTTP / 2 yang berisi bidang header khusus koneksi; pesan apa pun yang berisi bidang tajuk khusus-koneksi HARUS diperlakukan sebagai cacat (Bagian 8.1.2.6) .... bidang tajuk khusus-sambungan, seperti Keep-Alive, Proxy-Connection, Transfer-Encoding, dan Upgrade

Bagi saya itu adalah bug karena Apache seharusnya tidak mengirim header ini dengan HTTP / 2.

Dugaan saya adalah Anda memiliki konfigurasi seperti ini

Protocols h2 h2c http/1.1

Mengingat bahwa peramban tidak mendukung HTTP / 2 tanpa TLS dan bahwa tidak ada tajuk Peningkatan yang diperlukan dengan HTTP / 2 di atas TLS, saya sarankan Anda mengganti konfigurasi ini dengan

Protocols h2 http/1.1

Ini menonaktifkan dukungan untuk HTTP / 2 yang tidak dibutuhkan tanpa TLS tetapi semoga menyingkirkan header Upgrade dengan cara ini karena ini hanya diperlukan untuk meningkatkan dari HTTP biasa ke HTTP / 2 biasa.

EDIT: menurut komentar oleh OP mengubah Protocolskonfigurasi tidak membantu. Itu perlu untuk secara eksplisit mengatasi perilaku ini (yaitu bug) mod_http2dengan menghapus Upgradeheader:

Header unset Upgrade
Steffen Ullrich
sumber
2
Terima kasih! Saya memang memiliki konfigurasi berikut: # Enable HTTP/2 by default # https://httpd.apache.org/docs/2.4/mod/core.html#protocols <IfModule mod_http2.c> Protocols h2 h2c http/1.1 </IfModule> Mengikuti rekomendasi Anda dan berubah menjadi Protocols h2 http/1.1tidak menghapus tajuk peningkatan, jadi alih-alih saya mempertahankan garis Protokol sebagaimana adanya dan menambahkan yang berikut: Header unset Upgradeuntuk menghapus tajuk. Tidak bisa mengatakan saya 100% di atas apa / mengapa terjadi di sini tapi sekarang berfungsi dengan baik di Safari juga :-)
jola
@ jola: terima kasih atas umpan baliknya. Saya sudah memasukkannya ke dalam jawaban.
Steffen Ullrich
3

Saya pikir ini adalah masalah Safari daripada masalah AWS / SSL. Pencarian untuk kesalahan itu mendapat banyak, banyak hasil di Google.

Semuanya memeriksa dengan situs web menurut tes Shopper SSL dan Tes Labs SSL .

Saya menemukan solusi yang mungkin untuk masalah ini.

Solusinya adalah masuk ke Preferensi Safari, di bawah Privasi dan daftarkan semua Detail. Ini memberikan log dari semua situs di mana cookie, dll telah digunakan. Saya menemukan halaman domain Jaringan Cuaca dan membersihkan semua konten darinya. Saya kemudian dapat memuat ulang halaman Weather Network tanpa masalah. Saya berasumsi ini akan berfungsi untuk situs tunggal serupa lainnya.

Ada juga ini yang bisa dilakukan dengan Apache.

Tim
sumber
Ya, saya sudah googled ini tetapi tidak menemukan apa pun yang langsung berlaku (afaiu). Saya sudah membaca solusi yang diusulkan untuk nginx tapi saya tidak yakin bagaimana / apakah ini berlaku untuk apache.
jola
Apache tidak diragukan lagi akan dapat menghapus tajuk "Upgrade" , yang hanya dilakukan oleh Nginx.
Tim