Bagaimana cara menambahkan SSL untuk .net aplikasi yang menggunakan httplistener - akan *tidak* akan berjalan pada IIS
Terbaru suntingan di bold
Saya menggunakan .net HttpListener
kelas, tapi aku tidak't dapat menjalankan aplikasi ini pada IIS dan saya tidak menggunakan ASP.net. Ini situs web menjelaskan apa kode untuk benar-benar menggunakan untuk menerapkan SSL dengan asp.net dan situs menjelaskan cara mengatur sertifikat (meskipun saya'm tidak yakin jika ini bekerja hanya untuk IIS atau tidak).
Kelas dokumentasi yang menjelaskan berbagai jenis otentikasi (basic, digest, Windows, dll.) --- tidak satupun dari mereka merujuk ke SSL. Itu tidak mengatakan bahwa jika HTTPS digunakan, anda akan perlu untuk mengatur sebuah server sertifikat. Ini akan menjadi salah satu line pengaturan properti dan HttpListener
angka keluar sisanya?
Singkatnya, saya perlu tahu bagaimana untuk mengatur sertifikat dan bagaimana memodifikasi kode untuk mengimplementasikan SSL.
Meskipun itu doesn't terjadi ketika saya'm mencoba untuk mengakses HTTPS, saya tidak melihat kesalahan dalam log Peristiwa Sistem - sumber "Schannel" dan isi pesan adalah:
terjadi kesalahan fatal saat mencoba untuk mengakses server SSL credential kunci privat. Kode kesalahan kembali dari modul kriptografi adalah 0x80090016.
Edit: Langkah-langkah yang diambil sejauh ini
- Menciptakan kerja HTTPListener di C# yang bekerja untuk koneksi HTTP (misalnya "http://localhost:8089/foldername/"
- Membuat sertifikat menggunakan makecert.exe
- Menambahkan sertifikat dapat dipercaya menggunakan certmgr.exe
- Digunakan Httpcfg.exe untuk mendengarkan untuk koneksi SSL pada tes port (misalnya 8090)
- Menambahkan port 8080 untuk HTTPListener via pendengar.Prefiks.Tambahkan(https://localhost:8090/foldername/");
- diuji HTTP client koneksi, misalnya (http://localhost:8089/foldername/") di browser dan menerima benar kembali
- diuji HTTPS koneksi klien, misalnya (http://localhost:8090/foldername/") di browser dan menerima "Transfer Data Terganggu" (di Firefox)
- debugging di visual studio menunjukkan bahwa pendengar callback yang menerima permintaan tidak pernah menjadi hit ketika koneksi HTTPS dimulai - I don't melihat setiap tempat yang aku bisa mengatur breakpoint untuk menangkap apa pun sebelumnya.
- netstat menunjukkan bahwa mendengarkan port yang terbuka untuk investasi HTTPS dan HTTP. port HTTPS tidak pergi ke TIME_WAIT setelah sambungan berusaha.
- Fiddler dan HTTPAnalyzer don't menangkap semua lalu lintas, saya kira itu doesn't mendapatkan cukup jauh dalam proses untuk menunjukkan di HTTP alat analisis
Pertanyaan ****
- Apa yang bisa menjadi masalah?
- Apakah ada sepotong .Kode bersih saya hilang (artinya saya harus berbuat lebih banyak di C# lain daripada hanya menambahkan awalan ke pendengar yang menunjuk ke HTTPS, yang adalah apa yang telah saya lakukan)
- Memiliki melewatkan langkah konfigurasi di suatu tempat?
- Apa lagi yang bisa saya lakukan untuk menganalisis masalah?
- Adalah pesan error di log Peristiwa Sistem tanda dari masalah? Jika begitu bagaimana hal itu akan diperbaiki?
Saya memiliki masalah yang sama, dan tampaknya bahwa mungkin ada masalah dengan sertifikat itu sendiri.
Berikut ini's path yang bekerja untuk saya:
kemudian melihat ke atas sertifikat cap jempol, salin ke clipboard dan menghapus spasi. Ini akan menjadi parameter setelah -jam di depan perintah:
kemudian jalankan layanan host pada https://localhost:801 dan itu bekerja dengan sempurna.
apa yang saya tidak bisa membuat pekerjaan https untuk berjalan pada self-generated sertifikat. Berikut ini's kode yang saya jalankan untuk menghasilkan satu (penanganan kesalahan dibawa keluar untuk kejelasan):
Sertifikat menunjukkan baik-baik saja dan itu telah bekerja sebuah kunci pribadi, tetapi https akan timeout seolah-olah cap jempol itu tidak pernah terdaftar. Jika ada yang tahu mengapa - plz komentar
EDIT1: Setelah beberapa bermain-main, saya telah menemukan inisialisasi untuk CertCreateSelfSignCertificate yang menghasilkan tepat sertifikat:
Anda hanya perlu mengikat sertifikat ke ip:port dan kemudian buka pendengar anda dengan https:// awalan. 0.0.0.0 berlaku untuk semua ip's. appid acak GUID, dan certhash adalah hash dari sertifikat (kadang-kadang disebut thumprint).
Jalankan berikut dengan cmd.exe menggunakan hak administrator.
Jika anda ingin membuat self-signed untuk tes ini,
HttpListener pendengar = new HttpListener(); pendengar.Prefiks.Tambahkan("https://+:1234/"); pendengar.Start(); Konsol.WriteLine("Mendengarkan..."); HttpListenerContext konteks = pendengar.GetContext();
menggunakan (Stream stream = konteks.Respon.OutputStream) menggunakan (StreamWriter writer = new StreamWriter(stream)) penulis.Write("hello, https dunia");
Konsol.ReadLine();
Setelah menjalankan program ini saya hanya berlayar ke
https://localhost:1234
untuk melihat teks yang dicetak. Sejak sertifikat CN tidak cocok url dan itu tidak ada dalam Sertifikat Terpercaya toko anda akan mendapatkan surat Peringatan. Teks dienkripsi namun seperti yang anda dapat memverifikasi dengan alat seperti Wire Shark.Jika anda ingin lebih banyak kontrol atas membuat self-signed x 509 sertifikat openssl adalah alat yang hebat dan ada port untuk windows. I've memiliki lebih banyak keberhasilan dengan itu dari makecert alat.
It's juga sangat penting bahwa jika anda berkomunikasi dengan https layanan dari kode yang telah peringatan ssl, anda harus setup sertifikat validator pada service point manager untuk memotong itu untuk tujuan pengujian.
Saya don't memiliki itu sama sekali belum dilaksanakan, tapi situs web ini tampaknya untuk memberikan baik walkthrough menyiapkan sertifikat dan kode.
Berikut ini adalah cara alternatif untuk mengikat SSL certifiate untuk IP/PORT kombinasi tanpa menggunakan
httpcfg.exe
(XP) ataunetsh.exe
(Vista+).http://dotnetcodebox.blogspot.com.au/2012/01/how-to-work-with-ssl-certificate.html
Inti dari itu adalah bahwa anda dapat menggunakan C++ [HttpSetServiceConfiguration][2] API di-dibangun ke dalam windows untuk melakukannya secara programatik daripada melalui command line, oleh karena itu menghilangkan ketergantungan pada OS dan memiliki httpcfg diinstal.
[2]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364503(v=vs. 85).aspx
Kelas dokumentasi
memiliki catatan ini:
dan ini:
Ini adalah catatan pertama yang dijelaskan oleh kedua? Seperti diuraikan dalam pertanyaan, saya digunakan httpcfg.exe untuk mengikat sertifikat untuk port-port tertentu. Jika mereka berniat sesuatu yang lain dari ini, catatan yang ambigu.
I've mengalami masalah yang sama seperti anda. Untungnya setelah googling keras langkah-langkah di halaman ini membuat SSL bekerja dengan saya HttpListener.