netty通信的tls部分

package  securechat2;
 
import  io.netty.util.internal.SystemPropertyUtil;
 
import  javax.net.ssl.KeyManagerFactory;
import  javax.net.ssl.SSLContext;
import  javax.net.ssl.TrustManagerFactory;
import  java.io.FileInputStream;
import  java.security.KeyStore;
 
public  final  class  SecureChatSslContextFactory {
 
     private  static  final  String PROTOCOL =  "TLS" ;
     private  static  final  SSLContext SERVER_CONTEXT;
     private  static  final  SSLContext CLIENT_CONTEXT;
 
 
     private  static  String CLIENT_KEY_STORE =  "E:\\javassl2\\sslclientkeys" ;
     private  static  String CLIENT_TRUST_KEY_STORE =  "E:\\javassl2\\sslclienttrust" ;
     private  static  String CLIENT_KEY_STORE_PASSWORD =  "123456" ;
     private  static  String CLIENT_TRUST_KEY_STORE_PASSWORD =  "123456" ;
 
 
     private  static  String SERVER_KEY_STORE =  "E:\\javassl2\\sslserverkeys" ;
     private  static  String SERVER_TRUST_KEY_STORE =  "E:\\javassl2\\sslservertrust" ;
     private  static  String SERVER_KEY_STORE_PASSWORD =  "123456" ;
     private  static  String SERVER_TRUST_KEY_STORE_PASSWORD =  "123456" ;
 
     static  {
         String algorithm = SystemPropertyUtil.get( "ssl.KeyManagerFactory.algorithm" );
         if  (algorithm ==  null ) {
             algorithm =  "SunX509" ;
         }
 
         SSLContext serverContext;
         SSLContext clientContext;
         try  {
             KeyStore ks = KeyStore.getInstance( "JKS" );
             ks.load( new  FileInputStream(SERVER_KEY_STORE), SERVER_KEY_STORE_PASSWORD.toCharArray());
             KeyStore tks = KeyStore.getInstance( "JKS" );
             tks.load( new  FileInputStream(SERVER_TRUST_KEY_STORE), SERVER_TRUST_KEY_STORE_PASSWORD.toCharArray());
 
             // Set up key manager factory to use our key store
             KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
             TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );
             kmf.init(ks, SERVER_KEY_STORE_PASSWORD.toCharArray());
             tmf.init(tks);
 
             // Initialize the SSLContext to work with our key managers.
             serverContext = SSLContext.getInstance(PROTOCOL);
             serverContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(),  null );
         catch  (Exception e) {
             throw  new  Error( "Failed to initialize the server-side SSLContext" , e);
         }
 
         try  {
             KeyStore ks2 = KeyStore.getInstance( "JKS" );
             ks2.load( new  FileInputStream(CLIENT_KEY_STORE), CLIENT_KEY_STORE_PASSWORD.toCharArray());
 
             KeyStore tks2 = KeyStore.getInstance( "JKS" );
             tks2.load( new  FileInputStream(CLIENT_TRUST_KEY_STORE), CLIENT_TRUST_KEY_STORE_PASSWORD.toCharArray());
             // Set up key manager factory to use our key store
             KeyManagerFactory kmf2 = KeyManagerFactory.getInstance(algorithm);
             TrustManagerFactory tmf2 = TrustManagerFactory.getInstance( "SunX509" );
             kmf2.init(ks2, CLIENT_KEY_STORE_PASSWORD.toCharArray());
             tmf2.init(tks2);
             clientContext = SSLContext.getInstance(PROTOCOL);
             clientContext.init(kmf2.getKeyManagers(), tmf2.getTrustManagers(),  null );
         catch  (Exception e) {
             throw  new  Error( "Failed to initialize the client-side SSLContext" , e);
         }
 
         SERVER_CONTEXT = serverContext;
         CLIENT_CONTEXT = clientContext;
     }
 
 
     public  static  SSLContext getServerContext() {
         return  SERVER_CONTEXT;
     }
 
 
     public  static  SSLContext getClientContext() {
         return  CLIENT_CONTEXT;
     }
 
     private  SecureChatSslContextFactory() {
         // Unused
     }
}

该类管理服务器端和客户端的SSLContext,通过两个方法分别得到服务器和客户端的sslcontext环境变量

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值