1. 程式人生 > >netty做服務端支援ssl協議實現websocket的wss協議(客戶端為瀏覽器)

netty做服務端支援ssl協議實現websocket的wss協議(客戶端為瀏覽器)

也是在網上查的資料,整理一下相互學習下

第一步:生成SSL證書:

    因為是測試,直接使用jdk自帶的keytool工具生成自簽名證書(注:自簽名證書是不被瀏覽器認可的,只能用於測試),

    --開啟cmd

   --輸入命令(複製啊):keytool -genkey -keysize 2048 -validity 365 -keyalg RSA -keypass netty123 -storepass netty123 -keystore wss.jks

第二步:在ChannelPipeline新增SslHandler:

    首先寫個工具類:SslUtil配置SSLContext

	public static SSLContext createSSLContext(String type ,String path ,String password) throws Exception {
	    KeyStore ks = KeyStore.getInstance(type); /// "JKS"
	    InputStream ksInputStream = new FileInputStream(path); /// 證書存放地址
	    ks.load(ksInputStream, password.toCharArray());
	 	//KeyManagerFactory充當基於金鑰內容源的金鑰管理器的工廠。
	    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());//getDefaultAlgorithm:獲取預設的 KeyManagerFactory 演算法名稱。
	    kmf.init(ks, password.toCharArray());
	    //SSLContext的例項表示安全套接字協議的實現,它充當用於安全套接字工廠或 SSLEngine 的工廠。
	    SSLContext sslContext = SSLContext.getInstance("TLS");
	    sslContext.init(kmf.getKeyManagers(), null, null);
	    return sslContext;
	}

新增SslHandler(放在第一個)

        @Override
        public void initChannel(SocketChannel ch) throws Exception {
            SSLContext sslContext = SslUtil.createSSLContext("JKS","D://wss.jks","netty123");
            //SSLEngine 此類允許使用ssl安全套接層協議進行安全通訊
            SSLEngine engine = sslContext.createSSLEngine(); 
            engine.setUseClientMode(false); 
            
            ch.pipeline().addLast(new SslHandler(engine));
            ch.pipeline().addLast(new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS));    
            ch.pipeline().addLast("http-codec", new HttpServerCodec());            
            ch.pipeline().addLast("aggregator", new HttpObjectAggregator(65536));  
            ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler());    
            ch.pipeline().addLast(new AcceptorIdleStateTrigger());    
            ch.pipeline().addLast("handler", new WebSocketHandler());            
        }

 JS檔案的URL:

var url = "wss://localhost:8000/ws";

第三步:執行

    執行服務端,在瀏覽器位址列輸入https://localhost:8000/  瀏覽器會提示這是不安全的連線(瀏覽器不信任自簽名證書,如果有域名可以自己申請一個證書,網上有免費測試版的證書),新增例外信任,再在html頁面上右鍵獲得它的本地路徑 在瀏覽器中執行   連線成功

相關推薦

反射+代理實現 API Hook以 ActivityManager

最近看Android招聘資訊,發現一個自己不太會的點 hook 機制,查了一下資料,現在整理一下。特別感謝acxingyun同學提供了詳細的姿勢。點選地址 什麼是 Hook hook 翻譯過來是鉤子的意思。 目的就是在事件傳送到終點前截獲並監控事件的傳輸

netty服務支援ssl協議實現websocket的wss協議客戶瀏覽器

也是在網上查的資料,整理一下相互學習下第一步:生成SSL證書:    因為是測試,直接使用jdk自帶的keytool工具生成自簽名證書(注:自簽名證書是不被瀏覽器認可的,只能用於測試),    --開啟cmd   --輸入命令(複製啊):keytool -genkey -ke

Springboot專案Netty服務並自定義Gson配置類解析資料包

簡述 Springboot專案中使用 Netty 作為服務端,接收並處理其他平臺傳送的 Json資料包,處理拆包、粘包及資料包中時間型別是 long 型別需轉成 ***Date***的情況。 專案流程 啟動專案,開啟Netty服務埠11111 載入

【轉】文件下載之斷點續傳客戶服務實現

http協議 當前時間 end box [] ada demo 服務端 sem 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 前面講了文件的上傳,今天來聊聊文件的下載。 老規矩,還是從最簡單粗暴的開始。那麽多簡單算簡單

go語言實現unix domain socket 客戶/服務

sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo

c++實現簡單的Http客戶協議,WebRequest

      最近要寫一個代理程式,軟體最終要跑在嵌入式裝置上,其中一部分是需要做一個簡單爬蟲程式,用來操作嵌入式裝置的Web服務上的資訊,我不想用第三方的任何庫,如是簡單看了下http協議,用一天時間實現了http協議的客戶端,實現Get,Post,UpFile(檔案上傳)等

hessian實現客戶服務在同一個專案中

Hessian是基於HTTP的輕量級遠端服務解決方案,Hessian像Rmi一樣,使用二進位制訊息進行客戶端和伺服器端互動。但與其他二進位制遠端呼叫技術(例如Rmi)不同的是,它的二進位制訊息可以移植其他非Java的語言中。 通過Servlet繫結服務 一、建立Hessian程式的4個步驟 定義

使用eclipse paho在java實現MQTT訊息的收發客戶服務例項

一、MQTT(訊息佇列)簡介 MQTT(MQ Telemetry Transport)是IBM開發的一種網路應用層的協議,提供輕量級的,支援可釋出/可訂閱的的訊息推送模式,使裝置對裝置之間的短訊息通訊變得簡單,比如現在應用廣泛的低功耗感測器,手機、嵌入式計算機

Android專案開發筆記之登入註冊模組實現客戶+服務

寫在前面   斷斷續續開發了幾個月的App終於告一段落,雖然它可能還很不完美,不過作為上手Android的第一個完整專案,確實從中學到了蠻多,所以開個系列記錄一下~本篇先從基本上每個App都會有的登入註冊講起,包含自動登入、記住密碼功能的實現=w= 實現

建立資料庫並實現TCP通訊,客戶登陸伺服器身份驗證之服務程式設計

m_pRecordsetB->Open((_variant_t)flsql,dlg->m_pConnectionB.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);//開啟資料庫獲得符合條件              

jax-ws實現Webservice入門教程 (客戶呼叫服務實現)

前兩節中簡單的介紹了一下基本的JAX-WS API的使用,這一節更進一步的介紹一些其他的內容 一、wsimport工具的使用 在第二節中(http://liugang594.iteye.com/blog/1343608),可以看到要手動建立一個client端進行一次正確的呼叫,需要關注的東西還是挺

Python實現udp協議的簡單伺服器和客戶通訊

簡單socket程式在兩臺電腦之間傳輸訊息,分為客戶端和服務端,分別在兩臺電腦上執行後即可進行簡單的訊息傳輸,也可以在一臺電腦上測試,設定兩個不同的埠即可 以下是程式碼在一臺電腦上執行,開兩個終端即可

NETC#接入Dubbo服務,Zookeeper作為Dubbo服務的註冊中心,實現thrift協議訪問介面(1)

專案要接入thrift,面對完全陌生的東西,學習的過程記錄。 開發環境: 系統:Windows 工具:VS2012 最新版thrift 下載:http://thrift.apache.org/download 點選下載thrift-0.9.3.exe,放在某個目錄下。我

.net core 和 WPF 開發升訊威線上客服與營銷系統:使用 TCP協議 實現穩定的客服

本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威線上客服與營銷系統 的過程。本產品已經成熟穩定並投入商用。 線上演示環境:[https://kf.shengxunwei.com](https://kf.shengxunwei.com) 注意:演示環境僅供演示交流與評估,不保證 7x24 小

python實現ftp客戶

index 登錄 容器 socket per add gbk 默認值 interact 該文檔為用python3實現ftp上傳下載等功能。 1 import optparse 2 import socket 3 import json,os 4 import sh

Nginx+keepalived雙機熱備,實現負載均衡主主模式

nginx keepalive Keepalived: 簡介:Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepali

springmvc之json的數據請求客戶發送json數據到服務

index.jsp null 字符串 n-2 func mda 客戶 請求 spring index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncodi

unity_小功能實現客戶相互通信功能

直接 endpoint 客戶端和服務器端 network hat sockets odi family void 服務器端:在VS中新建項目,用於服務器的搭建 using System;using System.Collections.Generic; using

用redis實現悲觀鎖語言以php

號碼 blank mys 時間 先來 ng-click print -m 兩種 1479 鎖機制 通常使用的鎖分為樂觀鎖,悲觀鎖這兩種,簡單介紹下這兩種鎖,作為本文的背景知識,對這類知識已經有足夠了解的同學可以跳過這部分。 樂觀鎖 先來看下百度百科上的解釋

Android 音視頻深入 十五 FFmpeg 實現基於Rtmp協議的推流附源碼下載

音視頻 FFmpeg Rtmp 推流 源碼地址https://github.com/979451341/Rtmp 1.配置RTMP服務器 這個我不多說貼兩個博客分別是在mac和windows環境上的,大家跟著弄MAC搭建RTMP服務器https://www.jianshu.com/p/6fce