GSS-API¿Í Kerberos ƼÄÏÀ» »ç¿ëÇÏ¿© SSO¸¦ ±¸ÇöÇϴ Ŭ¶óÀ̾ðÆ®/¼¹ö ÀÚ¹Ù
¾ÖÇø®ÄÉÀÌ¼Ç µðÀÚÀÎ
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¿Í ¼ºñ½º ƼÄÏÀÇ ÀÛµ¿ ¹æ¹ýÀ» ¼³¸íÇØÁÖ´Â ´ÙÀ½ÀÇ Å° ±³È¯ ½Ã³ª¸®¿À¸¦ º¸ÀÚ:
- Ŭ¶óÀ̾ðÆ®°¡ TGTÀÇ ¹ßÇàÀ» ¿äûÇϸç KDC¿¡ ¸Þ½ÃÁö¸¦ º¸³½´Ù. ÀÌ ¿äûÀº ÆòÀÌÇÑ ÅؽºÆ® Çü½Ä(¾ÏÈ£È
µÇ¾îÀÖÁö ¾ÊÀ½)ÀÌ°í Ŭ¶óÀ̾ðÆ®ÀÇ À¯Àú³×ÀÓÀÌ Æ÷ÇԵǾîÀÖ´Ù. Æнº¿öµå´Â Æ÷ÇÔµÇÁö ¾Ê´Â´Ù.
- KDC´Â TGT¸¦ Ŭ¶óÀ̾ðÆ®¿¡ ¹ß±ÞÇÑ´Ù. TGT´Â ¾ÏÈ£ÈµÈ Çü½Ä¾È¿¡ ¼¼¼Ç Å°¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. ÀÌ
¼¼¼Ç Å°¸¦ ¾ÏÈ£ÈÇÏ·Á¸é KDC´Â Ŭ¶óÀ̾ðÆ®ÀÇ Æнº¿öµå¿¡¼ ³ª¿Â Å°¸¦ »ç¿ëÇÑ´Ù. Ŭ¶óÀ̾ðÆ®¸¸ÀÌ TGTÀÇ ¾ÏÈ£¸¦
Çص¶ÇÒ ¼ö ÀÖ°í ¼¼¼Ç Å°¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. µû¶ó¼ Ŭ¶óÀ̾ðÆ® ¾ÖÇø®ÄÉÀ̼ÇÀÌ TGT¸¦
¿äûÇϱâ À§ÇØ Æнº¿öµå¸¦ ¾Ë ÇÊ¿ä´Â ¾ø¾îµµ TGT¸¦ ó¸®ÇÏ°í »ç¿ëÇÒ Æнº¿öµå´Â ÇÊ¿äÇÏ´Ù.
- Ŭ¶óÀ̾ðÆ®°¡ TGTÀÇ ¾ÏÈ£¸¦ Çص¶ÇÏ°í ¿©±â¿¡¼ ¼¼¼Ç Å°¸¦ ÃßÃâÇÑ´Ù. Ŭ¶óÀ̾ðÆ®´Â ¼ºñ½º ƼÄÏÀ» À§ÇÑ
¿äûÀ» ÀÛ¼ºÇÑ´Ù. ¼ºñ½º ƼÄÏÀº ¾ç¹æ°£ Ä¿¹Â´ÏÄÉÀ̼ǿëÀ¸·Î¸¸ °¡´ÉÇÏ´Ù. Áï Ŭ¶óÀ̾ðÆ®¿Í ±× Ŭ¶óÀ̾ðÆ®°¡
Åë½ÅÇϱ⠿øÇÏ´Â ¿£ÅÍƼ. ¾î¶² ´©±¸µµ ÀÌ ¼ºñ½º ƼÄÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. µû¶ó¼ ¼ºñ½º ƼÄÏÀ» ¿äûÇÏ´Â µ¿¾È
Ŭ¶óÀ̾ðÆ®´Â ¼ºñ½º ƼÄÏÀ¸·Î »ç¿ë ÇÒ ¼¹ö À̸§À» ÁöÁ¤ÇÑ´Ù. ÀÌ ¼¹ö´Â KDC¿¡ ÀÌ¹Ì Á¸ÀçÇÏ°í ÀÖ¾î¾ß
ÇÑ´Ù.
- KDC´Â ¼¹ö¿ë ¼ºñ½º ƼÄÏÀ» ÀÛ¼ºÇÑ´Ù. ÀÌ Æ¼ÄÏÀº Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ µ¥ÀÌÅÍ¿Í »õ·Î¿î ¾ÏÈ£ Å°(ÇÏÀ§
¼¼¼Ç Å°)¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. KDC´Â ¼¹öÀÇ ºñ¹Ð Å°·Î ¼ºñ½º ƼÄÏÀ» ¾ÏÈ£ÈÇÑ´Ù. ¿ÀÁ÷ ¼¹ö¸¸ÀÌ ¼ºñ½º ƼÄÏ
¾ÏÈ£¸¦ Çص¶ÇÒ ¼ö ÀÖ´Ù.
- KDC´Â ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÏ°í ÀÌ ¾È¿¡ ¼ºñ½º ƼÄÏÀ» ·¡ÇÎÇÑ´Ù. KDC´Â ÀÌ ¸Þ½ÃÁö ³»ºÎ¿¡ ÇÏÀ§ ¼¼¼Ç
Å°¸¦ º¹»çÇÑ´Ù. ÇÏÀ§ ¼¼¼Ç Å°´Â ¸Þ½ÃÁö¿¡ µÎ ¹ø Æ÷ÇԵǾú´Ù´Â °ÍÀ» ±â¾ïÇ϶ó.
- KDC´Â 2, 3 ´Ü°è¿¡¼ ³ª¿Â ¼¼¼Ç Å°·Î Àüü ¸Þ½ÃÁö¸¦ ¾ÏÈ£ÈÇÑ´Ù. µû¶ó¼ ¿ÀÁ÷ Ŭ¶óÀ̾ðÆ®¸¸
¸Þ½ÃÁö¸¦ Çص¶ÇÏ°í ÇÏÀ§ ¼¼¼Ç Å°¿Í ¼ºñ½º ƼÄÏÀ» ÃßÃâÇÒ ¼ö ÀÖ´Ù. Ŭ¶óÀ̾ðÆ®°¡ ¼ºñ½º ƼÄÏ ¾ÏÈ£¸¦ Çص¶ÇÏÁö
¸øÇÏ¸é ¿ÀÁ÷ ¼¹ö¸¸ÀÌ ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ ¾î¶² ´©±¸µµ ´Ù¸¥ ¸ñÀûÀ¸·Î ¼ºñ½º ƼÄÏÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×·±
´ÙÀ½ KDC´Â ¸Þ½ÃÁö¸¦ Ŭ¶óÀ̾ðÆ®¿¡ º¸³½´Ù.
- Ŭ¶óÀ̾ðÆ®´Â KDC¿¡¼ ¹ÞÀº ¸Þ½ÃÁö¸¦ Çص¶ÇÏ°í ¸Þ½ÃÁö ³»ºÎ¿¡ ÀÖ´Â ÇÏÀ§ ¼¼¼Ç Å°¿Í ¼ºñ½º ƼÄÏÀ»
°¡Á®¿Â´Ù. ¼ºñ½º ƼÄÏÀº ¼¹ö¿¡ º¸³½´Ù.
- ¼¹ö´Â ¼ºñ½º ƼÄÏÀ» ¹Þ°í À̸¦ Çص¶ÇÏ¿© ¿äû Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ µ¥ÀÌÅÍ¿Í ÇÏÀ§ ¼¼¼Ç Å°¸¦ °¡Á®¿Â´Ù.
¼¹ö´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» È®ÀÎÇÏ°í »õ·Î¿î º¸¾È ¼¼¼ÇÀÌ Å¬¶óÀ̾ðÆ®¿Í ¼¹ö »çÀÌ¿¡ ¸¸µé¾îÁø´Ù. Ŭ¶óÀ̾ðÆ®¿Í
¼¹ö ¸ðµÎ °°Àº ÇÏÀ§ ¼¼¼Ç Å°¸¦ ¸¶·ÃÇÏ°í ÀÖ°í ¼·Î º¸¾È Åë½ÅÀ» À§ÇØ À̸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
Ŭ¶óÀ̾ðÆ®´Â 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 ±¸Á¶Ã¼´Â
¸¹Àº ¸Å°³º¯¼ö¸¦ ÃëÇÑ´Ù:
- Ŭ¶óÀ̾ðÆ® ÇǾî À̸§
- Ŭ¶óÀ̾ðÆ® ÇǾîÀÇ Æнº¿öµå
- ¿ø°Ý ¼ºù(serving) ÇǾîÀÇ À̸§
- ¿ø°Ý ¼ºù(serving) ÇǾîÀÇ ÁÖ¼Ò
- ¼¹öÀÇ Æ÷Æ®
- Kerberos ¿µ¿ª ¶Ç´Â µµ¸ÞÀÎ
- KDC ÁÖ¼Ò
- ·Î±×ÀÎ ¼³Á¤ ÆÄÀÏÀÇ À̸§°ú À§Ä¡ °æ·Î
- Ŭ¶óÀ̾ðÆ® ¼³Á¤ À̸§
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 ¼¼¼ÇÀ» ¸¸µé¾î¾ß ÇÑ´Ù:
GSSManager ¸¦ ÀνºÅϽºÈ ÇÑ´Ù.
GSSManager Ŭ·¡½ºÀÇ getInstance() Á¤Àû
¸Þ¼Òµå¸¦ È£ÃâÇß´ø Listing 1À» ÁÖ¸ñÇ϶ó. ÀÌ°ÍÀº GSSManager °´Ã¼¸¦
¸®ÅÏÇÑ´Ù. ÀÌ GSSManager °´Ã¼´Â Àû¾îµµ Kerberos ¸ÞÄ¿´ÏÁòÀ» Áö¿øÇÏ°í
±× ¹Û¿¡ ´Ù¸¥ ¸ÞÄ¿´ÏÁòµµ Áö¿øÇÒ °ÍÀÌ´Ù. GSSManager Ŭ·¡½º¿¡´Â GSS
¾ÖÇø®ÄÉÀ̼ÇÀÌ ´Ù¸¥ º¸¾È ¸ÞÄ¿´ÏÁòÀ» Á¤ÀÇÇϱâ À§ÇØ È£ÃâÇÒ ¼ö ÀÖ´Â ¸Þ¼ÒµåµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù. Áö±ÝÀº
Kerberos ¸ÞÄ¿´ÏÁòÀ» Áß½ÉÀ¸·Î ¼³¸íÇÏ´Â °ÍÀÌ´Ï ¸¸Å getInstance()
¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© Kerberos ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÑ´Ù. Listing 1ÀÇ
GSSManager °´Ã¼¸¦ ÀνºÅϽºÈ ÇÑ ÈÄ¿¡
kerberos ¶ó´Â Oid (Object ID) °´Ã¼¸¦
ÀνºÅϽºÈ Çß´Ù. ÀÌ°ÍÀº Kerberos ¸ÞÄ¿´ÏÁòÀ» È®ÀÎÇÑ´Ù. ."
GSSName °´Ã¼¸¦ ¸¸µç´Ù. ÀÌ°ÍÀº GSS ¿£ÅÍƼ¸¦ ³ªÅ¸³½´Ù. Åõ¿þÀÌ Åë½ÅÀ»
ÇÏ´Â µ¿¾È GSS ¿£ÅÍƼ¸¦ Åë½Å ÇǾî·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ µÎ °³ÀÇ
GSSName °´Ã¼¸¦ ¸¸µå´Â °ÍÀÌ´Ù. Çϳª´Â ¿äû Ŭ¶óÀ̾ðÆ®
ÇǾî(clientPeerName )¿ëÀÌ°í ¶Ç ´Ù¸¥ Çϳª´Â ¿ø°Ý
ÇǾî(remotePeerName )¿ëÀÌ´Ù.
- Credential ¼¼Æ®¸¦ ¸¸µç´Ù. GSS´Â ÀϹÝÀûÀÎ º¸¾È ¸ÞÄ¿´ÏÁòÀÌ´Ù. µû¶ó¼ ±âÀúÀÇ ±â¼ú¿¡
ÀÇÁ¸ÇÏ¿© ÀÌ·¯ÇÑ CredentialÀ» ¸¸µç´Ù. Kerberos¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î Kerberos ƼÄÏÀº
½ÇÁ¦ CredentialÀÌ´Ù.
GSSCredential °´Ã¼¸¦ ¾òÀ¸·Á¸é
GSSManager Ŭ·¡½ºÀÇ createCredential()
¸Þ¼Òµå¸¦ »ç¿ëÇÑ´Ù. createCredential() ¸Þ¼Òµå´Â
GSSCredential ÀÎÅÍÆäÀ̽º¸¦ ³ëÃâÇÏ´Â °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.
- º¸¾È 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 ¾ÖÇø´ »ç¿ë
e-Ä¿¸Ó½º À¥ »çÀÌÆ® °í°´Àº ¾î¶² »çÀÌÆ® ÆÄÆ®³Ê¶óµµ ÀÎÁõ¹ÞÀ» ¼ö ÀÖ´Ù. ¾ÖÇø´ÀÇ ÅؽºÆ® Çʵ忡 À¯Àú³×ÀÓ°ú
Æнº¿öµå¸¦ ÀÔ·ÂÇÏ°í ÀÎÁõÀ» ¿øÇÏ´Â ÆÄÆ®³Ê »çÀÌÆ®¿¡ ÇØ´çÇÏ´Â Login ¹öÆ°À» ´©¸¥´Ù. ÀÌ ¹öÆ°ÀÇ À̺¥Æ® Çڵ鷯´Â
GSSClient ±¸Á¶Ã¼¿¡ ÇÊ¿äÇÑ ¸Å°³º¯¼ö¸¦ Á¦°øÇÑ´Ù. ³ª¸ÓÁö ÀÛ¾÷Àº GSS Ŭ¶óÀ̾ðÆ®°¡
ÇÒ ÀÏÀÌ°í ÀÌ°ÍÀº ÀÌ¹Ì ¼³¸íÇß´Ù.
Âü°íÀÚ·á
|