Netty 實現SSL安全連線(wss://)

不知為何就叫呵呵發表於2018-03-15

原文:Netty5使用自簽證書實現SSL安全連線

在客戶端是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

相關文章