WebSocket dengan SSL

115

Apakah mungkin memiliki WebSockets dengan HTTPS?

Saat beralih ke HTTPS, WebSocket saya mengembalikan kesalahan keamanan dan berfungsi sempurna dengan HTTP biasa.

Di bawah ini, cuplikan;

socket = new WebSocket("ws://my_www:1235"); 
Eric
sumber
saya buruk, saya menyadari bahwa server soket AIR yang saya gunakan tidak aman, saya harus menulis ulang untuk menggunakan flash.net.SecureSocket ...
Eric

Jawaban:

170

Koneksi WebSocket memulai hidupnya dengan jabat tangan HTTP atau HTTPS. Ketika halaman diakses melalui HTTP, Anda dapat menggunakan WS atau WSS (WebSocket secure: WS over TLS). Namun, saat halaman Anda dimuat melalui HTTPS, Anda hanya dapat menggunakan WSS - browser tidak mengizinkan untuk "menurunkan" keamanan.

Peter Moskovits
sumber
itulah yang saya miliki tetapi saya menyadari bahwa server soket AIR yang saya gunakan tidak aman, saya harus menulis ulang untuk menggunakan flash.net.SecureSocket ...
Eric
Flash memiliki masalah yang serius juga ... Apakah Anda membangun server WebSocket (jika demikian, mengapa), atau apakah Anda membuat aplikasi?
Peter Moskovits
1
Saya memiliki server soket AIR yang menjalankan ya.
Eric
Jadi bagaimana memilih WSS jika halaman tidak dimuat dengan HTTP?
anatoly techtonik
29

Anda tidak dapat menggunakan WebSockets melalui HTTPS, tetapi Anda dapat menggunakan WebSockets melalui TLS (HTTPS adalah HTTP melalui TLS). Cukup gunakan "wss: //" di URI.

Saya yakin versi Firefox terbaru tidak akan membiarkan Anda menggunakan non-TLS WebSockets dari halaman HTTPS, tetapi sebaliknya seharusnya tidak menjadi masalah.

kanaka
sumber
Jadi apa solusinya? Saya memiliki server WS yang menjalankan http sekarang saya membeli SSL dan browser tidak lagi mengizinkan saya untuk terhubung dengan WS. Saya mengubah WS ke WSS: // dan sekarang tidak terhubung dengan WebSocket
muaaz
@muaaz server WebSocket Anda harus berjalan dalam mode WSS dan sebaiknya dimuat dengan sertifikat / kunci SSL yang sama dengan server web Anda yang melayani halaman web asal Anda yang mencoba menyambung ke server websocket.
kanaka
4
Terima kasih. btw, saya baru saja menyelesaikannya dengan Proxying (menggunakan apache) permintaan dari wss://ke ws://. Jadi, saya menggunakan wss://ws.domain.comdan apache menerapkan proxy di atasnya dan mengarahkan permintaan di mana server WS berjalan. mis ws://10.12.23.45:5641/server.php. : . dan saya tahu ini solusi yang sangat buruk - meskipun, ini berhasil untuk saya. Saya akan menghargai bantuan Anda jika Anda memandu saya melalui konfigurasi apache. misalnya: di mana harus meletakkan .certdll terima kasih!
muaaz
@muaaz maaf, saya tidak tahu konfigurasi apache selain googling sendiri.
kanaka
21

1 peringatan tambahan (selain jawaban oleh kanaka / peter): jika Anda menggunakan WSS, dan sertifikat server tidak dapat diterima oleh browser, Anda mungkin tidak mendapatkan dialog yang diberikan browser (seperti yang terjadi pada halaman Web). Ini karena WebSockets diperlakukan sebagai apa yang disebut "sub-sumber", dan sertifikat menerima / pengecualian keamanan / dialog apa pun tidak diberikan untuk sub-sumber.

oberstet
sumber
Meskipun sertifikatnya sama dengan yang digunakan untuk HTTPS?
vekah
1
Apa yang Anda maksud dengan "dialog perenderan browser"? Suka alert()?
Ivan Perevezentsev
2
Dialog yang aslinya berasal dari dalam browser (bukan halaman). Seperti "sertifikat ini tidak valid, apakah Anda ingin melanjutkan?"
oberstet
jadi apakah ada cara untuk mengatasinya? jika saya menggunakan sertifikat yang ditandatangani sendiri, apakah saya masih dapat menggunakan websocket?
OhadR