JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區 » Networking  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 簡化版Websocket 示範程式
roytsang





發文: 618
積分: 1
於 2018-03-15 03:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟做了一個Websocket 示範程式和大家分享,

背景
由於要建立Secure WebSocket connection (i.e. wss://) 必須要在server 端安裝安全證書(SSL certificate),
為了資料不用外洩,我又不想購買安全證書,所以在建立普通WebSocket connection (i.e. ws://) 之後,
由client side(i.e. browser) 生成RSA key pair,然後由client side 把RSA public key send 去server side,
server side 在WebSocket connection 建立好之後就生成AES key,當client side 傳來RSA public key 之後,
就用RSA public key來對AES key做加密,再傳回給client side,client side就用RSA private key 來server side
傳來的message 來解密,解密之後雙方就可以用相同的AES key來將要傳出去的message 加密,和將
收回來的message 做解密。

Server side
小弟用了
Netty network application framework.
Bouncy Castle

Client side
小弟用了
CryptoJS library
jQuery library
今次用了ES6 裡面的promise 機制來寫websocket object, 令這個object 用來起來方便很多。

我已經將相闗程式放在GIT hub,網址如下:
https://github.com/KNVB/WebSocketDemo

PS:由於這是示範程式,所以沒有對invalid request URI 作處理.
Client side 網頁如果在本機執行,只可以在Firefox 和Chrome 上執行。


roytsang edited on 2018-03-15 03:50
reply to postreply to post
作者 Re:簡化版Websocket 示範程式 [Re:roytsang]
kentyeh





發文: 642
積分: 6
於 2018-03-15 09:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
真是有趣的想法,整個過程完全是SSL Handshake的標準作法, Smile

另外給個建議,其實你不用放那麼多 JS Library在專案內,
只要包含jsencrypt.jarcryptojs.jar這兩個Jar檔就可以了,

因為Serverlet 3.0後會把路徑 META-INF/resources 下的檔案視為靜態資料,
相關資料參考這裡


reply to postreply to post
作者 Re:簡化版Websocket 示範程式 [Re:kentyeh]
roytsang





發文: 618
積分: 1
於 2018-03-16 05:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
kentyeh wrote:
真是有趣的想法,整個過程完全是SSL Handshake的標準作法, Smile


>>當初真的想用RS KEY來encrypt data, 可是因為RSA Key 不能encrypt 長過256 byte 的data,
所以轉用AES key, 不想買cert. 唯有這樣。


另外給個建議,其實你不用放那麼多 JS Library在專案內,
只要包含jsencrypt.jarcryptojs.jar這兩個Jar檔就可以了,

因為Serverlet 3.0後會把路徑 META-INF/resources 下的檔案視為靜態資料,
相關資料參考這裡


>>先多謝你的提點,因為我的目標不是做JSP application, 而是想做single page application.希望可以在手機或平板上都得跑,可是在Edge 已經跑不動

Black Eye


reply to postreply to post
» JWorld@TW »  Java 程式分享區 » Networking

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8