Saya ingin meng-host situs web yang harus mendengarkan subdomain (mis., Subdomain.com) bersama dengan beberapa situs web yang hidup tepat di bawah domain tingkat kedua (mis. Domain2.com, domain3.com) dengan IIS dan dengan SSL.
Untuk situs web dengan subdomain saya memiliki sertifikat wildcard (* .domain.com) dan saya juga memiliki sertifikat khusus untuk situs lain (domain2.com dan domain3.com).
Bisakah pengaturan seperti itu di-host pada IIS yang sama (jika itu penting, dalam peran web Layanan Cloud Azure)?
Masalahnya persis dengan apa yang dijelaskan titobf di sini : secara teoritis untuk ini kita akan memerlukan binding menggunakan SNI, dengan host yang ditentukan untuk domain2 / 3.com dan kemudian situs web untuk semua domain dengan * host untuk * .domain.com. Namun dalam praktiknya, tidak peduli bagaimana ikatannya dipasang jika situs web catch-all ada di dalamnya, juga akan menerima semua permintaan ke domain2 / 3.com (meskipun seharusnya hanya cocok sebagai pilihan terakhir).
Bantuan apa pun akan dihargai.
Masih belum terpecahkan
Sayangnya saya tidak dapat menyelesaikan ini: tampaknya hanya dapat dipecahkan dengan cara yang sangat rumit, seperti membuat perangkat lunak yang terletak antara IIS dan internet (jadi pada dasarnya firewall) dan memodifikasi permintaan yang masuk (sebelum jabat tangan SSL terjadi! ) untuk memungkinkan skenario. Saya cukup yakin ini tidak mungkin dengan IIS, tidak peduli apa, bahkan dari modul asli.
Saya harus mengklarifikasi: kami menggunakan Azure Cloud Services, jadi kami memiliki batasan lebih lanjut bahwa kami tidak dapat menggunakan beberapa alamat IP (lihat: http://feedback.azure.com/forums/169386-cloud-services-web-and -pekerja-peran / saran / 1259311-multi-ssl-dan-domain-ke-satu-aplikasi ). Jika Anda dapat mengarahkan beberapa IP ke server Anda, maka Anda tidak memiliki masalah ini karena Anda juga dapat membuat binding untuk IP, dan itu akan bekerja sama binding wildcard. Lebih khusus lagi, Anda memerlukan IP untuk situs wildcard (tetapi karena Anda memiliki IP terpisah sekarang Anda tidak perlu mengkonfigurasi mengikat nama host wildcard) dan IP lain untuk semua yang non-wildcard.
Sebenarnya solusi kami adalah penggunaan port SSL non-standar, 8443. Jadi mengikat SNI sebenarnya terikat ke port ini, sehingga bekerja bersama dengan binding lainnya. Tidak bagus, tetapi solusi yang dapat diterima bagi kami sampai Anda dapat menggunakan beberapa IP untuk peran web.
Binding tidak bekerja sekarang
Ikatan https pertama adalah SNI dengan sertifikat sederhana, yang kedua bukan SNI, dengan sertifikat wildcard.
Situs http berfungsi, serta situs https SNI, tetapi situs yang mengikat wildcard memberikan "Kesalahan HTTP 503. Layanan tidak tersedia." (tanpa informasi lebih lanjut, tidak ada Pelacakan Permintaan Gagal atau entri Log Kejadian).
Akhirnya membuatnya pada dasarnya bekerja
Mengaktifkan log jejak ETW seperti yang dijelaskan Tobias menunjukkan bahwa kesalahan root adalah sebagai berikut:
Permintaan (ID permintaan 0xF500000080000008) ditolak karena alasan: UrlGroupLookupFailed.
Sejauh yang saya mengerti ini berarti http.sys tidak dapat merutekan permintaan ke titik akhir yang tersedia.
Memeriksa titik akhir yang terdaftar dengan netsh http show urlacl
menunjukkan bahwa memang ada sesuatu yang terdaftar untuk port 443:
Reserved URL : https://IP:443/
User: NT AUTHORITY\NETWORK SERVICE
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;NS)
Menghapus ini dengan netsh http delete urlacl url=https://IP:443/
akhirnya mengaktifkan ikatan SSL saya.
logman start httptrace -p Microsoft-Windows-HttpService 0xFFFF -o httptrace.etl -ets
2) lakukan permintaan 503 3) hentikan jejak log. jalankan:logman stop httptrace -ets
4) tulis log jejak ke file. jalankan:tracerpt.exe httptrace.etl -of XML -o httptrace.xml
5) periksa alasan 503 dalam file xml dan posting di sini.Jawaban:
Baris benar! Sertifikat SSL yang dikonfigurasi pada IP: PORT binding (contoh: 100.74.156.187:443) selalu didahulukan di http.sys! Jadi solusinya adalah sebagai berikut:
Jangan konfigurasikan IP: 443 yang mengikat untuk wildcard-fallback-sertifikat Anda, tetapi konfigurasikan ikatan *: 443 (* berarti "Semua Tidak Ditugaskan") untuk itu .
Jika Anda telah mengonfigurasi sertifikat wildcard Anda pada titik akhir SSL Layanan Azure Cloud (seperti yang saya miliki), Anda harus mengubah pengikatan SSL yang dibuat oleh Azure Cloud Service Runtime (IISconfigurator.exe) dari IP: PORT ke *: PORT. Saya memanggil metode berikut di OnStart peran web saya:
Tangkapan layar berikut menunjukkan konfigurasi yang berfungsi dari layanan cloud kami. Tolong jangan bingung tentang port non-standar. Tangkapan layar berasal dari layanan cloud yang ditiru.
Satu hal lagi yang perlu disebutkan: Jangan mengubah semua binding ke * karena mengikat HTTP (port 80) hanya berfungsi dengan IP: PORT mengikat dalam layanan cloud yang digunakan. Sesuatu yang lain terikat ke IP: 80 sehingga *: 80 tidak berfungsi karena * adalah singkatan dari "all unassigned" dan IP sudah ditugaskan di tempat lain di http.sys.
sumber
Pastikan pengikat semua tangkapan Anda tidak dari tipe IP: Port. Ketika IP: Port binding ada untuk HTTPS mengikat sementara SNI tidak diperlukan, mengikat itu akan selalu diutamakan. Untuk case catch-all Anda, gunakan *: Port binding (* menjadi semua yang belum ditetapkan).
sumber
IIS mendukung SNI, bahkan dalam peran web layanan cloud biru meskipun Anda tidak bisa mengakses konfigurasi melalui portal dan jika Anda melakukannya di kotak setelah penyebaran, itu akan dihapus dengan penyebaran Anda berikutnya. Solusinya adalah mengotomatisasi konfigurasi. Lihat detailnya di sini:
http://www.vic.ms/microsoft/windows-azure/multiples-ssl-certificates-on-windows-azure-cloud-services/
sumber