下载中心 | 网站地图 | 站内搜索 | 加入收藏

安恒公司 / 技术文章 / 安恒公司网管员手记 / qmail-smtp增加smtp-auth认证

2011-01-09 刘世伟  阅:    下页:
qmail-smtp增加smtp-auth认证
邮件系统 qmail+vpopmail+mysql帐号管理

vpopmailvchkpw程序, 用来实现smtp的帐号认证, smtp认证*般有3种方式, PLAIN,login,CRAM-MD5,
其中CRAM-MD5的实现, 其实就是传递md5值进行认证, 而在服务器端, 需要知道真实的密码,来运算md5值, 也就是说数据库的pw_clear_passwd字段, 必需是真实的原始密码.
如果是用php程序管理这些数据库帐号, 就*定要把真实密码放进来, 否则CRAM-MD5的模式就不能执行.


vpopmail的configure参数中, 如果 --enable-logging=v, 就会显示大量的log, 包括认证密码什么的都会显示出来,不妨用这个来查找问题,
另外,还可以在.c中 , 增加syslog,把需要的调试信息,输出到syslog中,方法:
增加*个 #include  <syslog.h>
然后直接使用syslog(0,"[con=%s,pass=%s]",con,password);
在生产环境, 上面的调试功能*定要关闭.


另外 vchkpw中关于cram-md5的认证过程,有2个参数,搞反了, 需要调整过来,
retrieving revision 1.1
diff -u -r1.1 vchkpw.c
--- vchkpw.c    9 Jun 2011 17:01:15 -0000       1.1
+++ vchkpw.c    9 Jun 2011 17:04:32 -0000
@@ -744,7 +744,7 @@
    unsigned char h;
    int j;

-   hmac_md5( challenge, strlen(challenge), password, strlen(password), digest);
+   hmac_md5( (unsigned char *) response, strlen(response), (unsigned char *) password, strlen(password), digest);

    digascii[32]=0;

@@ -756,7 +756,7 @@
      digascii[(2*j)+1]=hextab[h];
    }
    /* printf("digascii: %s, response: %s", digascii, response); */
-   return(strcmp(digascii,response));
+   return(strcmp(digascii,challenge));
 }
 



ucspi-ssl提供*个外壳, 调用qmail-smtpd or  qmail-pop3,对网络流量进行ssl加密,
ucspi-ssl-0.70有个bug会造成sslserver崩溃segfault, 在dmesg里面可以看到,根据符号,是因为str_len访问了非法地址.
*后找到ucspi-ssl-0.70.2的版本,升*后解决问题.

--- to be continue --
下页:   

相关文章
qmail错误: CNAME_lookup_failed_temporarily._ #4.4.3 - 16-02-25 - 阅读: 134700
qmail 白*单功能以及iptables防火墙联动 - 07-10-17 - 阅读: 208287
debian下安装qmail+clamav+webmail - 07-04-03 - 阅读: 241150
qmail+debian --安恒网管员手记 - 06-01-15 - 阅读: 267907
qmail 发信进程数设置 ——邮件系统的管理 - 04-08-12 - 阅读: 203056
安恒网管员手记: vpopmail与 qmailadmin升* - 04-08-09 - 阅读: 221718
安恒网管员手记: vpopmail的密码自学习功能 - 04-08-09 - 阅读: 184279
vpopmail管理员手册 - 02-12-16 - 阅读: 158445

Email给朋友 打印本文
版权所有·安恒公司 Copyright © 2004   dsp-4000.anheng.com.cn   All Rights Reserved    
北京市海淀区*体南路9号 主语国际商务中心4号楼8层 (邮编100048) 电话:010-88018877