tomcat服务加载华为认证配置顺序问题

华为平台版本号:FusionInsight V100R002C70SPC200
平台认证模式:安全模式
连接的服务包括solr cloud 和 hbase。
现象:用junittest测试solr cloud 可以正常连接和查询。但是在springcloud的服务中调用同样的代码,却发现连接zookeeper异常。
报错:KeeperErrorCode = ConnectionLoss for /clusterstate.json
解决:在springcloud启动时指定vm 参数,包括jaas.conf和krb5.conf的系统变量值。

-Djava.security.auth.login.config=C:\Users\104006123\AppData\Local\Temp\104006123.jaas.conf -Djava.security.krb5.conf=D:\workspace\workspace-springcloud\SpringCloudDemo\Service-C\src\main\resources\solrConf\krb5.conf

Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者”,后来沿用作为安全认证的概念,使用Kerberos的系统在设计上采用“客户端/服务器”结构与AES等加密技术,并且能够进行相互认证(即客户端和服务器端均可对对方进行身份认证)。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。
结构
Kerberos的原理架构如图1所示,各模块的说明如表1所示。
图1 原理架构

kerberos认证过程

表1模块说明
模块说明
Application Client应用客户端,通常是需要提交任务(或者作业)的应用程序。
Application Server应用服务端,通常是应用客户端需要访问的应用程序。
Kerberos提供安全认证的服务。
KerberosAdmin提供认证用户管理的进程。
KerberosServer提供认证票据分发的进程。

步骤原理说明:
应用客户端(Application Client)可以是集群内某个服务,也可以是客户二次开发的一个应用程序,应用程序可以向应用服务提交任务或者作业。
应用程序在提交任务或者作业前,需要向Kerberos服务申请TGT(Ticket-Granting Ticket),用于建立和Kerberos服务器的安全会话。
Kerberos服务在收到TGT请求后,会解析其中的参数来生成对应的TGT,使用客户端指定的用户名的密钥进行加密响应消息。
应用客户端收到TGT响应消息后,解析获取TGT,此时,再由应用客户端(通常是rpc底层)向Kerberos服务获取应用服务端的ST(Server Ticket)。
Kerberos服务在收到ST请求后,校验其中的TGT合法后,生成对应的应用服务的ST,再使用应用服务密钥将响应消息进行加密处理。
应用客户端收到ST响应消息后,将ST打包到发给应用服务的消息里面传输给对应的应用服务端(Application Server)。
应用服务端收到请求后,使用本端应用服务对应的密钥解析其中的ST,并校验成功后,本次请求合法通过。
基本概念
以下为常见的基本概念,可以帮助用户减少在学习Kerberos框架所花费的时间,有助于更好的理解Kerberos业务。以HDFS安全认证为例:
TGT
票据授权票据(Ticket-Granting Ticket),由Kerberos服务生成,提供给应用程序与Kerberos服务器建立认证安全会话,该票据的默认有效期为24小时,24小时后该票据自动过期。
TGT申请方式:
通过HDFS提供的接口获取(具体接口信息可以参考HDFS二次开发指南)。

private Boolean login(Configuration conf){ 
   boolean flag = false; 
   UserGroupInformation.setConfiguration(conf); 
     try { 
        UserGroupInformation.loginUserFromKeytab(conf.get(PRINCIPAL),conf.get(KEYTAB)); 
        System.out.println("UserGroupInformation.isLoginKeytabBased():" +UserGroupInformation.isLoginKeytabBased()); 
   flag = true; 
         } catch (IOException e) { 
   e.printStackTrace(); 
         } 
   return flag; 
         }

通过客户端shell命令以kinit方式获取,具体使用方式可参考Shell操作维护命令说明书。
ST
服务票据(Server Ticket),由Kerberos服务生成,提供给应用程序与应用服务建立安全会话,该票据一次性有效。
ST的生成在FusionInsight产品中,基于hadoop-rpc通信,由rpc底层自动向Kerberos服务端提交请求,由Kerberos服务端生成。
认证代码实例讲解

private  void init() throws IOException {  

        Configuration conf = new Configuration();  
        // conf file  
        conf.addResource(new Path(System.getProperty("user.dir")  
                + File.separator + "conf" + File.separator + "hdfs-site.xml"));  
        conf.addResource(new Path(System.getProperty("user.dir")  
                + File.separator + "conf" + File.separator + "core-site.xml"));  
        // security mode  
        if ("kerberos".equalsIgnoreCase(conf  
                .get("hadoop.security.authentication"))) {  

            // 注[1]  
            conf.set(PRINCIPAL, "hdfstest@HADOOP.COM");  
            // keytab file  
            conf.set(KEYTAB, System.getProperty("user.dir") + File.separator  
                    + "conf" + File.separator + "user.keytab");  
            // kerberos path  
            String krbfilepath = System.getProperty("user.dir")  
                    + File.separator + "conf" + File.separator + "krb5.conf";  
            System.setProperty("java.security.krb5.conf", krbfilepath);  
            login(conf); //注[2] 
        }  
        // get filesystem  
        try {  
            fSystem = FileSystem.get(conf); //注[3] 
        } catch (IOException e) {  
            throw new IOException("Get fileSystem failed.");  
        }  
    } 
private Boolean login(Configuration conf){  
    boolean flag = false;  
    UserGroupInformation.setConfiguration(conf);  

    try {  
      UserGroupInformation.loginUserFromKeytab(conf.get(PRINCIPAL), conf.get(KEYTAB));  
      System.out.println("UserGroupInformation.isLoginKeytabBased(): " +UserGroupInformation.isLoginKeytabBased());  
      flag = true;  
    } catch (IOException e) {  
      e.printStackTrace();  
    }  
    return flag;  
  }

说明:
b代码片段为配置Kerberos认证所需要的文件参数,主要包含keyta路径,Kerberos认证的用户名称,Kerberos认证所需要的客户端配置krb5.conf文件。
代码片段为调用hadoop的接口执行Kerberos认证,生成TGT票据。
调用hadoop的接口访问文件系统,此时底层RPC会自动携带TGT去Kerberos认证,生成ST票据。
参考华为工具说明:
华为企业服务
Kerberos交互过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值