Apa cara terbaik untuk mengaktifkan Keamanan Transportasi HTTP Ketat pada server web IIS 7?
Bisakah saya hanya melalui GUI dan menambahkan header respons HTTP yang tepat atau haruskah saya menggunakan appcmd dan jika demikian apa yang beralih?
Apa cara terbaik untuk mengaktifkan Keamanan Transportasi HTTP Ketat pada server web IIS 7?
Bisakah saya hanya melalui GUI dan menambahkan header respons HTTP yang tepat atau haruskah saya menggunakan appcmd dan jika demikian apa yang beralih?
Jawaban:
IIS memiliki kemampuan untuk menambahkan header khusus ke respons . Ini sepertinya cara termudah untuk melakukannya.
Menurut dokumentasi di IIS.net Anda dapat menambahkan header ini melalui IIS Manager:
sumber
Ini memungkinkan kami untuk menangani pengalihan HTTP dan menambahkan header Strict-Transport-Security ke respons HTTPS dengan satu situs IIS (modul URL Rewrite harus diinstal):
sumber
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
untuk mendapatkan izin pada hstspreload.orghttps://somedomain.com/https://somedomain.com/relatedpath
dan hasilnya adalah jalan dijatuhkan.Untuk melengkapi jawaban voretaq7 , Anda juga bisa melakukan ini menggunakan file Web.config (NB: Hanya digunakan untuk situs SSL, karena akan menambahkan header untuk respons HTTP dan HTTPS, yang bertentangan dengan spesifikasi RFC 6797, silakan lihat penjelasan di bawah ini) - tambahkan blok sebagai berikut:
Jelas, Anda mungkin sudah memiliki
system.webServer
blok di Web.config Anda, jadi tambahkan ini ke dalamnya, jika ya. Kami lebih suka menangani hal-hal di Web.config daripada GUI, karena itu berarti perubahan konfigurasi dapat dilakukan ke repositori Git kami.Jika Anda ingin menangani pengalihan HTTP-ke-SSL, seperti yang disebutkan Greg Askew , Anda mungkin akan lebih mudah melakukannya dengan situs web terpisah di IIS. Ini adalah cara kami menangani memerlukan SSL untuk beberapa situs klien. Situs itu hanya berisi pengalihan HTTP dan beberapa perbaikan pengungkapan informasi , semua di Web.config:
Ini adalah solusi pilihan kami karena beberapa alasan - kami dapat dengan mudah mencatat lalu lintas yang dialihkan secara terpisah (karena berada dalam log IIS yang berbeda), itu tidak melibatkan lebih banyak kode di Global.asax.cs (kami tidak memiliki kode apa pun di sana, yang sedikit lebih nyaman untuk situs Umbraco) dan, yang penting, itu berarti bahwa semua konfigurasi masih disimpan dalam repo GIT kami.
Diedit untuk menambahkan: Agar lebih jelas, untuk mematuhi RFC 6797 ,
Strict-Transport-Security
header khusus TIDAK HARUS ditambahkan ke permintaan yang dibuat oleh HTTP yang tidak dienkripsi. Agar sesuai dengan RFC6797, Anda HARUS memiliki dua situs di IIS, seperti yang telah saya jelaskan setelah blok kode pertama. Seperti yang ditunjukkan Chris , RFC 6797 meliputi:jadi mengirim
Strict-Transport-Security
tajuk pelanggan sebagai tanggapan atas permintaan non-SSL tidak akan memenuhi spesifikasi.sumber
Saya akan menggunakan contoh dari tautan Wikipedia yang Anda referensikan dan melakukan aktivitas di global.asax untuk situs tersebut. Ini memungkinkan pengalihan permintaan ke url https, dan kemudian masukkan header ke dalam respons.
Ini karena header HSTS harus diabaikan jika tidak ada respons https.
sumber
Ini sepertinya cara gagal yang cukup aman untuk melakukan ini. Tambahkan kode ini di Global.asax - acara Application_BeginRequest pertama kali muncul dalam siklus hidup permintaan Asp.net: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs. 110) .aspx
Sesuai spesifikasi, permintaan http tidak boleh merespons dengan tajuk - jadi kode ini hanya menambahkannya untuk permintaan https. Max-age dalam hitungan detik, dan biasanya ide yang bagus untuk menaruh nilai besar di sini (IE - 31536000 menunjukkan situs akan menjalankan SSL hanya untuk 365 hari ke depan)
sumber
Menggunakan contoh yang disediakan oleh Doug Wilson saya telah membuat dua fungsi PowerShell berikut untuk menambahkan aturan penulisan ulang url untuk pengalihan ke HTTPS dan untuk menambahkan header HSTS.
Ini telah diuji pada Windows 2012 dan Windows 2012 R2.
Yang perlu Anda lakukan adalah menyediakan nama situs web. Secara opsional, Anda dapat memberikan aturan nama yang berbeda jika Anda tidak menyukai pengaturan default.
Satu hal yang perlu diperhatikan adalah bahwa dari pengujian saya, Variabel Server perlu ditambahkan ke daftar izin sebelum berada di header respons. Fungsi melakukan ini untuk Anda.
EDIT: Lihat referensi pada Url Rewrite untuk HTTP Header di sini: http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
sumber
Menurut pembuat Modul Keamanan Transportasi Ketat HTTP Strik, hanya menambahkan tajuk khusus tidak sesuai dengan spesifikasi konsep (RFC 6797).
Anda sebenarnya perlu menginstal Modul IIS ini untuk mengaktifkan HSTS pada IIS 7.
Pembaruan 26 okt 2014 : Berkat komentator di bawah ini, saya membaca halaman modul lagi dan secara khusus bagian yang membenarkan penggunaan modul daripada menambahkan header kustom.
Host HSTS TIDAK HARUS menyertakan bidang tajuk STS dalam respons HTTP yang disampaikan melalui transportasi yang tidak aman.
Jika Anda memastikan untuk menambahkan tajuk hanya dalam HTTPS dan BUKAN dalam HTTP, Anda tidak memerlukan modul ini dan Anda dapat menggunakan jawabannya oleh Doug Wilson. Jangan gunakan jawaban Owen Blacker karena tidak memiliki kondisi https.
sumber
Ini dapat dilakukan dengan menambahkan blok berikut di Web.Config:
Kita harus mengonfigurasi pada IIS yang memiliki kemampuan untuk menyesuaikan header untuk merespons:
sumber
Hanya untuk menambahkan, saya melihat di komentar 2 orang berbicara tentang 500 kesalahan saat Anda melakukan ini. Saya punya ini.
Jika Anda mendapatkan 500 kesalahan di IIS itu mungkin karena Anda telah menambahkan aturan di tingkat atas, diatur ke warisan, dan di tingkat situs.
misalnya
IIS / Browser tampaknya tidak memberi Anda informasi apa pun yang telah Anda lakukan ini, terlepas dari pengaturan penanganan kesalahan Anda
sumber