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"); 

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.


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.