Netty 實現SSL安全鏈接(wss://)

原文:Netty5使用自簽證書實現SSL安全鏈接html

在客戶端是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
相關文章
相關標籤/搜索