MQ安全性退出UserID / PWD传递问题

时间:2013-06-27 08:50:41

标签: c api ibm-mq mq

我们目前正在为SVRCONN频道实施安全出口。此出口将对我们的LDAP(AD或UNIX)进行身份验证。我们当前的出口实现仅适用于来自MQ EXPLORER的连接。

当我们编写连接并传递userID / PWD的代码时,安全出口将在客户端计算机上获取用户帐户登录。

以下是我们如何连接到MQ

的片段

代码:

MQCNO ConnectOptions = {MQCNO_DEFAULT};
MQCD ClientConn = {MQCD_CLIENT_CONN_DEFAULT}; 
MQCSP mqCSP = {MQCSP_DEFAULT}; 
MQHCONN HConn; 
MQLONG CompCode; 
MQLONG Reason; 
char QMName[MQ_Q_MGR_NAME_LENGTH+1]="QMGRNAME"; 
char channelName[MQ_CHANNEL_NAME_LENGTH+1]="MY_CHANNEL"; 
char hostname[1024]="MQSERVER(PORT)"; 
char UserId[32+1]="MyID"; 
char Password[32+1]="MyPWD"; 
strncpy(ClientConn.ConnectionName, hostname, MQ_CONN_NAME_LENGTH); 
strncpy(ClientConn.ChannelName, channelName, MQ_CHANNEL_NAME_LENGTH); 
mqCSP.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD; 
mqCSP.Version = MQCSP_VERSION_1; 
mqCSP.CSPUserIdPtr = &UserId; 
mqCSP.CSPUserIdOffset = 0; 
mqCSP.CSPUserIdLength = strlen(UserId); 
mqCSP.CSPPasswordPtr = &Password; 
mqCSP.CSPPasswordOffset = 0; 
mqCSP.CSPPasswordLength = strlen(Password); 
ConnectOptions.SecurityParmsPtr = &mqCSP; 
ConnectOptions.SecurityParmsOffset = 0; 
ConnectOptions.ClientConnPtr = &ClientConn; 
ConnectOptions.Version = MQCNO_VERSION_5; 
MQCONNX (QMName, &ConnectOptions, &HConn, &CompCode, &Reason);

然后我们使用此代码检索安全出口上的userID / PWD。 代码:

memset (User, 0, pChDef->LongRemoteUserIdLength);
memset (Pass, 0, MQ_PASSWORD_LENGTH); 
MakeCString(User,pChDef->LongRemoteUserIdPtr,pChDef->LongRemoteUserIdLength); 
MakeCString(Pass,pChDef->RemotePassword,MQ_PASSWORD_LENGTH); 

MQ Server-> 7.1.0.2

1 个答案:

答案 0 :(得分:1)

为什么在有便宜的产品对LDAP服务器进行身份验证时,您会重新发明轮子?如果您花了一天以上的时间编程,那么您可以购买MQ Authenticate Security Exit的许可证并完成其他工作。

MQ仅以纯文本形式传输密码。如果您熟悉MQ或只是使用WireShark,因为它知道/了解MQ协议,很容易获取该密码。

MQ在客户端和服务器之间使用2种不同的用户ID和密码流式:“旧”和“新”样式。不同平台支持不同风格。一些支持直接支持和一些支持间接和一些平台同时进行转换和流动(非常奇怪!)。

如果无法重建应用程序,可以重建所有应用程序以使用MQCONNX,这很好吗?或者应用程序团队不想这样做或源代码丢失。那些不支持MQCONNX的第三方应用程序呢?你打算做什么?

MQ JNDI或CCDT(客户端通道表定义)或新的“MQClient.ini”文件怎么样?您是否考虑过如何处理这些实现?

您将轻松花费6个月(即1000小时)构建一个工作原型,其中涵盖了我强调的一些问题。你是一个受伤的世界。我知道,我去过那里。