失效链接处理 |
华为大数据应用开发指南 PDF 下载
本站整理下载:
相关截图:
主要内容:
Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者”,后来沿用作为
安全认证的概念,使用Kerberos的系统在设计上采用“客户端/服务器”结构与AES等
加密技术,并且能够进行相互认证(即客户端和服务器端均可对对方进行身份认
证)。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称
密钥体制进行密钥管理的系统。
结构
Kerberos的原理架构如 图1-1所示,各模块的说明如 表1-1所示。
图 图 1-1 原理架构
表 表 1-1 模块说明
模块 说明
Application Client 应用客户端,通常是需要提交任务(或
者作业)的应用程序。
Application Server 应用服务端,通常是应用客户端需要访
问的应用程序。
Kerberos 提供安全认证的服务。
KerberosAdmin 提供认证用户管理的进程。
KerberosServer 提供认证票据分发的进程。
步骤原理说明:
应用客户端(Application Client)可以是集群内某个服务,也可以是客户二次开发的一
个应用程序,应用程序可以向应用服务提交任务或者作业。
FusionInsight HD
应用开发指南 1 安全模式
文档版本 03 (2016-10-25) 华为专有和保密信息
版权所有 © 华为技术有限公司
2
1. 应用程序在提交任务或者作业前,需要向Kerberos服务申请TGT(Ticket-Granting
Ticket),用于建立和Kerberos服务器的安全会话。
2. Kerberos服务在收到TGT请求后,会解析其中的参数来生成对应的TGT,使用客户
端指定的用户名的密钥进行加密响应消息。
3. 应用客户端收到TGT响应消息后,解析获取TGT,此时,再由应用客户端(通常
是rpc底层)向Kerberos服务获取应用服务端的ST(Server Ticket)。
4. Kerberos服务在收到ST请求后,校验其中的TGT合法后,生成对应的应用服务的
ST,再使用应用服务密钥将响应消息进行加密处理。
5. 应用客户端收到ST响应消息后,将ST打包到发给应用服务的消息里面传输给对应
的应用服务端(Application Server)。
6. 应用服务端收到请求后,使用本端应用服务对应的密钥解析其中的ST,并校验成
功后,本次请求合法通过。
基本概念
以下为常见的基本概念,可以帮助用户减少在学习Kerberos框架所花费的时间,有助于
更好的理解Kerberos业务。
TGT
票据授权票据(Ticket-Granting Ticket),由Kerberos服务生成,提供给应用程序与
Kerberos服务器建立认证安全会话,该票据的默认有效期为24小时,24小时后该票据自
动过期。
TGT申请方式:
1. 通过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;
}
2. 通过客户端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"));
|