在客戶端是https:// 協議下,使用ws:// 協議鏈接會報錯的,得須要使用wss:// 鏈接。(ip鏈接失敗時使用域名鏈接)算法
netty建立服務端時,在初始化channl時,把handler加入ChannelPipeline時,在最開始那個handler設爲SslHandler:安全
SSLContext sslContext = SslUtil.createSSLContext(type ,path ,password); ///SslUtil自定義類
SSLEngine sslEngine = sslContext.createSSLEngine(); sslEngine.setUseClientMode(false); /// 是否使用客戶端模式 sslEngine.setNeedClientAuth(false); ////是否須要驗證客戶端
pipeline.addLast("ssl", new SslHandler(sslEngine));
SslUtil 類:
private static volatile SSLContext sslContext = null;
public
static SSLContext createSSLContext(String type ,String path ,String password) throws Exception {
if(null == sslContext){
synchronized (SslUtil.class) {
if(null == sslContext){
KeyStore ks = KeyStore.getInstance(type); /// "JKS"
InputStream ksInputStream = new FileInputStream(path); /// 證書存放地址
ks.load(ksInputStream, password.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, password.toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), null, null);
}
}
}
return sslContext; }
自制證書:工具
#keytool -genkey -keysize 2048 -validity 365 -keyalg RSA -dnam e "CN=gornix.com" -keypass 654321 -storepass 123456 -keystore gornix.jks
keytool爲JDK提供的生成證書工具加密
- -keysize 2048 密鑰長度2048位(這個長度的密鑰目前可認爲沒法被暴力破解)
- -validity 365 證書有效期365天
- -keyalg RSA 使用RSA非對稱加密算法
- -dname "CN=gornix.com" 設置Common Name爲gornix.com,這是個人域名
- -keypass 654321 密鑰的訪問密碼爲654321
- -storepass 123456 密鑰庫的訪問密碼爲123456(其實這兩個密碼也能夠設置同樣,一般都設置同樣,方便記)
- -keystore gornix.jks 指定生成的密鑰庫文件爲gornix.jks