XMPP 3920 ×î¿¿Æ×µÄÖÐÎÄ·­ÒëÎĵµ ÏÂÔØ±¾ÎÄ

6£®Ê¹ÓÃSASL 6£®1 ¸ÅÊö

XMPP°üº¬Ò»¸öÈÏÖ¤Á÷µÄ·½·¨£¬´Ë·½·¨ÒÀ¿¿Ò»¸ö¼òµ¥ÈÏÖ¤Ó밲ȫ²ã£¨SASL£©Ð­Òé[SASL]µÄXMPP-specific profile¡£SASLÌṩһ¸öÒ»°ã»¯·½·¨£¬ÓÃÓÚ¸ø»ùÓÚÁ¬½ÓµÄЭÒé¼ÓÈÏÖ¤Ö§³Ö£¬²¢ÇÒ£¬XMPPʹÓÃÒ»¸öÒ»°ã»¯XMLÃüÃû¿Õ¼äprofile£¬ÓÃÓÚ SASL£¬×ñ´Ó[SASL]µÄprofilingÐèÇó¡£

ÒÔϹæÔòÓ¦Óãº

1£© Èç¹ûÁ½¸ö·þÎñÆ÷¼ä·¢ÉúSASLЭÉÌ£¬Ö±µ½ÓÉ·þÎñÆ÷Ðû³ÆµÄÓòÃûϵͳ£¨DNS£©Ö÷»úÃû±»½âÎöÁË£¨²Î¿¼·þÎñÆ÷µ½·þÎñÆ÷ͨÐÅ£¨14.4£©£©£¬Í¨ÐŲſɴ¦Àí¡£

2£© Èç¹ûʵʼʵÌåÄܹ»½øÐÐSASLЭÉÌ£¬£¬Ëü±ØÐëÔÚ³õʼÁ÷Í·Öаüº¬ÖµÖÁÉÙΪ¡°1.0¡±µÄ°æ±¾ÊôÐÔ¡£

3£© Èç¹û½ÓÊÕʵÌåÄܹ»½øÐÐSASLЭÉÌ£¬Ëü±ØÐëÔÚÒ»¸öÔªËØÖÐ¹ã¸æÒ»¸ö»ò¶à¸öÈÏÖ¤»úÖÆ£¬´ËÔªËØ¿¿ 'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÏìÓ¦´Ó³õʼʵÌ壨Èç¹û¿ª·ÅÁ÷±ê¼Ç°üº¬ËùÉèÖµÖÁÉÙΪ¡°1.0¡±µÄ°æ±¾ÊôÐÔ£© ½ÓÊյĿª·ÅÁ÷±ê¼ÇÈÏÖ¤¡£ 4£© ÔÚSASLЭÉÌÆÚ¼ä£¬ÊµÌå²»×¼ÔÚ¸ùÁ÷ÔªËØÖз¢ËÍÈκοհ××Ö·û£¨Æ¥Åä[XML]ÄÚÈÝ£¬²úÆ·[3]£©×÷ÎªÔªËØ¼ä£¨ÈκÎÔÚSASLÀý×ÓÖеĿհ××Ö·û¶¼Ö»ÊÇΪÁ˱ãÓÚÔĶÁ£©µÄ·Ö¸ô·û£»ÕâÖÖÏÞÖÆÓÐÖúÓÚÈ·±£ºÏÊʵݲȫ²ã×Ö½Ú¾«¶È¡£

5£© Èκΰüº¬ÔÚXMLÔªËØÖеÄXML×Ö·ûÊý¾Ý£¬ÔÚSASLЭÉÌÆÚ¼äʹÓ㬱ØÐëʹÓÃbase64±àÂ룬±àÂëÔÚRFC3548µÚÈý½ÚÓж¨Òå¡£

6£© Èç¹ûËùÌṩµÄÒ»¸ö¡°¼òµ¥Óû§Ãû¡±Äܹ»±»Ñ¡¶¨SASL»úÖÆ£¨Àý£ºÓÉDIGEST-MD5ÓëCRAM-MD5»úÖÆËùÖ§³Ö£¬µ«²»¿¿EXTERNALÓë GSSAPI»úÖÆËùÖ§³Ö£©ËùÖ§³Ö£¬ÔÚÈÏÖ¤ÆÚ¼ä£¬³õʼʵÌåÓ¦µ±×÷Ϊ¼òµ¥Óû§ÃûÌṩËüµÄ·¢ËÍÓò£¨IPµØÖ·»ò°üº¬ÔÚÓò±êʶ·ûÖеÄÈ«ÈÏÖ¤ÓòÃû£©ÔÚ·þÎñÆ÷¶Ô·þÎñÆ÷µÄ ͨÐÅÇé¿öÏ£¬»òÊÇËüµÄÒÑ×¢²áÕÊ»§Ãû£¨°üº¬ÔÚXMPP½áµã±êʶ·ûÖеÄÓû§»ò½áµãÃû£©ÔÚ¿Í»§µ½·þÎñÆ÷µÄͨÐÅÇé¿öÏ¡£

7£© Èç¹û³õʼʵÌåÏ£Íû´ú±íÆäËüʵÌåÓëÖ§³ÖÊÚȨÉí·Ý´«ÊäµÄ±»Ñ¡SASL»úÖÆÀ´Ðж¯£¬³õʼʵÌåÔÚSASLЭÉÌÆÚ¼ä±ØÐëÌṩһ¸öÊÚȨÉí·Ý¡£Èç¹û³õʼʵÌ岻ϣÍû´ú±íÁí Ò»¸öʵÌåÐж¯£¬Ëü²»×¼Ìṩһ¸öÊÚȨÉí·Ý¡£ÕýÈç[SASL]ÖÐÖ¸¶¨µÄ£¬³õʼʵÌå²»×¼Ìṩһ¸öÊÚȨÉí·Ý£¬³ý·ÇÒ»¸öÊÚȨÉí·Ý²»Í¬ÓÚȱʡÊÚȨÉí·Ý£¬´ËȱʡÊÚȨÉí·Ý ÅÉÉúÓÚÃèÊöÔÚ[SASL]ÖеÄÈÏÖ¤Éí·Ý¡£Èç¹ûÌṩÁË£¬ÊÚȨÉí·ÝÖµ¶Ô·þÎñÆ÷À´Ëµ±ØÐëÊÇÖµÐÎʽ£¨Àý£ºÖ»ÓÐÒ»¸öÓò±êʶ·û£©£¬

¶Ô¿Í»§ ¶ËÀ´Ëµ£¬±ØÐëÊÇÖµÐÎʽ£¨Àý£º½áµã±êʶ·ûÓëÓò±êʶ·û£©¡£

8£© ¿¿Éæ¼°µ½°²È«²ãЭÉ̵ÄSASLЭÉ̵ijɹ¦£¬½ÓÊÕʵÌ屨ÐëÅׯúÀ´×Ô±¾ÉíûÓлñµÃSASLЭÉ̵ijõʼʵÌåµÄÈκÎ֪ʶ¡£

9£© ¿¿Éæ¼°µ½°²È«²ãЭÉ̵ÄSASLЭÉ̵ijɹ¦£¬³õʼʵÌ屨ÐëÅׯúÀ´×Ô±¾ÉíûÓлñµÃSASLЭÉ̵ĽÓÊÕʵÌåµÄÈκÎ֪ʶ¡£

10£© ²Î¿¼±ØÐë±»Ö§³ÖµÄÏà¹Ø»úÖÆµÄÇ¿ÖÆÊµÊ©¼¼Êõ£¨14.7£©¡£

6£®2ÐðÊö

µ±³õʼʵÌåʹÓÃSASLÈÏÖ¤½ÓÊÕʵÌåʱ£¬²½ÖèÈçÏ£º

1£© ³õʼʵÌåÇëÇóSASLÈÏÖ¤£¬Í¨¹ýÔÚ¿ª·ÅXMLÁ÷Í·Öаüº¬°æ±¾ÊôÐÔ£¬²¢½«Æä·¢Ë͸ø½ÓÊÕʵÌ壬ÊôÐÔÖµÉèΪ¡°1.0¡±¡£

2£© ·¢ËÍÒ»¸öXMLÁ÷Í·×÷Ϊ»ØÓ¦ºó£¬½ÓÊÕʵÌå¹ã¸æÒ»¸ö¿ÉÀûÓõÄSASLÈÏÖ¤»úÖÆÁÐ±í£»ÁбíÖÐÿһÏî¶¼ÊÇÒ»¸öÔªËØ£¬×÷ ΪÈÝÆ÷ÔªËØµÄ×ÓÔªËØ£¬ÓÉ'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÈÏÖ¤£¬ÔÚÁ÷ ÃüÃû¿Õ¼äÖУ¬ÒÀ´ÎÊÇÔªËØµÄ×ÓÔªËØ¡£Èç¹ûʹÓÃTLS£¨5£©ÐèÒªÔÚÒ»¸öÌØ±ðÈÏÖ¤»úÖÆ¿ÉÄÜʹÓÃÖ®¼ä½¨Á¢£¬½ÓÊÕʵÌå²»×¼ÌṩÔÚ TLSЭÉÌ֮ǰµÄ¿ÉÀûÓÃSASLÈÏÖ¤»úÖÆÁбíÖеĻúÖÆ¡£Èç¹û³õʼʵÌåÔÚTLSЭÉÌ֮ǰ³öʾÁËÓÐЧ֤Ê飬½ÓÊÕʵÌåÓ¦µ±ÔÚSASLЭÉÌ£¨²Î¿¼[SASL]£©Ö® ¼ä£¬ÌṩSASL EXTERNAL»úÖÆ¸ø³õʼʵÌ壬ËäÈ»EXTERNAL»úÖÆ¿ÉÄÜÔÚÆäËü»·¾³Ï±»ÌṩÁË¡£

3£© ³õʼʵÌåÑ¡ÔñÒ»¸ö»úÖÆ£¬¿¿·¢ËÍÒ»¸öÒѱ»'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÈ϶¨ÎªºÏ¸ñ µÄÔªËØ¸ø½ÓÊÕʵÌ壬²¢Îª¡®mechanism¡¯ÊôÐÔ°üº¬Ò»¸öºÏÊʵÄÖµ¡£Èç¹û´Ë»úÖÆÐèÒªXML×Ö·ûÊý¾Ý£¬´ËÔªËØ¿ÉÄܰüº¬XML×Ö ·ûÊý¾Ý£¨ÔÚSASLÊõÓïÖУ¬¡°³õʼÏìÓ¦¡±£©£»Èç¹û³õʼʵÌåÐèÒª·¢ËÍÒ»¸ö0³¤¶ÈµÄ³õʼÏìÓ¦£¬Ëü±ØÐë°´Ò»¸öµ¥µÈºÅ·ûºÅ£¨¡°=¡±£©´«Êä´ËÏìÓ¦£¬Òâζ×ÅÏìÓ¦³öÏÖ£¬ µ«²»°üº¬Êý¾Ý¡£

4£© Èç¹ûÐèÒª£¬½ÓÊÕʵÌå¿¿·¢ËÍÒ»¸öÔªËØÀ´ÌôսʵʼʵÌ壬´ËÔªËØÓɸø³õʼʵÌåµÄ 'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÀ´ÏÞ¶¨£»´ËÔªËØ¿ÉÄܰüº¬XML×Ö·ûÊý¾Ý£¨±ØÐë¸ù¾ÝÓɳõʼʵÌåÑ¡ÔñµÄ SASL»úÖÆµÄ¶¨ÒåÒ»ÖµÄÀ´¼ÆË㣩¡£

5£© ³õʼʵÌåÏìÓ¦´ËÌôÕ½£¬¿¿·¢ËÍÓÉ'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÏÞ¶¨µÄ ÔªËØ¸ø½ÓÊÕʵÌ壻´ËÔªËØ¿ÉÄܰüº¬XML×Ö·ûÊý¾Ý£¨±ØÐë¸ù¾ÝÓɳõʼʵÌåÑ¡ÔñµÄSASL»úÖÆµÄ¶¨ÒåÒ»ÖµÄÀ´¼ÆË㣩¡£

6£© Èç¹ûÐèÒª£¬½ÓÊÕʵÌå·¢Ë͸ü¶àµÄÌôÕ½£¬³õʼʵÌå·¢Ë͸ü¶àµÄÏìÓ¦¡£

Challenge/responseÐòÁжԼÌÐø£¬Ö±µ½ÒÔÏÂÈýÖÖÊÂÇéÖ®Ò»·¢Éú£º

1£© ³õʼʵÌåÖÕÖ¹ÎÕÊÖ£¬¿¿·¢ËÍÒ»¸öÓÉ'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÏÞ¶¨µÄÔªËØ ¸ø½ÓÊÕʵÌå¡£¸ù¾Ý½ÓÊÕÒ»¸öÔªËØ£¬½ÓÊÕʵÌåÓ¦µ±ÔÊÐíÒ»¸ö¿ÉÅäÖõĵ«ºÏÀíµÄÖØÊԺţ¨ÖÁÉÙ2£©£¬Ö®ºó£¬±ØÐëÖÕÖ¹TCPÁ¬½Ó£»Õâʹ³õ ʼʵÌ壨Àý£ºÒ»¸öÖÕ¶ËÓû§¿Í»§¶Ë£©Äܹ»ÈÌÊÜÒÑÌṩµÄ²»ÕýÈ·µÄÐÅÈΣ¨Àý£ºÒ»¸ö´íÎóÀàÐ͵Äpassword£©¶ø²»Óñ»ÆÈÖØÁ¬¡£

2£© ½ÓÊÕʵÌ屨¸æÎÕÊÖʧ°Ü£¬¿¿·¢ËÍÒ»¸öÓÉ'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÏÞ¶¨ µÄÔªËØ¸ø³õʼʵÌ壨ʧ°ÜµÄÌØÊâÔ­ÒòÓ¦µ±ÒÔÔªËØµÄ×ÓÔªËØ½øÐÐͨ ÐÅ£¬ÔªËض¨ÒåÔÚSASL´íÎóÖУ¨6.4£©£©¡£Èç¹û´íÎóÇé¿ö·¢Éú£¬½ÓÊÕʵÌåÓ¦µ±ÔÊÐíÒ»¸ö¿ÉÅäÖõ쬵«ºÏÀíµÄÖØÊԺţ¨ÖÁÉÙ 2£©£¬Ö®ºó£¬Ëü±ØÐëÖÕÖ¹TCPÁ¬½Ó£»Õâʹ³õʼʵÌ壨Àý£ºÒ»¸öÖÕ¶ËÓû§¿Í»§¶Ë£©Äܹ»ÈÌÊÜÒÑÌṩµÄ²»ÕýÈ·µÄÐÅÈΣ¨Àý£ºÒ»¸ö´íÎóÀàÐ͵Äpassword£©¶ø²»Óà ±»ÆÈÖØÁ¬¡£

3£© ½ÓÊÕʵÌ屨¸æÎÕÊֳɹ¦£¬¿¿·¢ËÍÒ»¸öÓÉ'urn:ietf:params:xml:ns:xmpp-sasl'ÃüÃû¿Õ¼äÏÞ¶¨ µÄÔªËØ¸ø³õʼʵÌ壻´ËÔªËØ¿ÉÄܰüº¬XML×Ö·ûÊý¾Ý£¨ÔÚSASLÊõÓïÖУ¬¡°additional data with success¡±£©£¬Èç¹ûÐèÒª¿¿Ñ¡¶¨µÄSASL»úÖÆ¡£¸ù¾Ý½ÓÊÕµÄÔªËØ£¬³õʼʵÌ屨Ðë¿¿·¢ËÍÒ»¸ö¿ª·ÅµÄXMLÁ÷Í·È¥³õʼ»¯ Ò»¸öÐÂÁ÷¸ø½ÓÊÕʵÌ壨Ëü²»±ØÊÂÏÈ·¢ËÍÒ»¸ö¹Ø±Õ±ê¼Ç£¬ÒòΪ½ÓÊÕʵÌåÓë³õʼʵÌ屨Ð뿼ÂÇÔ´Á÷¸ù¾Ý·¢ËÍ»ò½Ó ÊÕÔªËØ¶ø½«±»¹Ø±Õ£©¡£¸ù¾Ý´Ó³õʼʵÌå½ÓÊÕµÄÐÂÁ÷Í·£¬½ÓÊÕʵÌ屨Ðë·¢ËÍÒ»¸öÐÂXMLÁ÷Í·¸ø³õʼʵÌå×÷ΪÏìÓ¦£¬²¢´øÓÐÈÎºÎ¿É ÀûÓõÄÌØÕ÷£¨µ«²¢²»°üº¬STARTTLSÓëSASLÌØÕ÷£©»òÒ»¸ö¿ÕÔªËØ£¨ÖØÒª±íʾûÓÐÆäËüÌØÕ÷¿ÉÀûÓã©£»ÈκÎÄÇÖÖÆäËü ÔÚ´Ë䶨ÒåµÄÌØÕ÷±ØÐëÓÉXMPPµÄÏà¹ØÀ©Õ¹À´¶¨Òå¡£

6£®3 SASL¶¨Òå

[SASL]µÄprofilingÐèÇóÒªÇóЭÒ鶨ÒåÌṩÒÔÏÂÐÅÏ¢£º ·þÎñÃû£º¡°xmpp¡±

³õʼÐòÁУº³õʼʵÌåÌṩһ¸ö¿ª·ÅXMLÁ÷Í·ºó£¬²¢ÇÒ½ÓÊÕʵÌå°´´ËÏìÓ¦ºó£¬½ÓÊÕʵÌåÌṩһ¸ö¿É½ÓÊÕµÄÈÏÖ¤·½·¨ÁÐ±í¡£³õʼʵÌå´ÓÁбíÖÐÑ¡ÔñÒ»¸ö·½·¨²¢×÷Ϊ ¡®machanism¡¯ÊôÐÔÖµ·¢Ë͸ø½ÓÊÕʵÌ壬´ËÊôÐÔ±»ÔªËØÓµÓУ¬ËæÒâµÄ°üÀ¨Ò»¸ö³õʼÏìÓ¦ÒÔ±ÜÃ⻷·¡£ ½»»»ÐòÁУºÌôÕ½ÓëÏìӦͨ¹ýÓɽÓÊÕʵÌåµ½³õʼʵÌåÔªËØµÄ½»»»ÓëÓɳõ

ʼʵÌåµ½½ÓÊÕʵÌåµÄÔªËØµÄ½»»»¶øÖ´ÐС£½ÓÊÕʵÌå¿¿·¢ËÍÒ»¸öÔªËØ±¨¸æ´íÎ󣬷¢ËÍÒ»¸öÔªËØ±¨¸æ³É ¹¦£»³õʼʵÌå¿¿·¢ËÍÔªËØÖÕÖ¹½»»»¡£¸ù¾Ý³É¹¦Ð­ÉÌ£¬Á½¶Ë¶¼ÈÏΪԴXMLÁ÷½«±»¹Ø²¢ÇÒÐÂÁ÷Í·ÓÉÁ½¶ËʵÌå·¢ËÍ¡£

°²È«²ãЭÉÌ£º°²È«²ãÔÚΪ½ÓÊÕʵÌå·¢ËÍÔªËØµÄ¹Ø±Õ¡°>¡±×Ö·ûºóÁ¢¼´ÓÐЧ£¬°²È«²ãÔÚΪ³õʼʵÌå·¢ ËÍÔªËØµÄ¹Ø±Õ¡°>¡±×Ö·ûºóÁ¢¼´ÓÐЧ¡£²ã˳ÐòΪ£ºÊ×ÏÈÊÇ[TCP]£¬È»ºóÊÇ[TLS]£¬È»ºóÊÇ[SASL]£¬È»ºóÊÇ XMPP¡£

ʹÓÃÊÚȨÉí·Ý£ºÊÚȨÉí·Ý¿ÉÒÔ±»XMPPÓÃÓÚָʾ¿Í»§¶Ë·Çȱʡ»ò·þÎñÆ÷·¢ËÍ¡£

6£®4 SASL´íÎó

ÒÔÏÂÊÇSASLÏà¹Ø´íÎóÌõ¼þµÄ¶¨Ò壺£¨ÂÔ£© 1£©--

2£©-- 3£©-- 4£©-- 5£©-- 6£©-- 7£©--

6£®5 ¿Í»§¶Ëµ½·þÎñÆ÷µÄÀý×Ó

ÒÔÏÂÀý×ÓÏÔʾÁËʹÓÃSASLÊÚȨµÄ¿Í»§¶ËÓë·þÎñÆ÷¶ËµÄÊý¾ÝÁ÷£¬Õý³£Çé¿öÏ£¬ÊÇÔÚTLSЭÉÌ£¨×¢£ºÏÔʾÔÚÏÂÃæµÄÌæ»»²½ÖèÓÃÓÚÏÔʾ´íÎóÇé¿öµÄЭÒ飻ËûÃDz¢²»Ï꾡Ҳ²»ÊDZØÒªµÄÓɱ¾ÀýÖÐÊý¾Ý·¢ËͶø´¥·¢¡££©³É¹¦Ö®ºó¡£

²½1£º¿Í»§¶Ë³õʼÁ÷¸ø·þÎñÆ÷£º

xmlns='jabber:client'

xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'>