IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

IBM developerWorks > ÀÚ¹Ù
developerWorks

½Ì±Û»çÀοÂ(single sign-on)À¸·Î ¿£ÅÍÇÁ¶óÀÌÁî ÀÚ¹Ù ÀÎÁõÀ» ´Ü¼øÇÏ°Ô!
GSS-API¿Í Kerberos ƼÄÏÀ» »ç¿ëÇÏ¿© SSO¸¦ ±¸ÇöÇϴ Ŭ¶óÀ̾ðÆ®/¼­¹ö ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç µðÀÚÀÎ

Level: Intermediate

Faheem Khan
ÄÁ¼³ÅÏÆ®
2003³â 9¿ù 9ÀÏ

Á¡Á¡ ´õ ¸¹Àº Æнº¿öµå º¸¾È ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¶Á÷ÀÇ ÄÄÇ»ÅÍ È¯°æ¿¡ Ãß°¡ÇÑ´Ù¸é ÀÌ´Â ÀÎÁõÀÇ º¹ÀâÇÔµµ ÇÔ²² °¡Áß½ÃÅ°´Â °ÍÀÌ°í °á±¹ °³¹ßÀÚ¿Í »ç¿ëÀÚ¿¡°Ô ºÎ´ãÀ» ÁÖ°Ô µÈ´Ù. ´ëºÎºÐÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ ÇÁ·ÎÁ§Æ®µéÀº ½Ì±Û»çÀοÂ(SSO) ±â´ÉÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ´Â »ç¿ëÀÚ°¡ ´Ù¾çÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇϱâ À§ÇØ ´Ü Çѹø¸¸ ·Î±×ÀÎ Çϵµ·Ï ÇÏ´Â ±â´ÉÀÌ´Ù. ÀÌ ±Û¿¡¼­ ÀÚ¹Ù Ç÷§Æû¿¡ SSO¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.

´ç½ÅÀÇ ±â¾÷Àº ¸¹Àº ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǵéÀ» ±¸µ¿ÇÏ°í ÀÖÀ¸¸ç ±× ¿£ÅÍÇÁ¶óÀÌÁî ¸®¼Ò½º¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â ÀÎÁõÀÌ ÇÊ¿äÇմϱî? ±×·¸´Ù¸é ½Ì±Û»çÀοÂ(SSP) º¸¾È ±â´ÉÀ» ±¸ÇöÇÏ¿© »ç¿ëÀÚ Ä§ÀÔÀ» ÃÖ¼ÒÈ­ ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ ±Û¿¡¼­ Kerberos¿Í Java Generic Security Services API (GSS-API)¸¦ »ç¿ëÇÏ¿© SSO¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀ» ¹è¿ì°Ô µÉ °ÍÀÌ´Ù. ¿ì¼± SSOÀÇ Á¤ÀǸ¦ ¼³¸íÇÏ°í °­·ÂÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼³¸íÇÒ °ÍÀÌ´Ù. ±×·± ´ÙÀ½ Kerberos ±â¹ÝÀÇ SSO¸¦ ±¸ÇöÇÒ ¶§ ¹ß»ýÇÏ´Â ¸Þ½ÃÁö ±³È¯ ½ÃÄö½ºµµ ¿¬±¸ÇÑ´Ù. ÀÚ¹Ù GSS-API¿Í GSS¸¦ »ç¿ëÇÏ¿© SSO¸¦ ´Þ¼ºÇÏ´Â ÀüÇüÀûÀÎ ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÅ°ÅØÃĸ¦ °£´ÜÈ÷ ¼Ò°³ÇÑ´Ù. ¸¶Áö¸·À¸·Î ÀÌ ¸ðµÎ¸¦ Á¾ÇÕÇÏ¿© ÄÚµå ¿¹Á¦¸¦ ¼±º¸ÀδÙ. ÀÚ¹Ù °³¹ßÀÚ°¡ GSS Kerberos ƼÄÏÀ¸·Î SSO¸¦ ¾î¶»°Ô ±¸ÇöÇÏ´ÂÁö º¸°Ô µÉ °ÍÀÌ´Ù.

'½Ì±Û»çÀοÂ'À̶õ ¹«¾ùÀΰ¡?
±Ùº»ÀûÀ¸·Î ½Ì±Û»çÀο ÀÎÁõÀÌ ÀǹÌÇÏ´Â °ÍÀº ÀÎÁõ µ¥ÀÌÅÍÀÇ °øÀ¯ÀÌ´Ù. ¿¹¸¦ µé¾î ¿þ¾îÇÏ¿ì¡ ȸ»çÀÇ ¸¹Àº »ç¿øµéÀº ¿£ÅÍÇÁ¶óÀÌÁî ¸®¼Ò½º(µ¥ÀÌÅͺ£À̽º Å×ÀÌºí µî)¿¡ Á¢±ÙÇÏ¿© ±×µéÀÇ ¾÷¹«¿¡ ÇÊ¿äÇÑ °ÍÀ» ¼öÇàÇØ¾ß ÇÑ´Ù. µ¿½Ã¿¡ ´Ù¸¥ »ç¿øµéµµ ÀÛ¾÷ ³»¿ë¿¡ µû¶ó ´Ù¾çÇÑ ¸®¼Ò½º°¡ ÇÊ¿äÇÏ´Ù. ȸ°è ´ã´çÀڴ ȸ°è °ü·Ã µ¥ÀÌÅͺ£À̽º Å×ÀÌºí¿¡ Á¢±ÙÇØ¾ß ÇÏ´Â ¹Ý¸é ÆǸŠ´ã´çÀÚ´Â ÆǸŠ°ü·Ã µ¥ÀÌÅͺ£À̽º Å×ÀÌºí¿¡ Á¢±ÙÇØ¾ß ÇÑ´Ù. CEO¶ó¸é ±â¾÷ÀÇ µ¥ÀÌÅͺ£À̽º ¾îµð¿¡³ª Á¢±ÙÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù.

ºÐ¸íÇÑ °ÍÀº, ÀÌ ±â¾÷Àº ¹«¾ùº¸´Ùµµ Á¦´ë·Î µÈ ÀÎÁõ ¸ÞÄ¿´ÏÁòÀÌ ÇÊ¿äÇÏ´Ù. ¾î¶² »ç¿øÀÌ Æ¯Á¤ ¸®¼Ò½º¿¡ Á¢±ÙÀ» ½ÃµµÇß´ÂÁö °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï ¸»ÀÌ´Ù. ÀÏ´Ü ±â¾÷ ÀÎÁõ ¸ðµâÀÌ »ç¿øÀÇ Á¸À縦 ¾Ë¸é ¿£ÅÍÇÁ¶óÀÌÁî ±¸Çö ¾ÈÀÇ ÀÎÁõ ¸ðµâÀº ÀÎÁõÀÌ ÀÖ´Â »ç¿ëÀÚ°¡ ÀûÀýÇÑ ±ÇÇÑÀ» °®°í ¸®¼Ò½º¿¡ Á¢±ÙÇß´ÂÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù.

ÄÚµå
j-gss-sso.zip ÆÄÀÏ¿¡´Â ÀÌ ±Û¿¡ »ç¿ëµÈ ¸ðµç Äڵ尡 Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ ±ÛÀÇ °¢ ¸®½ºÆÃÀº ÆÄÀÏ À̸§ÀÌ Æ÷ÇԵǾî ÀÖ´Â ÁÖ¼®À¸·Î ½ÃÀÛÇÑ´Ù. ÀÌ À̸§µéÀ» »ç¿ëÇÏ¿© °¢ ¸®½ºÆÃÀ» j-gss-sso.zip ¾ÆÄ«À̺꿡 ÀÖ´Â »óÀÀÇÏ´Â ÆÄÀÏ¿¡ ¸ÅÄ¡ÇÑ´Ù.

ÀÌ ¾ÆÄ«À̺꿡´Â Setup.txt ÆÄÀϵµ ÀÖ´Ù. ÄÚµå ½ÇÇà Àü¿¡ ÀÌ ÆÄÀÏÀ» Àб⠹ٶõ´Ù.

»ç¿øµéÀÌ ÀÎÁõ¿ë À¯Àú³×ÀÓ°ú Æнº¿öµå¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ ±â¾÷ÀÇ ÀÎÁõ ¸ðµâÀº ´ç¿¬È÷ À¯Àú³×ÀÓ°ú Æнº¿öµåÀÇ µ¥ÀÌÅͺ£À̽º¸¦ °®°í ÀÖÀ» °ÍÀÌ´Ù. µé¾î¿À´Â ÀÎÁõ ¿äûÀº À¯Àú³×ÀÓ-Æнº¿öµå ½ÖÀ¸·Î µ¿¹ÝµÉ °ÍÀÌ´Ù. ÀÌ ÀÎÁõ ¸ðµâÀº ³»ºÎ µ¥ÀÌÅͺ£À̽ºÀÇ ½Ö°ú ºñ±³¸¦ ÇÏ°Ô µÈ´Ù.

ÀÌÁ¦ ¿ì¸®ÀÇ ¿þ¾îÇÏ¿ì¡ ȸ»ç´Â ÀÌ ¹üÀ§¾È¿¡¼­ ½ÇÇàµÇ´Â ¿©·¯ ¾ÖÇø®ÄÉÀ̼ǵéÀ» °®°íÀÖ´Ù. ´Ù¾çÇÑ ¾ÖÇø®ÄÉÀ̼ǵéÀÌ °°Àº ¿£ÅÍÇÁ¶óÀÌÁîÀÇ ´Ù¸¥ ¸ðµâÀ» Çü¼ºÇÑ´Ù. °¢°¢ÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº ±× ÀÚü·Î ¿Ïº®ÇÏ´Ù. ÀÌ°Í ³ª¸§´ë·Î »ç¿ëÀÚ ±â¹ÝÀÇ ¿©·¯ ´Ù¸¥ Ƽ¾î(¹é¿£µå µ¥ÀÌÅͺ£À̽º, ºñÁö´Ï½º ·ÎÁ÷, »ç¿ëÀÚ¿ë GUI)¸¦ °®°íÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ(EAI)´Â ÀÌ¿Í °°Àº µ¶¸³µÈ ¾ÖÇø®ÄÉÀ̼ǵéÀ» ÇϳªÀÇ ¿£ÅÍÇÁ¶óÀÌÁî¿¡ ÅëÇÕÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ÀϹÝÀûÀ¸·Î °¡¸£Å²´Ù.

EAI ÇÁ·ÎÁ§Æ®¿¡¼­ ÀÎÁõ ÇÁ·Î¼¼½º¿¡ µÎµå·¯Áö´Â ÇϳªÀÇ ÀϹÝÀûÀÎ ¿ä¼Ò°¡ ÀÖ´Ù. ƯÁ¤ ¾ÖÇø®ÄÉÀ̼ÇÀÇ »ç¿ëÀÚ´Â ±× ¿£ÅÍÇÁ¶óÀÌÁî ³»ÀÇ ¶Ç ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ¾×¼¼½º ÇؾßÇÑ´Ù. ¿¹¸¦ µé¾î ÆǸŠµ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ°í ÀÖ´Â ÆǸŠ´ã´çÀÚ°¡ ƯÁ¤ ºÎÇ°À» °Ë»öÇϱâ À§ÇØ Àç°í µ¥ÀÌÅͺ£À̽º¿¡ ¾×¼¼½º ÇØ¾ß ÇÒ °æ¿ìµµ ÀÖ´Ù. ÀÌ·¯ÇÑ À¯ÇüÀÇ Å©·Î½º-¾ÖÇø®ÄÉÀÌ¼Ç ÀÎÁõÀ» ½ÇÇö½Ãų ¼ö ÀÖÀ»±î?

µÎ °¡Áö ¼±ÅÃÀÌ ÀÖ´Ù:

  • µÎ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ À¯Àú³×ÀÓ°ú Æнº¿öµå µ¥ÀÌÅͺ£À̽º¸¦ Áߺ¹½Ãų ¼ö ÀÖ´Ù. µû¶ó¼­ ÀÌ·¯ÇÑ µÎ °³ÀÇ ¾ÖÇø®ÄÉÀ̼ǵéÀÌ ¿þ¾îÇÏ¿ì¡ ȸ»çÀÇ ¸ðµç »ç¿øµéÀ» À§ÇØ ÀÎÁõ ¿äûÀ» È¿À²ÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. »ç¿ëÀÚ´Â µÎ °³ÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ °³º°ÀûÀ¸·Î ÀÎÁõÀ» ó¸®ÇÏ°Ô µÈ´Ù. ´Ù½Ã ¸»Çؼ­ ÀÚ½ÅÀÇ À¯Àú³×ÀÓ°ú Æнº¿öµå·Î µé¾î°¡¸é¼­ µÎ ¾ÖÇø®ÄÉÀÌ¼Ç Áß Çϳª¿¡ ¾×¼¼½ºÇÏ°í ±× ¾ÖÇø®ÄÉÀ̼ÇÀº ¸ðµç ÀÎÁõ ´Ü°è¸¦ ¼öÇàÇÏ°Ô µÈ´Ù. À¯Àú³×ÀÓ°ú Æнº¿öµå µ¥ÀÌÅͺ£À̽º¸¦ Áߺ¹ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ÀÎÁõ ÇÁ·Î¼¼½º ¿À¹öÇìµå±îÁö Áߺ¹ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¼Ö·ç¼Ç¿¡¼­ Áߺ¹ÀÇ ¾çÀº ¸íÈ®ÇØÁø´Ù.

  • µÎ ¹ø° ¼±ÅÃÀº ÆǸŠ¾ÖÇø®ÄÉÀ̼ǰú Àç°í ¾ÖÇø®ÄÉÀÌ¼Ç °£ ½Ì±Û»çÀοÂÀ» ÅëÇÑ ÀÎÁõ µ¥ÀÌÅÍ °øÀ¯¸¦ °¡´ÉÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù. ¸¸ÀÏ »ç¿ëÀÚ°¡ ÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ÀÎÁõÀ» °®°í ÀÖ´Ù¸é ±×ÀÇ ÀÎÁõ Á¤º¸´Â ´Ù¸¥ °Í¿¡ Àü´Þ µÉ ¼ö ÀÖ´Ù. ÀÌ µÎ ¹ø° ¾ÖÇø®ÄÉÀ̼ÇÀº ±× ¸ðµç ÀÎÁõ ´Ü°è¸¦ °ÅÄ¡Áö ¾Ê°íµµ ÀÎÁõ Á¤º¸¸¦ ¼ö¶ôÇÑ´Ù. ÀÌ ¼Ö·ç¼Ç¿¡´Â Áߺ¹ÀÌ ¾ø´Ù. µÎ °³ÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼­·Î ½Å·ÚÇÏ¿© °¢ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼­·ÎÀÇ ÀÎÁõ µ¥ÀÌÅ͸¦ ¼ö¶ôÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ À¯ÀÏÇÑ ÇÊ¿äÁ¶°ÇÀÌ´Ù.

ÀϹÝÀûÀ¸·Î SSO´Â °³º° ÀÎÁõ ¸ðµâ·Î¼­ ±¸ÇöµÈ´Ù. »ç¿ëÀÚ ÀÎÁõÀÌ ÇÊ¿äÇÑ ¸ðµç ¾ÖÇø®ÄÉÀ̼ǵéÀº SSO ±â¹ÝÀÇ ÀÎÁõ ¸ðµâ¿¡ ÀÇÁöÇÏ¿© »ç¿ëÀÚ¸¦ È®ÀÎÇÑ´Ù. ÀÌ ÀÎÁõ Á¤º¸¿¡ µû¶ó ´Ù¾çÇÑ ¾ÖÇø®ÄÉÀ̼ǵéÀº °¢ÀÚÀÇ ÀÎÁõ Á¤Ã¥À» ¹ßÈ¿ÇÑ´Ù.

ÀÌ ¿þ¾îÇÏ¿ì¡ ±â¾÷ ¿¹Á¦´Â »ç¿ëÀÚ °üÁ¡¿¡¼­ SSO°¡ ¹«¾ùÀÎÁö¸¦ ¼³¸íÇÑ °ÍÀÌ´Ù. ´ÙÀ½ Áú¹®Àº ´ç¿¬È÷ "SSO¸¦ ¾î¶»°Ô ±¸ÇöÇϴ°¡?"ÀÌ´Ù. ¿©·¯ ¹æ¹ýÀÌ ÀÖ´Ù. SSO¸¦ Æ÷ÇÔÇÏ¿© ´Ù¾çÇÑ º¸¾È ¼­ºñ½º¸¦ Á¦°øÇÏ´Â Kerberos¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

Kerberos »ç¿ëÇϱâ
Kerberos´Â Internet Engineering Task Force (IETF) Ç¥ÁØÀ¸·Î¼­ ÀüÇüÀûÀÎ Å° ±³È¯ ¸ÞÄ¿´ÏÁòÀ» Á¤ÀÇÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ǵéÀº Kerberos ¼­ºñ½º¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ¿¡°Ô ÀÎÁõÀ» ÁÖ°í ¾ÏÈ£ Å°¸¦ ±³È¯ÇÑ´Ù. Kerberos´Â ƼÄÏ ¹ß»ó¿¡ ±âÀÎÇÑ´Ù. ÇϳªÀÇ Æ¼ÄÏÀº ¾ÏÈ£ Å°¿Í ¸î¸î Á¤º¸ Á¶°¢À» ·¡ÇÎÇÏ´Â µ¥ÀÌÅÍ ±¸Á¶ÀÏ »ÓÀÌ´Ù. Å° ¹ß±Þ ¼¾ÅÍ(KDC)´Â Kerberos ƼÄÏÀ» ÀÎÁõ »ç¿ëÀÚ¿¡°Ô ¹ß±ÞÇÑ´Ù. KDC´Â µÎ °¡Áö À¯ÇüÀÇ Æ¼ÄÏÀ» ¹ßÇàÇÑ´Ù:

  • ¸¶½ºÅÍ Æ¼ÄÏ(ƼÄÏ ¹ßÇà ƼÄÏ (TGT))
  • ¼­ºñ½º ƼÄÏ

KDC´Â ¿ì¼± TGT¸¦ Ŭ¶óÀ̾ðÆ®¿¡ ¹ßÇàÇÑ´Ù. ÀÌ Å¬¶óÀ̾ðÆ®´Â TGT¿¡ ¿©·¯ ¼­ºñ½º ƼÄÏÀ» ¿äûÇÒ ¼ö ÀÖ´Ù. TGT¿Í ¼­ºñ½º ƼÄÏÀÇ ÀÛµ¿ ¹æ¹ýÀ» ¼³¸íÇØÁÖ´Â ´ÙÀ½ÀÇ Å° ±³È¯ ½Ã³ª¸®¿À¸¦ º¸ÀÚ:

  1. Ŭ¶óÀ̾ðÆ®°¡ TGTÀÇ ¹ßÇàÀ» ¿äûÇϸç KDC¿¡ ¸Þ½ÃÁö¸¦ º¸³½´Ù. ÀÌ ¿äûÀº ÆòÀÌÇÑ ÅؽºÆ® Çü½Ä(¾Ïȣȭ µÇ¾îÀÖÁö ¾ÊÀ½)ÀÌ°í Ŭ¶óÀ̾ðÆ®ÀÇ À¯Àú³×ÀÓÀÌ Æ÷ÇԵǾîÀÖ´Ù. Æнº¿öµå´Â Æ÷ÇÔµÇÁö ¾Ê´Â´Ù.

  2. KDC´Â TGT¸¦ Ŭ¶óÀ̾ðÆ®¿¡ ¹ß±ÞÇÑ´Ù. TGT´Â ¾ÏȣȭµÈ Çü½Ä¾È¿¡ ¼¼¼Ç Å°¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ ¼¼¼Ç Å°¸¦ ¾ÏȣȭÇÏ·Á¸é KDC´Â Ŭ¶óÀ̾ðÆ®ÀÇ Æнº¿öµå¿¡¼­ ³ª¿Â Å°¸¦ »ç¿ëÇÑ´Ù. Ŭ¶óÀ̾ðÆ®¸¸ÀÌ TGTÀÇ ¾ÏÈ£¸¦ Çص¶ÇÒ ¼ö ÀÖ°í ¼¼¼Ç Å°¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. µû¶ó¼­ Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀÌ TGT¸¦ ¿äûÇϱâ À§ÇØ Æнº¿öµå¸¦ ¾Ë ÇÊ¿ä´Â ¾ø¾îµµ TGT¸¦ ó¸®ÇÏ°í »ç¿ëÇÒ Æнº¿öµå´Â ÇÊ¿äÇÏ´Ù.

  3. Ŭ¶óÀ̾ðÆ®°¡ TGTÀÇ ¾ÏÈ£¸¦ Çص¶ÇÏ°í ¿©±â¿¡¼­ ¼¼¼Ç Å°¸¦ ÃßÃâÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â ¼­ºñ½º ƼÄÏÀ» À§ÇÑ ¿äûÀ» ÀÛ¼ºÇÑ´Ù. ¼­ºñ½º ƼÄÏÀº ¾ç¹æ°£ Ä¿¹Â´ÏÄÉÀ̼ǿëÀ¸·Î¸¸ °¡´ÉÇÏ´Ù. Áï Ŭ¶óÀ̾ðÆ®¿Í ±× Ŭ¶óÀ̾ðÆ®°¡ Åë½ÅÇϱ⠿øÇÏ´Â ¿£ÅÍƼ. ¾î¶² ´©±¸µµ ÀÌ ¼­ºñ½º ƼÄÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ ¼­ºñ½º ƼÄÏÀ» ¿äûÇÏ´Â µ¿¾È Ŭ¶óÀ̾ðÆ®´Â ¼­ºñ½º ƼÄÏÀ¸·Î »ç¿ë ÇÒ ¼­¹ö À̸§À» ÁöÁ¤ÇÑ´Ù. ÀÌ ¼­¹ö´Â KDC¿¡ ÀÌ¹Ì Á¸ÀçÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù.

  4. KDC´Â ¼­¹ö¿ë ¼­ºñ½º ƼÄÏÀ» ÀÛ¼ºÇÑ´Ù. ÀÌ Æ¼ÄÏÀº Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ µ¥ÀÌÅÍ¿Í »õ·Î¿î ¾ÏÈ£ Å°(ÇÏÀ§ ¼¼¼Ç Å°)¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. KDC´Â ¼­¹öÀÇ ºñ¹Ð Å°·Î ¼­ºñ½º ƼÄÏÀ» ¾ÏȣȭÇÑ´Ù. ¿ÀÁ÷ ¼­¹ö¸¸ÀÌ ¼­ºñ½º ƼÄÏ ¾ÏÈ£¸¦ Çص¶ÇÒ ¼ö ÀÖ´Ù.

  5. KDC´Â ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÏ°í ÀÌ ¾È¿¡ ¼­ºñ½º ƼÄÏÀ» ·¡ÇÎÇÑ´Ù. KDC´Â ÀÌ ¸Þ½ÃÁö ³»ºÎ¿¡ ÇÏÀ§ ¼¼¼Ç Å°¸¦ º¹»çÇÑ´Ù. ÇÏÀ§ ¼¼¼Ç Å°´Â ¸Þ½ÃÁö¿¡ µÎ ¹ø Æ÷ÇԵǾú´Ù´Â °ÍÀ» ±â¾ïÇ϶ó.

  6. KDC´Â 2, 3 ´Ü°è¿¡¼­ ³ª¿Â ¼¼¼Ç Å°·Î Àüü ¸Þ½ÃÁö¸¦ ¾ÏȣȭÇÑ´Ù. µû¶ó¼­ ¿ÀÁ÷ Ŭ¶óÀ̾ðÆ®¸¸ ¸Þ½ÃÁö¸¦ Çص¶ÇÏ°í ÇÏÀ§ ¼¼¼Ç Å°¿Í ¼­ºñ½º ƼÄÏÀ» ÃßÃâÇÒ ¼ö ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼­ºñ½º ƼÄÏ ¾ÏÈ£¸¦ Çص¶ÇÏÁö ¸øÇÏ¸é ¿ÀÁ÷ ¼­¹ö¸¸ÀÌ ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ¾î¶² ´©±¸µµ ´Ù¸¥ ¸ñÀûÀ¸·Î ¼­ºñ½º ƼÄÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·± ´ÙÀ½ KDC´Â ¸Þ½ÃÁö¸¦ Ŭ¶óÀ̾ðÆ®¿¡ º¸³½´Ù.

  7. Ŭ¶óÀ̾ðÆ®´Â KDC¿¡¼­ ¹ÞÀº ¸Þ½ÃÁö¸¦ Çص¶ÇÏ°í ¸Þ½ÃÁö ³»ºÎ¿¡ ÀÖ´Â ÇÏÀ§ ¼¼¼Ç Å°¿Í ¼­ºñ½º ƼÄÏÀ» °¡Á®¿Â´Ù. ¼­ºñ½º ƼÄÏÀº ¼­¹ö¿¡ º¸³½´Ù.

  8. ¼­¹ö´Â ¼­ºñ½º ƼÄÏÀ» ¹Þ°í À̸¦ Çص¶ÇÏ¿© ¿äû Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ µ¥ÀÌÅÍ¿Í ÇÏÀ§ ¼¼¼Ç Å°¸¦ °¡Á®¿Â´Ù. ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» È®ÀÎÇÏ°í »õ·Î¿î º¸¾È ¼¼¼ÇÀÌ Å¬¶óÀ̾ðÆ®¿Í ¼­¹ö »çÀÌ¿¡ ¸¸µé¾îÁø´Ù. Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö ¸ðµÎ °°Àº ÇÏÀ§ ¼¼¼Ç Å°¸¦ ¸¶·ÃÇÏ°í ÀÖ°í ¼­·Î º¸¾È Åë½ÅÀ» À§ÇØ À̸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Ŭ¶óÀ̾ðÆ®´Â 3 ´Ü°è¿¡¼­ 8 ´Ü°è ±îÁö ¶Ç ´Ù¸¥ ¼­¹ö ¾ÖÇø®ÄÉÀ̼ǿ¡ ¹Ýº¹ÇÒ ¼ö ÀÖ´Ù. Kerberos ¼­ºñ½º°¡ ÀÎÁõ µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ°í °°Àº Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ ¾ÖÇø®ÄÉÀ̼ǿ¡µµ ÀÎÁõÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ´Â SSO¸¦ È¿°úÀûÀ¸·Î ¸¸µç´Ù .

Java Generic Security Services API
IETF´Â Generic Security Services API (GSS-API)¸¦ °í±Þ º¸¾È API·Î Á¤ÀÇÇß´Ù. ÀÌ°ÍÀº Credential¼º, ¸Þ½ÃÁö ¹«°á¼º, º¸¾È µîÀÇ ±â´ÉÀ» Á¦°øÇÑ´Ù. GSS-API´Â Ŭ¶óÀ̾ðÆ®-¼­¹ö ȯ°æ¿¡¼­ ½±°Ô ÀÛµ¿ÇÑ´Ù. IETF´Â GSS-API¸¦ ¾ð¾î µ¶¸³ ¹æ½ÄÀ¸·Î Á¤ÀÇÇß´Ù.

ÀÚ¹Ù GSS-API´Â ÀÚ¹Ù ½ºÆÑ Çü½ÄÀÇ GSS-APIÀÌ´Ù. SunÀº Java Community Process¸¦ ÅëÇØ ÀÚ¹Ù GSS-API¸¦ °³¹ßÇß°í ·¹ÆÛ·±½º ±¸Çöµµ Á¦°øÇß´Ù. ÀÌ´Â JDK 1.4 ¹öÀü¿¡ ¹øµé µÉ °ÍÀÌ´Ù. (Âü°íÀÚ·á).

º¸´Ù °£´ÜÈ÷ Çϱâ À§ÇØ GSS-API¸¦ GSS·Î ÅëĪÇÏ°Ú´Ù.

GSS´Â ´Ù¸¥ Àú±Þ º¸¾È ¼­ºñ½ºÀÇ »ó´Ü¿¡ °í±Þ Ãß»ó ·¹À̾ Á¦°øÇÏ´Â °ÍÀÌ ¸ñÀûÀÌ´Ù. Kerberos´Â GSS Ãß»óÈ­¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ±â¼ú Áß ÇϳªÀÌ´Ù. GSS Ãß»ó ·¹À̾¼­ ÇÁ·Î±×·¡¸Ó´Â º¸¾È ¸ÞÄ¿´ÏÁòÀ» °³¹ß ÇÒ ¼ö ÀÖ´Ù. º¸´Ù ³·Àº ·¹º§¿¡¼­ ¾î¶² ¸ÞÄ¿´ÏÁòÀÌ ÀÛµ¿ÇÏ°í ÀÖ´ÂÁö °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌ ±Û¿¡¼­ GSS ÇÏ¿¡¼­ ÀÛµ¿ÇÏ´Â Àú±Þ º¸¾È ¸ÞÄ¿´ÏÁòÀ¸·Î¼­ KerberosÀÇ »ç¿ë¹ý¿¡ ÃÊÁ¡À» ¸ÂÃß°Ú´Ù.

GSS´Â GSSName, GSSCredential, GSSContextÀÇ °³³ä¿¡¼­ ÀÛµ¿ÇÑ´Ù. GSSNameÀº À̸ÞÀÏÀ» È®ÀÎÇϱâ À§ÇØ ÀÔ·ÂÇÏ´Â À¯Àú³×ÀÓ °°ÀÌ ´ç½ÅÀ» °³º°Àû Á¸Àç·Î ±¸ºÐÇÑ´Ù. GSSCredentialÀº ´ç½ÅÀÇ Á¸À縦 Áõ¸íÇϱâ À§ÇØ ³»º¸ÀÌ´Â ¾î¶² °ÍÀÌ´Ù. À̸ÞÀÏ È®ÀÎ ½Ã ÀÔ·ÂÇÏ´Â Æнº¿öµå¿Í °°´Ù. Kerberos ¼­ºñ½º ƼÄÏÀº GSSCredentialÀÇ ¶Ç ´Ù¸¥ ¿¹Á¦ÀÌ´Ù. GSSContext´Â º¸¾È °ü·Ã Á¤º¸(¾ÏÈ£ Å°)¸¦ ĸ½¶È­ÇÏ´Â º¸¾È ¼¼¼Ç °°Àº °ÍÀÌ´Ù. GSS ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº GSSContext¸¦ »ç¿ëÇÏ¿© ¾ÈÀüÇÏ°Ô Åë½ÅÇÑ´Ù.

KDC ¼³Á¤Çϱâ
GSS¿¡¼­ÀÇ Kerberos¸¦ ±¸ÇöÇÒ ¶§ Ưº°ÇÑ KDC ±¸ÇöÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù. µû¶ó¼­ GSS ±â¹ÝÀÇ ¸ðµç ÄÚµå´Â GSS È£¿ÏÀÇ KDC·Î ÀÛµ¿ÀÌ µÉ °ÍÀÌ´Ù. (Âü°íÀÚ·á).

ÀÌ ±ÛÀÇ Äڵ带 Å×½ºÆ® ÇϱâÀ§ÇØ MicrosoftÀÇ KDC ±¸ÇöÀ» »ç¿ëÇß´Ù. ÀÌ°ÍÀº Windows 2000 Server ¹öÀü ¹× ÀÌÈÄ ¹öÀü¿¡¼­ Á¦°øÇÑ´Ù. ÀÌ ±Û¿¡ ¾²ÀÎ ¸ðµç Äڵ尡 Æ÷ÇԵǾî ÀÖ´Â j-gss-sso.zip ÆÄÀÏ¿¡´Â Setup.txt ÆÄÀϵµ Æ÷ÇԵǾî ÀÖ¾î Microsoft KDC ¼³Á¤¿¡ ÇÊ¿äÇÑ ´Ü°è¸¦ ¼³¸íÇÏ°í ÀÖ´Ù.

Microsoft KDC´Â ¸ðµç Windows »ç¿ëÀÚµéÀ» ÀÌ ¼­ºñ½ºÀÇ »ç¿ëÀÚ·Î ¹Þ¾ÆµéÀδÙ. KDC°¡ Windows ³×Æ®¿öÅ©¿¡ µî·ÏµÈ ¸ðµç »ç¿ëÀÚ¸¦ À§ÇØ TGT¸¦ ¹ß±ÞÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

GSS Ŭ¶óÀ̾ðÆ®/¼­¹ö ¾ÖÇø®ÄÉÀ̼Ç
ÀÌ ¼½¼Ç¿¡¼­´Â GSS ±â¹Ý º¸¾È ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½ÇÁ¦ ±¸ÇöÀ» ¼³¸íÇÏ°Ú´Ù. Àç»ç¿ë °¡´ÉÇÑ JavaBeans ÄÄÆ÷³ÍÆ® µÎ °³¸¦ °³¹ß ÇÒ °ÍÀÌ´Ù. ÇϳªÀÇ ºóÀº ¿äû Ŭ¶óÀ̾ðÆ®·Î¼­ ÀÛµ¿ÇÏ¿© »õ·Î¿î GSS ¼¼¼ÇÀÇ ÃʱâÈ­¸¦ ¿äûÇÑ´Ù. ´Ù¸¥ ºóÀº ¼­¹ö·Î¼­ ÀÛµ¿ÇÏ¿© ¿äûÀ» ¸®½º´×ÇÏ°í Ŭ¶óÀ̾ðÆ®¿¡¼­ ¿À´Â ¿äûÀ» ¼ö¶ôÇÑ´Ù. ±×·± ´ÙÀ½ º¸¾È ÄÁÅؽºÆ®¸¦ ¸¸µé°í Ŭ¶óÀ̾ðÆ®¿Í Åë½ÅÇÑ´Ù.

ÀÌ ±Û¿¡¼­ SSO¸¦ ¼³¸íÇؾßÇϱ⠶§¹®¿¡ Á¦ »ïÀÚ¿¡ ÀÇÇØ È£½ºÆõǴ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î KDC¸¦ »ç¿ëÇÏ¿© ¿ì¸® ¾ÖÇø®ÄÉÀ̼ÇÀ» ´Ü¼øÇÏ°Ô ÇÒ °ÍÀÌ´Ù. Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö ¸ðµÎ ÀÌ KDC¸¦ ¹Ï°í ÀÖÀ¸¸ç ¿©±â¿¡¼­ ¿À´Â ÀÎÁõ µ¥ÀÌÅ͸¦ ¹Þ¾ÆµéÀδÙ. µû¶ó¼­ ÀÌ ±Û¿¡ ¾²ÀÎ »ùÇà Äڵ带 »ç¿ëÇϱâ À§Çؼ­´Â Kerberos ½ÇÇàÀÌ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ GSS È£¿ÏÀÇ KDC¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ("KDC ¼³Á¤Çϱâ" ÂüÁ¶)

JAAS ÀÎÁõ Ŭ¶óÀ̾ðÆ®
ÀÏ´Ü KDC ¼­ºñ½º¸¦ ½ÇÇàÇÏ¸é °è¼Ó ÁøÇàÇÏ¿© TGT¸¦ ¹ß±ÞÇϵµ·Ï KDC¿¡°Ô ¿äûÇÒ ¼ö ÀÖ´Ù. ¿äûÇÏ´Â GSS Ŭ¶óÀ̾ðÆ®´Â KDC¿¡°Ô TGT¸¦ ¹ß±ÞÇϵµ·Ï ¿äû ÇÒ °ÍÀÌ´Ù.

ÀÛÀº ¹®Á¦°¡ ÀÖ´Ù. GSS´Â »ç¿ëÀÚ¿¡°Ô¼­ ¿Â À¯Àú³×ÀÓ-Æнº¿öµå ½ÖÀ» °¡Á®¿Ã ¸Þ¼Òµå°¡ ¾ø´Ù. µû¶ó¼­ GSS ¾ÖÇø®ÄÉÀ̼ÇÀº ´Ù¸¥ ºñ GSS ¸ÞÄ¿´ÏÁò¿¡ ÀÇÁ¸ÇÏ¿© ·Î±×ÀÎ Á¤º¸¸¦ ¾ò¾î¾ß ÇÑ´Ù. ¿ì¸®´Â ¿©±â¼­ Java Authentication and Authorization Service (JAAS)¸¦ »ç¿ëÇÏ¿© ¿äû Ŭ¶óÀ̾ðÆ®°¡ À¯Àú³×ÀÓ°ú Æнº¿öµå¸¦ Á¦°øÇÏ°í TGT¸¦ ¾òµµ·Ï ÇÏ°Ú´Ù.

Listing 1¿¡¼­´Â GSSClient ¶ó´Â Ŭ·¡½º¸¦ º¸°Ô µÉ °ÍÀÌ´Ù. ÀÌ Å¬·¡½º´Â ¿ø°Ý GSS ¼­¹ö¿Í º¸¾È ¼¼¼ÇÀÇ ¼³Ä¡¸¦ ¿øÇÏ´Â GSS Ŭ¶óÀ̾ðÆ®ÀÇ ±â´ÉÀ» ³ªÅ¸³½´Ù. GSSClient ±¸Á¶Ã¼´Â ¸¹Àº ¸Å°³º¯¼ö¸¦ ÃëÇÑ´Ù:

  1. Ŭ¶óÀ̾ðÆ® ÇǾî À̸§

  2. Ŭ¶óÀ̾ðÆ® ÇǾîÀÇ Æнº¿öµå

  3. ¿ø°Ý ¼­ºù(serving) ÇǾîÀÇ À̸§

  4. ¿ø°Ý ¼­ºù(serving) ÇǾîÀÇ ÁÖ¼Ò

  5. ¼­¹öÀÇ Æ÷Æ®

  6. Kerberos ¿µ¿ª ¶Ç´Â µµ¸ÞÀÎ

  7. KDC ÁÖ¼Ò

  8. ·Î±×ÀÎ ¼³Á¤ ÆÄÀÏÀÇ À̸§°ú À§Ä¡ °æ·Î

  9. Ŭ¶óÀ̾ðÆ® ¼³Á¤ À̸§

main() ¸Þ¼Òµå´Â °£´ÜÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½Ã¹Ä·¹ÀÌÆÃÇÏ°í ÀÖ´Ù. Listing 1¿¡ ÀÌ ¸Þ¼Òµå¸¦ Ãß°¡Çß´Ù. ¸í·ÉÇà¿¡¼­ À̸¦ ½ÇÇàÇÏ¿© ÀÌ Å¬·¡½ºÀÇ ÀÛµ¿À» ¼³¸íÇϱâ À§Çؼ­ÀÌ´Ù. main() ¸Þ¼Òµå´Â ¸í·ÉÇà¿¡¼­ ¸Å°³º¯¼ö °ªÀ» Àаí GSSClient() ±¸Á¶Ã¼¸¦ È£ÃâÇϸ鼭 ¸Å°³º¯¼ö °ªÀ» ÀÌ ±¸Á¶Ã¼¿¡ º¸³½´Ù.

GSSClient() ±¸Á¶Ã¼´Â ´Ù¸¥ Çʵ忡 ÀÖ´Â ¸í·ÉÇà¿¡¼­ ¿À´Â ¸Å°³º¯¼ö¸¦ ÀúÀåÇÏ°í ¼¼ °³ÀÇ ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ¸¦ ÁöÁ¤ÇÑ´Ù. java.security.krb5.realm ½Ã½ºÅÛ ÇÁ·ÎÆÛƼ´Â KDC ¹üÀ§¸¦ ÁöÁ¤ÇÑ´Ù. java.security.krb5.kdc ÇÁ·ÎÆÛƼ´Â KDC ¼­¹öÀÇ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. java.security.auth.login.config ÇÁ·ÎÆÛƼ´Â ·Î±×ÀÎ ¼³Á¤ ÆÄÀÏÀÇ À̸§°ú À§Ä¡ °æ·Î¸¦ ÁöÁ¤ÇÑ´Ù. GSS ÇÁ·¹ÀÓ¿÷Àº ÀÌ ¼Ó¼ºµéÀ» ³»ºÎ¿¡¼­ »ç¿ë ÇÒ °ÍÀÌ´Ù.

GSSClient °´Ã¼¸¦ ÀνºÅϽºÈ­ ÇÑ ÈÄ¿¡, main() ¸Þ¼Òµå´Â GSSClient.login() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÀÌ ¸Þ¼Òµå´Â LoginContext °´Ã¼¸¦ ÀνºÅϽºÈ­ Çϴµ¥ JAAS ÇÁ·¹ÀÓ¿÷ÀÇ ÀϺÎÀÌ´Ù. LoginContext ±¸Á¶Ã¼´Â µÎ °³ÀÇ ¸Å°³º¯¼ö¸¦ ÃëÇÑ´Ù. µÎ ¹ø°´Â BeanCallBackHandler Ŭ·¡½ºÀÌ´Ù. ÀÌ µÑÀ» ÀÚ¼¼È÷ »ìÆ캸ÀÚ.

confName°ú ¼³Á¤ÆÄÀÏ
confNameÀº JAAS ¼³Á¤ÀÇ À̸§À» ¼ö¹ÝÇÑ´Ù. ¾ÆÈ© ¹ø° ¸í·ÉÇà ¸Å°³º¯¼ö´Â Ŭ¶óÀ̾ðÆ®°¡ ÀÎÁõ¿ëÀ¸·Î »ç¿ëÇÒ JAAS¸¦ ¼³Á¤ÇÑ´Ù. ¿©´ü ¹ø° ¸Å°³º¯¼ö·Î ÁöÁ¤µÈ JAAS ¼³Á¤ ÆÄÀÏ¿¡´Â ÇÑ °³ ÀÌ»óÀÇ Å¬¶óÀ̾ðÆ® ¼³Á¤ÀÌ Æ÷ÇԵǾî ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®´Â ÀÌ Áß Çϳª¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

JAAS ¼³Á¤Àº ÀÎÁõ¿¡ »ç¿ëµÉ ¸ÞÄ¿´ÏÁòÀ» Á¤ÀÇÇÑ´Ù. ¼³Á¤ ÆÄÀÏÀº ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÎÁõ ·ÎÁ÷°ú µ¶¸³µÈ ÀÎÁõ ¸ÞÄ¿´ÏÁòÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

JAAS ¼³Á¤Àº .conf ÆÄÀÏ·Î ÀúÀåµÈ´Ù. Listing 2 ÀÇ JAAS ¼³Á¤ ÆÄÀÏ »ùÇÿ¡´Â µÎ °¡Áö ¼³Á¤ÀÌ ÀÖ´Ù. GSSClient ¼³Á¤Àº ´ÙÀ½°ú °°´Ù:


GSSClient {
   com.sun.security.auth.module.Krb5LoginModule required;
};

ÀÌ JAAS ¼³Á¤Àº com.sun.security.auth.module.Krb5LoginModule ¶ó´Â Àڹ٠Ŭ·¡½º À̸§À» ÁöÁ¤ÇÑ´Ù. ÀÌ Å¬·¡½º´Â JAASÀÇ Kerberos ·Î±×ÀÎ ¸ðµâÀÌ°í GSSClient ¼³Á¤Àº ·Î±×Àο¡ ÀÌ°ÍÀ» »ç¿ëÇÑ´Ù. µû¶ó¼­ ÀÌ ¼³Á¤À» ÁöÁ¤ÇÑ´Ù´Â °ÍÀº ÀÎÁõ ¸ÞÄ¿´ÏÁòÀ¸·Î¼­ Kerberos¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

Listing 2. GSSClient¿Í GSSServer ¿ë JAAS ·Î±×ÀÎ ¼³Á¤

/****
    Login.conf
****/

GSSClient{
     com.sun.security.auth.module.Krb5LoginModule required;
};

GSSServer{
    com.sun.security.auth.module.Krb5LoginModule required
    storeKey=true;
};

BeanCallBackHandler
Listing 1ÀÇ Å¬¶óÀ̾ðÆ®¸¦ ´Ù½Ã »ìÆ캸ÀÚ. LoginContext ±¸Á¶Ã¼ ¸Þ¼Òµå È£Ãâ°ú ÇÔ²² Àü´ÞµÈ µÎ ¹ø° ¸Å°³º¯¼ö´Â ÀÎÁõ °úÁ¤ Áß¿¡ ÄݹéÀ» ÇÚµéÇÒ °´Ã¼¸¦ ÁöÁ¤ÇÑ´Ù. CallbackÀº ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÎÁõ ÇÁ·Î¼¼½º Áß¿¡ JAAS ±¸Çö°ú ÀÎÅÍ·¢Æà ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. Á¤»óÀûÀ¸·Î ÄÝ¹é ±â´ÉÀ» »ç¿ëÇÏ¿© À¯Àú³×ÀÓ°ú Æнº¿öµå¸¦ Kerberos ÀÎÁõ ¸ðµâ¿¡ Àü´Þ ÇÒ ¼ö ÀÖ´Ù. BeanCallBackHandler ±¸Á¶Ã¼ call¿¡ ÀÖ´Â username°ú password¸¦ Àü´ÞÇß´Ù´Â °Í¿¡ ÁÖ¸ñÇ϶ó.

Listing 3Àº BeanCallBackHandler Ŭ·¡½ºÀÌ´Ù. ÀÌ Å¬·¡½º´Â CallBackHandler ¶ó´Â ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â JAAS ÇÁ·¹ÀÓ¿÷ÀÇ ÀϺÎÀÌ°í ´Ü ÇϳªÀÇ ¸Þ¼ÒµåÀÎ handle()À» Æ÷ÇÔÇÏ°í ÀÖ´Ù.

Listing 3. JAAS ÇÁ·¹ÀÓ¿÷¿¡¼­ Äݹé Çڵ鸵Çϱâ

/****
    BeanCallbackHandler.java
****/ 

import java.io.*;
import java.security.*;
import javax.security.auth.*;
import javax.security.auth.callback.*;

public class BeanCallbackHandler implements CallbackHandler {

    // Store username and password.
    String name = null;
    String password = null;
  
    public BeanCallbackHandler(String name, String password)
    {
        this.name = name;
        this.password = password;
    }//BeanCallbackHandler


    public void handle (Callback[] callbacks) throws
      UnsupportedCallbackException, IOException 
    {
        for(int i=0; i<callbacks.length; i++) {
            Callback callBack = callbacks[i];

            // Handles username callback.
            if (callBack instanceof NameCallback) {
                NameCallback nameCallback = (NameCallback)callBack;
                nameCallback.setName(name);

             // Handles password callback.
            } else if (callBack instanceof PasswordCallback) {
              PasswordCallback passwordCallback = 
                  (PasswordCallback)callBack;
              passwordCallback.setPassword(password.toCharArray());
 
          } else {
              throw new UnsupportedCallbackException(callBack, 
                  "Call back not supported");
          }//else
      }//for 
	  
  }//handle
  
}//BeanCallbackHandler

CallBackHandler °´Ã¼ÀÇ handle() ¸Þ¼Òµå´Â ÀÎÁõÀÌ ÀÌ·ç¾îÁö´Â µ¿¾È Á¦¾î¸¦ ÀÚµ¿À¸·Î ¹Þ´Â´Ù.

JAAS ÇÁ·¹ÀÓ¿÷Àº CallBack °´Ã¼ÀÇ ¾î·¹À̸¦ CallBackHandler ÀνºÅϽºÀÇ handle() ¸Þ¼Òµå·Î Àü´ÞÇÑ´Ù. CallBack °´Ã¼ÀÇ ¾î·¹ÀÌ¿¡´Â ´Ù¸¥ À¯ÇüÀÇ ÄÝ¹é °´Ã¼µéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ÇÏÁö¸¸ ¿©±â¿¡¼­´Â µÎ °¡Áö À¯Çü(NameCallBack°ú PasswordCallBack)À» Áß½ÉÀ¸·Î ¼³¸íÇÏ°Ú´Ù.

NameCallBack °´Ã¼´Â JAAS ÇÁ·¹ÀÓ¿÷¿¡ usernameÀ» Á¦°øÇϴµ¥ »ç¿ëµÈ´Ù. PasswordCallBackÀº ÀÎÁõ µ¿¾È password¸¦ ¼ö¹ÝÇÑ´Ù. ÇÚµé ¸Þ¼Òµå(Listing 3)³»ºÎ¿¡¼­ NameCallBack °´Ã¼ÀÇ setName() ¸Þ¼Òµå¸¦, PasswordCallBackÀÇ setPassword() ¸Þ¼Òµå¸¦ È£ÃâÇß´Ù.

LoginContext ±¸Á¶Ã¼ È£Ãâ¿¡ µû¸£´Â µÎ °³ÀÇ ¸Å°³º¯¼ö¿¡ ´ëÇÑ À§ ³íÀǸ¦ ¿ä¾àÇغ¸¸é »ç¿ëÀÚ ÀÎÁõ¿¡ ÇÊ¿äÇÑ LoginContext °´Ã¼¿¡ ¸ðµç Á¤º¸¸¦ Á¦°øÇØ ÁÙ ¼ö ÀÖ´Ù. µû¶ó¼­ Listing 1ÀÇ ´ÙÀ½ ´Ü°è´Â LoginContext.login() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÀÌ´Â ½ÇÁ¦ ·Î±×ÀÎ ÇÁ·Î¼¼½º¸¦ ¼öÇàÇÒ °ÍÀÌ´Ù.

ÀÎÁõ ÇÁ·Î¼¼½º Áß¿¡ ¹«¾ùÀΰ¡ À߸øµÈ´Ù¸é-¿¹¸¦ µé¾î, password°¡ Á¤È®ÇÏÁö ¾Ê´Ù°Å³ª-javax.security.auth.login.LoginExceptionÀÌ ´øÁ®Áø´Ù. ·Î±×ÀÎ ¸Þ¼Òµå È£ÃâÀÇ °á°ú·Î ¾î¶² ¿¹¿Üµµ ¾ø´Ù¸é ÀÎÁõ ÇÁ·Î¼¼½º°¡ ¼º°øÇß´Ù´Â °ÍÀ¸·Î °£ÁÖÇÒ ¼ö ÀÖ´Ù.

Kerberos ·Î±×ÀÎÀ» »ç¿ëÇÏ°í Àֱ⠶§¹®¿¡ JAAS ÇÁ·¹ÀÓ¿÷Àº ³»ºÎÀûÀ¸·Î KDC¿ÍÀÇ ¸ðµç Åë½ÅÀ» °ü¸®ÇÏ°í Kerberos TGT¸¦ º¸³»¸é¼­ °í±ÞÀÇ »ç¿ëÀÌ Æí¸®ÇÑ JAAS ÀÎÅÍÆäÀ̽º µÚ¿¡ ¸ðµç ±â¼úÀû »ó¼¼µéÀ» ¼û±ä´Ù.

¼º°øÀûÀÎ ÀÎÁõÀº LoginContext °´Ã¼ ¾È¿¡ Kerberos TGT¸¦ ·ÎµùÇÏ°Ô µÈ´Ù. LoginContext Ŭ·¡½ºÀÇ getSubject() ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº Subject¶ó´Â Ŭ·¡½º ÀνºÅϽº¸¦ ¸®ÅÏÇÑ´Ù. Subject ÀνºÅϽº´Â TGT¸¦ ·¡ÇÎÇÑ´Ù.

ÀÌ Subject Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ¿ì¸®°¡ ·Î±×ÀÎ Çß´ø ¾×¼ÇÀ» ¼öÇàÇÒ °ÍÀÌ´Ù. º¸¾È GSS ÄÜÅؽºÆ®¸¦ ¼³Ä¡ÇÏ´Â °ÍÀÌ´Ù. ÀÎÁõÀÌ ¼º°øÇÑ ÈÄ ÇÊ¿äÇÑ ¾×¼ÇÀ» È£ÃâÇÏ´Â ¹æ¹ýÀ» º¸ÀÚ.

Subject Ŭ·¡½º¿¡´Â doAs()¶ó´Â Á¤Àû ¸Þ¼Òµå°¡ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ°ÍÀº µÎ °³ÀÇ ¸Å°³º¯¼ö¸¦ °®´Â´Ù. Listing 1ÀÇ Subject.doAs() ¸Þ¼Òµå È£ÃâÀ» º¸ÀÚ. ù ¹ø° ¸Å°³º¯¼ö °ªÀº Subject ÀνºÅϽº·Î¼­ ¼º°øÀûÀÎ ÀÎÁõ ÈÄ¿¡ ȹµæÇÑ °ÍÀÌ´Ù. doAs() ¸Þ¼Òµå´Â ÀÎÁõµÈ Subject¸¦ »ç¿ëÇÏ¿© ±ÇÇÑ °áÁ¤À» ³»¸°´Ù. ÀÌ Subject°¡ ÁÖ¾îÁø ÀÛµ¿À» È£ÃâÇÒ ±ÇÇÑÀ» ¹Þ¾Ò´ÂÁö¸¦ ÆÇ´ÜÇϴµ¥ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

Áö±Ý±îÁö Subject Ŭ·¡½º´Â TGT¸¦ º¸³»´Âµ¥¿¡¸¸ »ç¿ëÇß´Ù. µû¶ó¼­ GSSClient¿¡ ´ëÇÑ ±ÇÇÑ Á¤Ã¥À» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù. ¾î¶² »ç¿ëÀÚ¶óµµ ÀÌ Å¬¶óÀ̾ðÆ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. GSSClient´Â ÁÖ¾îÁø ÀÛµ¿À» ½ÇÇàÇÒ ¶§ º¸¾È ±ÇÇÑÀ» ¿ä±¸ÇÏÁö ¾Ê´Â´Ù. ÇÏÁö¸¸ ¾ÖÇø´ °°Àº À¥ Ŭ¶óÀ̾ðÆ®´Â ¾ö°ÝÇÑ º¸¾È ÄÜÅؽºÆ® ÇÏ¿¡¼­ ½ÇÇàµÈ´Ù. Setup.txt¿¡´Â ¾ÖÇø´ ±â¹ÝÀÇ GSS Ŭ¶óÀ̾ðÆ®¸¦ À§ÇÑ ±ÇÇÑ Á¤Ã¥À» ÀÛ¼ºÇÏ´Â ÁöħÀÌ Æ÷ÇԵǾî ÀÖ´Ù.

doAs() ¸Þ¼Òµå È£ÃâÀÇ µÎ ¹ø° ¸Å°³º¯¼ö °ªÀÎ this´Â GSSClient °´Ã¼(Listing 1)¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö´Â PriviledgedAction ÀÎÅÍÆäÀ̽º¸¦ ³ëÃâÇÏ´Â °´Ã¼¸¦ ±â´ëÇÑ´Ù. GSSClient´Â ±× PriviledgedAction ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ´Ù. ÇϳªÀÇ Å¬·¡½º¿¡ ¸ðµç Ŭ¶óÀ̾ðÆ®Ãø Äڵ带 Á¶ÇÕÇßÁö¸¸ PriviledgedAction ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °³º° Ŭ·¡½º¸¦ °¡Áú ¼ö ÀÖ´Ù. ¿øÇÑ´Ù¸é ¸»ÀÌ´Ù. ¸¸ÀÏ ±×·¸°Ô ÇÑ´Ù¸é ±× °´Ã¼¸¦ ÀνºÅϽºÈ­ ÇÏ°í doAs() ¸Þ¼Òµå È£Ãâ°ú ÇÔ²² µÎ ¹ø° ¸Å°³º¯¼ö °ªÀ¸·Î¼­ À̸¦ Àü´ÞÇÑ´Ù.

PriviledgedAction ÀÎÅÍÆäÀ̽º¿¡´Â ´Ü ÇϳªÀÇ ¸Þ¼Òµå run()ÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ±ÇÇÑ Á¤Ã¥ÀÌ Subject·Î ÇÏ¿©±Ý GSSClient Ŭ·¡½ºÀÇ run() ¸Þ¼Òµå¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù¸é ±× ¸Þ¼Òµå´Â °³º° ¾²·¹µå ½ÇÇà¿¡¼­ Á¦¾î¸¦ ¹Þ´Â´Ù. run() ¸Þ¼Òµå°¡ Á¦¾î¸¦ ¹ÞÀ¸¸é º¸¾È ÄÜÅؽºÆ®(TGT)°¡ µû¶ó¿Â´Ù. GSS ·ÎÁ÷Àº ÀÚµ¿À¸·Î ±× º¸¾È ÄÜÅؽºÆ®¸¦ »ç¿ëÇÏ°í TGT¸¦ º¸³½´Ù.

GSS Ŭ¶óÀ̾ðÆ® µðÀÚÀÎ
Listing 1ÀÇ run() ¸Þ¼Òµå¿¡¼­ ´ÙÀ½ ´Ü°è¸¦ ¼öÇàÇÏ¿© GSS ¼¼¼ÇÀ» ¸¸µé¾î¾ß ÇÑ´Ù:

  1. GSSManager¸¦ ÀνºÅϽºÈ­ ÇÑ´Ù. GSSManager Ŭ·¡½ºÀÇ getInstance() Á¤Àû ¸Þ¼Òµå¸¦ È£ÃâÇß´ø Listing 1À» ÁÖ¸ñÇ϶ó. ÀÌ°ÍÀº GSSManager °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ GSSManager °´Ã¼´Â Àû¾îµµ Kerberos ¸ÞÄ¿´ÏÁòÀ» Áö¿øÇÏ°í ±× ¹Û¿¡ ´Ù¸¥ ¸ÞÄ¿´ÏÁòµµ Áö¿øÇÒ °ÍÀÌ´Ù. GSSManager Ŭ·¡½º¿¡´Â GSS ¾ÖÇø®ÄÉÀ̼ÇÀÌ ´Ù¸¥ º¸¾È ¸ÞÄ¿´ÏÁòÀ» Á¤ÀÇÇϱâ À§ÇØ È£ÃâÇÒ ¼ö ÀÖ´Â ¸Þ¼ÒµåµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. Áö±ÝÀº Kerberos ¸ÞÄ¿´ÏÁòÀ» Áß½ÉÀ¸·Î ¼³¸íÇÏ´Â °ÍÀÌ´Ï ¸¸Å­ getInstance() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Kerberos ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÑ´Ù. Listing 1ÀÇ GSSManager °´Ã¼¸¦ ÀνºÅϽºÈ­ ÇÑ ÈÄ¿¡ kerberos¶ó´Â Oid (Object ID) °´Ã¼¸¦ ÀνºÅϽºÈ­ Çß´Ù. ÀÌ°ÍÀº Kerberos ¸ÞÄ¿´ÏÁòÀ» È®ÀÎÇÑ´Ù. ."

  2. GSSName °´Ã¼¸¦ ¸¸µç´Ù. ÀÌ°ÍÀº GSS ¿£ÅÍƼ¸¦ ³ªÅ¸³½´Ù. Åõ¿þÀÌ Åë½ÅÀ» ÇÏ´Â µ¿¾È GSS ¿£ÅÍƼ¸¦ Åë½Å ÇǾî·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ µÎ °³ÀÇ GSSName °´Ã¼¸¦ ¸¸µå´Â °ÍÀÌ´Ù. Çϳª´Â ¿äû Ŭ¶óÀ̾ðÆ® ÇǾî(clientPeerName)¿ëÀÌ°í ¶Ç ´Ù¸¥ Çϳª´Â ¿ø°Ý ÇǾî(remotePeerName)¿ëÀÌ´Ù.

  3. Credential ¼¼Æ®¸¦ ¸¸µç´Ù. GSS´Â ÀϹÝÀûÀÎ º¸¾È ¸ÞÄ¿´ÏÁòÀÌ´Ù. µû¶ó¼­ ±âÀúÀÇ ±â¼ú¿¡ ÀÇÁ¸ÇÏ¿© ÀÌ·¯ÇÑ CredentialÀ» ¸¸µç´Ù. Kerberos¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î Kerberos ƼÄÏÀº ½ÇÁ¦ CredentialÀÌ´Ù. GSSCredential °´Ã¼¸¦ ¾òÀ¸·Á¸é GSSManager Ŭ·¡½ºÀÇ createCredential() ¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù. createCredential() ¸Þ¼Òµå´Â GSSCredential ÀÎÅÍÆäÀ̽º¸¦ ³ëÃâÇÏ´Â °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.

  4. º¸¾È GSS ÄÜÅؽºÆ®¸¦ ¸¸µç´Ù. ÀÌ°ÍÀº µÎ °³ÀÇ Åë½Å ÇÇ¾î °£ º¸¾È Åë½ÅÀ» È®¸³Çϴµ¥ »ç¿ëµÈ´Ù. GSSManagerÀÇ createContext() ¸Þ¼Òµå´Â GSSContext ÀÎÅÍÆäÀ̽ºÀÇ ÀνºÅϽº¸¦ ¸¸µé¾î ¸®ÅÏÇÑ´Ù. GSSContext °´Ã¼´Â ½ÇÁ¦ º¸¾È ÄÜÅؽºÆ®¸¦ ·¡ÇÎÇÑ´Ù. Listing 1¿¡¼­ GSSName°ú GSSCredential °´Ã¼¸¦ Àü´ÞÇß´Ù´Â °Í¿¡ ÁÖ¸ñÇ϶ó.

º¸¾È ÄÜÅؽºÆ®¸¦ ·¡ÇÎÇÏ´Â GSSContext °´Ã¼¸¦ °¡Á³Áö¸¸ ÄÜÅؽºÆ® ±× ÀÚü´Â ¾ÆÁ÷ ¼³Ä¡µÇÁö ¾Ê¾Ò´Ù. GSSContext °´Ã¼¸¦ ¾òÀº ÈÄ ¿äû ÇǾ ÀÌ°ÍÀÇ requestConf() ¸Þ¼Òµå¸¦ È£Ãâ ÇÒ °ÍÀÌ´Ù. ÀÌ ¸Þ¼Òµå´Â ¾ÖÇø®ÄÉÀ̼ÇÀÌ ±â¹Ð¼º°ú µ¥ÀÌÅÍ ¹«°á¼ºÀ» ¿äûÇÏ°Ô ÇÏ¿© ¿ø°ÝÀ¸·Î º¸³»´Â ¸ðµç µ¥ÀÌÅÍ°¡ ¾ÏȣȭµÈ Çü½ÄÀÌ µÇµµ·Ï ÇÑ´Ù.

Listing 1¿¡¼­ requestConf() ¸Þ¼Òµå¸¦ È£Ãâ ÇÑ ÈÄ¿¡ byteTokenÀ̶ó´Â ¹ÙÀÌÆ®ÀÇ ¾î·¹À̸¦ ¼±¾ðÇß°í À̸¦ Á¦·Î »çÀÌÁî ¹ÙÀÌÆ®·Î ÀνºÅϽºÈ­ Çß´Ù. byteToken ¾î·¹ÀÌ´Â GSS Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡¼­ ¼Û¼ö½ÅÇÏ´Â µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ °®°íÀְԵȴÙ.

GSSContext ÀÎÅÍÆäÀ̽ºÀÇ initSecContext() ¸Þ¼Òµå¸¦ while ·çÇÁ¿¡¼­ ¹Ýº¹ÀûÀ¸·Î È£ÃâÇÑ´Ù. ÀÌ ¸Þ¼Òµå´Â ½ÇÁ¦ ¹ÙÀÌÆ® ±³È¯À» ¼öÇàÇÏ¿© ¿äû ÇǾî¿Í ¼­ºù ÇÇ¾î °£ º¸¾È ÄÜÅؽºÆ®¸¦ È®¸³ÇÑ´Ù.

while(!peerContext.isEstablished()) ºí·Ï(Listing 1)Àº ½ÇÁ¦·Î GSS Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö °£ Åõ¿þÀÌ Åë½ÅÀ» ¼öÇàÇÑ´Ù. ÀÌ ºí·ÏÀº º¸¾È ÄÜÅؽºÆ®°¡ ¼³Ä¡µÇ¾úÀ» ¶§¿¡¸¸ Á¾·áµÈ´Ù.

while ·çÇÁ°¡ ù¹ø°·Î ½ÇÇàµÉ ¶§ byteToken ¾î·¹ÀÌ¿¡´Â µ¥ÀÌÅÍ°¡ ¾ø´Ù. peerContext.isEstablished() ¸Þ¼Òµå´Â false¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù. º¸¾È ÄÜÅؽºÆ®°¡ ¾ÆÁ÷ ¼³Ä¡µÇÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù.

while ·çÇÁ ³»ºÎ¿¡¼­ ¿ì¸®°¡ ¼öÇàÇϴ ù ¹ø° ÀÏÀº byteToken ¾î·¹À̻󿡼­ initSecContext() ¸Þ¼Òµå¸¦ Àü´ÞÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¸Þ¼Òµå´Â µÎ °¡ÁöÀÇ ÀÏÀ» ÇÑ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö¿¡ º¸³»´Â ¹ÙÀÌÆ®¸¦ ¸¸µé¾î³»°í ¼­¹ö¿¡¼­ ¿À´Â ¹ÙÀÌÆ®¸¦ ¹Þ¾ÆµéÀδÙ. ¹ÙÀÌÆ® ±³È¯Àº GSS ÄÜÅؽºÆ®°¡ È®¸³µÉ ¶§ ±îÁö °è¼ÓµÈ´Ù.

óÀ½¿¡ initSecContext() ¸Þ¼Òµå¸¦ È£Ãâ ÇÒ ¶§ Àü´ÞÇÒ ¹ÙÀÌÆ®°¡ ¾ø´Ù. µû¶ó¼­ ºñ¾îÀÖ´Â byteToken ¾î·¹ÀÌ¿¡¼­ ù ¹ø° È£Ãâ¿ë ¸Þ¼Òµå¿¡ Àü´ÞÇÑ´Ù. initSecContext() ¸Þ¼Òµå´Â ¸î¸î ¹ÙÀÌÆ®¸¦ ¸®ÅÏÇϴµ¥ ÀÌ°ÍÀº °°Àº byteToken ¾î·¹ÀÌ¿¡ ÀúÀåµÇ¾ú´Ù. ±× ´ÙÀ½ byteTokenÀ» ¾Æ¿ôDz ½ºÆ®¸²¿¡ ÀÛ¼ºÇÏ°í ½ºÆ®¸²À» Ç÷¯½Ã ÇÏ¿© byteToken ¾î·¹ÀÌ°¡ ¿ø°Ý ¼­¹ö·Î º¸³»Áöµµ·Ï ÇÑ´Ù.

¿ø°Ý ¼­¹ö¿¡ º¸³»Áø ¹ÙÀÌÆ®¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î ¿ø°Ý ¼­¹ö´Â ¾î¶² °ÍÀ» º¸³¾°ÍÀ¸·Î ±â´ëÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ¿ì¸®´Â ÀÎDz ½ºÆ®¸²¿¡¼­ ¹ÙÀÌÆ®¸¦ ÀÐ°í °°Àº byteToken ¾î·¹ÀÌ¿¡ ÀÌ ¹ÙÀÌÆ®¸¦ ÀúÀåÇÏ°í byteToken ¾î·¹À̸¦ ´Ù½Ã initSecContext() ¸Þ¼Òµå¿¡ º¸³½´Ù. ÀÌ ¸Þ¼Òµå´Â ´Ù½Ã ¹ÙÀÌÆ® ¾î·¹À̸¦ ¸®ÅÏÇÑ´Ù. ÀÌ·¯ÇÑ ¹ÙÀÌÆ® ±³È¯Àº while ·çÇÁ ³»ºÎ¿¡¼­ º¸¾È ÄÜÅؽºÆ®°¡ È®¸³µÇ°í peerContext.isEstablished() ¸Þ¼Òµå°¡ true¸¦ ¸®ÅÏÇÒ ¶§ ±îÁö Áö¼ÓµÈ´Ù.

º¸¾È ÄÜÅؽºÆ®ÀÇ ¼³Ä¡°¡ ÀǹÌÇÏ´Â °ÍÀº ÀûÀýÇÑ Kerberos Å°µéÀÌ Å¬¶óÀ̾ðÆ®¿Í ¼­¹ö ¾çÃø¿¡¼­ »ç¿ë°¡´ÉÇÑ »óÅ°¡ µÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¾çÃø¿¡¼­ ÀÌ Å°µéÀ» »ç¿ëÇÏ¿© º¸¾È Åë½Å¿¡ ¾´´Ù. º¸¾È ÄÜÅؽºÆ®°¡ ¼º¸³µÇ¸é GSSContext °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.

GSS ÄÜÅؽºÆ® »ç¿ëÇϱâ
GSSClient Ŭ·¡½ºÀÇ main() ¸Þ¼Òµå¿¡¼­ GSSContext °´Ã¼¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» »ìÆ캸°Ú´Ù. login() ¸Þ¼Òµå¸¦ È£ÃâÇÑ ÈÄ login() ¸Þ¼Òµå°¡ ¸®ÅÏÇÑ GSSContext ÀÌ nullÀÎÁö¸¦ È®ÀÎÇÑ´Ù. nullÀÌ ¾Æ´Ï¶ó¸é º¸¾È ÄÜÅؽºÆ®°¡ ¿ø°Ý ¼­¹ö¿ÍÀÇ º¸¾È Åë½Å¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.

main() ¸Þ¼Òµå´Â ¿ø°Ý ¼­¹ö°¡ ±â¹Ð¼º°ú ¸Þ½ÃÁö ¹«°á¼ºÀ̶ó´Â Ŭ¶óÀ̾ðÆ® ¿äû¿¡ ÇÕ´çÇÑÁö¸¦ Á¡°ËÇÑ´Ù. ¼­¹ö°¡ ¿äû¿¡ ÇÕ´çÇϸé GSSContext Ŭ·¡½ºÀÇ getConfState() ¸Þ¼Òµå´Â true¸¦ ¸®ÅÏÇÑ´Ù.

main() ¸Þ¼Òµå´Â ¿ø°Ý ¸Þ¼Òµå·Î º¸³»´Â µ¥ÀÌÅÍ°¡ ¹«¾ùÀÌµç º¸³¾ ¼ö ÀÖ´Ù. sendMessage() ÇïÆÛ ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÏ¿© µ¥ÀÌÅ͸¦ ¼­¹ö¿¡ º¸³Â´Ù. GSSContext Ŭ·¡½ºÀÇ wrap() ¸Þ¼Òµå´Â µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¾î·¹À̸¦ ¹Þ¾ÆµéÀÌ°í ¹ÙÀÌÆ® ¾î·¹À̸¦ ¸®ÅÏÇÑ´Ù. sendMessage() ¸Þ¼Òµå´Â Ç÷¹ÀÎ ÅؽºÆ® µ¥ÀÌÅ͸¦ wrap() ¸Þ¼Òµå¿¡ º¸³»°í ÀÀ´äÀ¸·Î ¾ÏȣȭµÈ ¹ÙÀÌÆ® ¾î·¹À̸¦ ¹Þ´Â´Ù. ¾Æ¿ôDz ½ºÆ®¸² »ó¿¡¼­ ¹ÙÀÌÆ® ¾î·¹À̸¦ ÀÛ¼ºÇÏ¿© ¾ÏȣȭµÈ ¹ÙÀÌÆ® ¾î·¹À̸¦ ¿ø°Ý ¼­¹ö·Î º¸³¾ ¼ö ÀÖ´Ù.

sendMessage() ¸Þ¼Òµå´Â ¼­¹ö¿¡¼­ ¿À´Â ÀÎÄ¿¹Ö µ¥ÀÌÅ͸¦ ¸®½º´×ÇÑ´Ù. ¼­¹ö¿¡¼­ µ¥ÀÌÅ͸¦ ¹ÞÀ¸¸é ÀÎÄ¿¹Ö µ¥ÀÌÅ͸¦ GSSContext Ŭ·¡½ºÀÇ unwrap() ¸Þ¼Òµå¿¡ º¸³¾ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ÆòÀÌÇÑ ÅؽºÆ® Çü½ÄÀÇ µ¥ÀÌÅ͸¦ ¸®ÅÏÇÑ´Ù.

GSS ¼­¹ö ¾ÖÇø®ÄÉÀ̼Ç
Áö±Ý±îÁö GSS Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÛµ¿ ¹æ¹ýÀ» º¸¾Ò´Ù. ÀÌÁ¦ ÀÌ°Í°ú ÀÎÅÍ·¢Æà ÇÒ ¼­¹ö¸¦ ±¸ÇöÇغ»´Ù.

Listing 4´Â GSSServer Ŭ·¡½º¿ë ÄÚµåÀÌ´Ù. GSSServerÀÇ startServer() ¸Þ¼Òµå´Â GSSClient Ŭ·¡½ºÀÇ login() ¸Þ¼Òµå¸¦ ¼³¸íÇϸ鼭 °Å·ÐµÇ¾ú´ø °Í°ú °°Àº ±â´ÉÀ» ¼öÇàÇÑ´Ù.

GSSServer Ŭ·¡½ºÀÇ run() ¸Þ¼Òµå ³»ºÎ¿¡¼­ GSSManager¿Í GSSName °´Ã¼¸¦ ¸¸µé¾ú´Ù. Áö±Ý±îÁö Ŭ¶óÀ̾ðÆ®Ãø ÄÚµå¿Í ¼­¹öÃø ÄÚµå »çÀÌ¿¡ Â÷ÀÌÁ¡ÀÌ °ÅÀÇ ¾ø¾ú´Ù. ÇÏÁö¸¸ Á»´õ ÀÚ¼¼È÷ º¸¸é ¼­¹ö´Â ´Ü ÇϳªÀÇ GSSName °´Ã¼¸¦ ¸¸µç´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ¼­¹ö¸¦ ³ªÅ¸³½´Ù. GSSNameÀ» ¸¸µç ÈÄ¿¡ ÀÌ ¼­¹ö´Â createCredential() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© GSSCredential °´Ã¼¿¡ credentials¸¦ ·ÎµùÇÑ´Ù.

´ÙÀ½ ´Ü°è´Â GSS ÄÜÅؽºÆ®¸¦ ¸¸µé±â À§ÇØ createContext() °´Ã¼¸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù. createContext() ¸Þ¼Òµå È£ÃâÀº GSS Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÀÌ·ç¾îÁø createContext() È£Ãâ°ú´Â ´Ù¸£´Ù. Áö±ÝÀÇ createContext() ¸Þ¼Òµå´Â ´Ü ÇϳªÀÇ ¸Å°³º¯¼öÀÇ ¼­¹öÀÇ credentialÀ» °®´Â´Ù. ÀÌ ¼­¹öÃø ÄÜÅؽºÆ®°¡ ¾çÃø »çÀÌ¿¡ ÀÖÁö ¾Ê´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

´ÙÀ½¿¡´Â Åë½Å¿ë ÀÎDz°ú ¾Æ¿ôDz ½ºÆ®¸²À» ¸¸µç´Ù. ±×·± ´ÙÀ½ º¸¾È ÄÜÅؽºÆ®°¡ ¼³Ä¡µÉ ¶§±îÁö °è¼Ó ·çÇÎ ÇÒ while ·çÇÁ·Î µé¾î°£´Ù. ÀÌ ·çÇÁ ¾È¿¡¼­ ¿äû Ŭ¶óÀ̾ðÆ®¸¦ ±â´Ù·Á ¿¬°á ±¸Ãà ¿äûÀ» º¸³½´Ù. while ·çÇÁ ³»ºÎÀÇ ÀÎDz ½ºÆ®¸² »ó¿¡¼­ µ¥ÀÌÅ͸¦ ¹ÞÀ¸¸é µ¥ÀÌÅ͸¦ ¹ÙÀÌÆ® ¾î·¹ÀÌ·Î ÀÐ°í ¹ÙÀÌÆ® ¾î·¹ÀÌ ÅäÅ«À» GSSContext Ŭ·¡½ºÀÇ acceptSecContext() ¸Þ¼Òµå¿¡ Á¦°øÇÑ´Ù. acceptSecContext() ¸Þ¼Òµå´Â µ¥ÀÌÅÍ ¹ÙÀÌÆ®¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ°ÍÀº ¾Æ¿ôDz ½ºÆ®¸²À¸·Î µÇµ¹¾Æ°£´Ù.

GSSContextÀÇ initSecContext()¿Í acceptSecContext() ¸Þ¼Òµå´Â °áÇÕÇÏ¿© ÀÛµ¿ÇÑ´Ù. GSS Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼³¸íÇϸ鼭 initSecContext() ¸Þ¼ÒµåÀÇ »ç¿ë¹ýÀ» ¼³¸íÇß´Ù. initSecContext() ¸Þ¼Òµå´Â GSS Ŭ¶óÀ̾ðÆ®°¡ GSS ¼­¹ö ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î º¸³»´Â Ãʱ⠹ÙÀÌÆ®¸¦ ¸¸µé¾î³½´Ù. acceptSecContext() ¸Þ¼Òµå´Â ÀÌ·¯ÇÑ ÀÎÄ¿¹Ö ¹ÙÀÌÆ®¸¦ ¹Þ¾ÆµéÀÌ°í ÀÌ°ÍÀÇ ¹ÙÀÌÆ® ¾î·¹À̸¦ ¸¸µé¾î³½´Ù. ÀÌ°ÍÀ» Ŭ¶óÀ̾ðÆ®·Î º¸³½´Ù. ÀÌ·¯ÇÑ ¹ÙÀÌÆ® ±³È¯Àº º¸¾È GSS ÄÜÅؽºÆ®°¡ ±¸ÃàµÉ ¶§ ±îÁö Áö¼ÓµÈ´Ù.

GSS´Â ¸ðµç Åë½ÅÀ» ¹ÙÀÌÆ® ¾î·¹ÀÌ ÅäÅ«À¸·Î¼­ ÇÚµéÇÑ´Ù. Ŭ¶óÀ̾ðÆ®¿¡¼­ ¼­¹ö·Î ¹ÙÀÌÆ® ¾î·¹À̸¦ ³ª¸£±âÀ§ÇØ ¾î¶² À¯ÇüÀÇ Àü¼Û ¼­ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. GSS´Â µ¥ÀÌÅÍ Àü¼Û¿¡ »ç¿ëµÇ´Â °Í¿¡´Â °ü½ÉÀÌ ¾ø´Ù.

º¸¾È ¼¼¼ÇÀÇ ±¸Ãà °úÁ¤Àº ¿äû Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõÀ¸·Î ³¡À» ¸Î´Â´Ù. GSSContext Ŭ·¡½ºÀÇ getSrcName() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© ÀÎÁõµÈ Ŭ¶óÀ̾ðÆ®ÀÇ GSSNameÀ» º¸³¾ ¼ö ÀÖ´Ù. ¹Ý¸é GSSContext Ŭ·¡½ºÀÇ getTargName() ¸Þ¼Òµå´Â ¿ø°Ý Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ¼ö¶ôÇÑ ¼­¹öÀÇ GSSNameÀ» ¸®ÅÏÇÑ´Ù.

while (!context.isEstablished()) ·çÇÁ°¡ ¸®ÅÏÇÑ ÈÄ¿¡(Listing 4) run() ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®·Î ºÎÅÍ Åë½ÅÀ» ±â´Ù¸°´Ù. ÀÎÄ¿¹Ö µ¥ÀÌÅ͸¦ °è¼ÓÇؼ­ ¸®½º´×ÇÏ°í ÀÎÄ¿¹Ö ¹ÙÀÌÆ® ½ºÆ®¸µÀ» ¹Þ°ÔµÇ¸é GSSContext Ŭ·¡½ºÀÇ unwrap() ¸Þ¼Òµå¸¦ ÅëÇØ ½ºÆ®¸µÀ» º¸³½´Ù. unwrap() ¸Þ¼Òµå´Â Ŭ¶óÀ̾ðÆ®¿¡¼­ ¿Â ÆòÀÌÇÑ ÅؽºÆ® Çü½ÄÀÇ ¸Þ½ÃÁö¸¦ ¸®ÅÏÇÑ´Ù.

ºê¶ó¿ìÀú ¼ÓÀÇ GSS
Listing 5´Â ¾ÖÇø´ÀÌ Listing 1ÀÇ GSS Ŭ¶óÀ̾ðÆ®¸¦ »ç¿ëÇÏ¿© Listing 4ÀÇ GSS ¼­¹ö¿ÍÀÇ º¸¾È Åë½ÅÀ» ±¸ÃàÇÏ´Â ¹æ¹ýÀÌ ³ª¿ÍÀÖ´Ù.

ÀÌ ¾ÖÇø´Àº HTML ÆäÀÌÁö¿¡¼­ ½ÇÇàµÉ °ÍÀÌ´Ù. (Listing 6):

Listing 6. GSS ¾ÖÇø´À» »ç¿ëÇÏ´Â HTML ÆäÀÌÁö

<!--
    E-Commerce Login.html
-->

<HTML>
<HEAD>
<TITLE>E-Commerce Login... </TITLE>
</HEAD>
<BODY>
    <p align="center">
    <table bgcolor="Gray">
        <tr>
            <td align="center"> 
                <b>E-Commerce Site Login Page </b>
            </td> 
        </tr>
        <tr>
            <td>
                <Applet 
                    CODE="GSSClientApplet.class" 
                    archive="GSSClientApplet.jar"
                    name="GSSClientApplet" 
                    width="500" height="280">
                </Applet>
            </td>
        </tr> 
    </table>
    </p>
</BODY>
</HTML>

ÀÌ ¾ÖÇø´ÀÌ e-Ä¿¸Ó½º À¥ »çÀÌÆ®ÀÇ ¸ÞÀÎ ÆäÀÌÁö¿¡¼­ ½ÇÇàµÈ´Ù°í »ý°¢Çغ¸ÀÚ. ±×¸² 1Àº ½ÇÇà ¸ð½ÀÀ» ³ªÅ¸³½ °ÍÀÌ´Ù. µÎ °³ÀÇ ÅؽºÆ® ¿£Æ®¸® Çʵå, ¹öÆ° ¼¼ °³, ÇϳªÀÇ ÅؽºÆ® ¿µ¿ªÀÌ ÀÖ´Ù. ¼¼ °³ÀÇ ¹öÆ° °¢°¢Àº e-Ä¿¸Ó½º À¥ »çÀÌÆ®ÀÇ ÆÄÆ®³ÊÀÇ ¼­¹öÃø ±¸Çö¿¡ »óÀÀÇÑ´Ù.

±×¸² 1. GSS ¾ÖÇø´ »ç¿ë
An HTML page showing GSS applet usage

e-Ä¿¸Ó½º À¥ »çÀÌÆ® °í°´Àº ¾î¶² »çÀÌÆ® ÆÄÆ®³Ê¶óµµ ÀÎÁõ¹ÞÀ» ¼ö ÀÖ´Ù. ¾ÖÇø´ÀÇ ÅؽºÆ® Çʵ忡 À¯Àú³×ÀÓ°ú Æнº¿öµå¸¦ ÀÔ·ÂÇÏ°í ÀÎÁõÀ» ¿øÇÏ´Â ÆÄÆ®³Ê »çÀÌÆ®¿¡ ÇØ´çÇÏ´Â Login ¹öÆ°À» ´©¸¥´Ù. ÀÌ ¹öÆ°ÀÇ À̺¥Æ® Çڵ鷯´Â GSSClient ±¸Á¶Ã¼¿¡ ÇÊ¿äÇÑ ¸Å°³º¯¼ö¸¦ Á¦°øÇÑ´Ù. ³ª¸ÓÁö ÀÛ¾÷Àº GSS Ŭ¶óÀ̾ðÆ®°¡ ÇÒ ÀÏÀÌ°í ÀÌ°ÍÀº ÀÌ¹Ì ¼³¸íÇß´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
'½Ì±Û»çÀοÂ'À̶õ ¹«¾ùÀΰ¡?
Kerberos »ç¿ëÇϱâ
Java Generic Security Services API
GSS Ŭ¶óÀ̾ðÆ®/¼­¹ö ¾ÖÇø®ÄÉÀ̼Ç
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
A Kerberos primer
Java security, Part 2: Authentication and authorization
Enhance Java GSSAPI with a login interface using JAAS
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Faheem KhanÀº EAI¿Í B2B ¼Ö·ç¼Ç Àü¹® ÄÁ¼³ÅÏÆ®ÀÌ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ