分类:
2009-07-08 21:14:35
TUXEDO在其系统框架中集成了进程间通讯安全功能。在商业应用中可以由用户决定安全级别。
本节中,我们将讨论TUXEDO提供的不同的安全保障能力和应用实现的必要步骤。
l 概念
l 管理文件和命令
l ubbconfig
l API使用说明
l 代码范例
TUXEDO系统在第一次ATMI调用时——tpinit()就进行安全工作。
安全级别信息先传入tpinit(),在公告牌上进行校验,然后用AUTHSVR进行二次检查。如果验证通过,tpinit()允许客户端连上TUXEDO系统。
TUXEDO API tpchkauth()用来决定应用的安全级别。下表是各安全级别认证需要的资源。
tpchkauth()的返回值 |
管理文件设置 |
UBBCONFIG的设置 |
TPNOAUTH |
|
|
TPSYSAUTH |
|
SECURITY APP_PW |
TPAPPAUTH |
tpusr tpgrp tpacl |
SECURITY USERAUTH ACL MANDATORY_ACL AUTHSVC AUTHSVC |
组命令
tpgrpadd –g GID groupname
tpgrpdel groupname
tpgrpmod –g GID –n new_groupname groupname
入口在$APPDIR/tpgrp
用户命令
tpusradd –u UID –g GID –c clntname usrname
tpusrdel –c clntname
tpusrmod –u UID –g GID –c clntname –l newlogin –n newclntname –p usrname
入口在$APPDIR/tpusr
ACL命令
tpacladd –g GID entity_name
tpacldel entity_name
tpaclmod –g GID entity_name
入口在$APPDIR/tpacl
简要说明
以上管理命令维护AUTHSVR的安全入口。只有安全级别要求到ACL(Access Control List)时,这些操作过程才是必须的。
AUTHSVR对每一个用户进行认证。当客户端进程调用tpinit()去连接应用时,发生以下过程:
AUTHSVR校验用户名,客户端名和密码
当成功,AUTHSVR提供一不可伪造的应用key
每次交易请求时,客户端都要提交此应用key
*RESOURCES
AUTHSVC “..AUTHSVC”
SECURITY “ACL”
*SERVERS
AUTHSVR SVRGRP=”AUTHGRP” SRVID=100
RESTART=Y MAXGEN=2 GRACE=0
CLOPT=”-A”
AUTHSVR提供的交易名字叫“..AUTHSVC”
SECURITY设置了安全的级别
#include “atmi.h”
int ConnectToTuxedo()
{
FBFR *f;
TPINIT *tpinfo;
char *passwd2=”penquin”;
int do_auth = 0,no_auth = 0;
do_auth = tpchkauth();
switch(do_auth)
{
case -1:
printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));
return(-1);
case TPNOAUTH:
no_auth = 1;
break;
case TPSYSAUTH:
tpinfo = (TPINIT *)tpalloc(“TPINIT”, NULL, 0);
if (tpinfo ==NULL)
{
printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));
return(-1);
}
break;
case TPAPPAUTH:
tpinfo = (TPINIT *)tpalloc(“TPINIT”, NULL, TPINITNEED(15));
if (tpinfo ==NULL)
{
printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));
return(-1);
}
tpinfo->datalen=strlen(passwd)+1;
memcpy((char *)&tpinfo->data, passwd2, tpinfo->datalen);
break;
default:
printf(“Invalid security setting %d\n”,do_auth);
return(-1);
}
if (!no_auth)
{
strcpy(tpinfo->usrname,”tuxedo”);
strcpy(tpinfo->passwd,”hello”);
strcpy(tpinfo->grpname,” “);
}
if ((tpinit(TPINIT *)tpinfo))==-1
{
printf(“Failed to join application\n”);
return(-1);
}
}
tpchkauth()返回TPNOAUTH,TPSYSAUTH,TPAPPAUTH或错误用以决定加密强度。
tpalloc()将分配一个TPINIT结构,存储与公告牌对比的密码。
Struct TPINIT {
char usrname[MAXTIDENT+2];
char cltname[MAXTIDENT+2];
char passwd[MAXTIDENT+2];
char grpname[MAXTIDENT+2];
long flags;
long datalen;
long data;
}
tpalloc()还将根据TPINITNEED()分配一段空间存储用户密码。
用tpinit()与TUXEDO连接。