Certificate ServerÀÇ ±¸¼ºÀº OpenSSL°ú Apache°¡ ÇÊ¿äÇϸç, °³ÀÎÀÇ ½Å»óÁ¤º¸°¡ WebÀ» ÀÌ¿ëÇÏ¿© Àü¼ÛµÊÀ¸·Î Apache ¼¹ö¿¡ mod_sslÀ» ¼³Ä¡Çϰųª Apache + SSLÀÇ ÇüÅ·ΠApache¼¹ö¸¦ ¼³Ä¡ÇÏ¿© Browser¿ÍÀÇ Åë½Å½Ã sniffingµÇÁö ¾Êµµ·Ï ÇÏ¿©¾ß ÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ ÀÚµ¿ÈµÈ ¼ºñ½º¸¦ À§Çؼ PerlÀ̳ª phpµîÀÌ ÇÊ¿äÇÏ´Ù. (PerlÀ̳ª PHP´Â module·Î ¼³Ä¡Çصµ ÁÁÀ¸¸ç CGIÇüÅ·Π½ÇÇàÇصµ »ó°üÀÌ ¾øÀ¸³ª º¸¾ÈÀ» À§ÇÑ ºÎºÐÀ» »ý°¢Çغ¸°í ¼³Ä¡Çϴ°ÍÀÌ ÁÁÀ»°Í °°´Ù.) ÀÎÁõÀ» ¿ä±¸ÇÏ´Â ClientµîÀÇ °ü¸®¸¦ À§ÇÏ¿© MySQLµîÀ» ¼³Ä¡ÇÏ´Â °Íµµ ÁÁÀ»°Í °°´Ù. ±×¸®°í mod_sslÀÇ INSTALLÈÀÏÀ» »ìÆ캸¸é ¼±ÅÃÀûÀ¸·Î ¼³Ä¡ÇÏ´Â ÈÀÏÀÌ Àִµ¥(mm°°Àº°Í) À̰͵鵵 ÇÊ¿äÇÏ¸é °°ÀÌ ¼³Ä¡ÇÒ ¼ö ÀÖ´Ù. PerlÀº 5.6¹öÁ¯À» ÇÊ¿ä·Î ÇÑ´Ù°í µÇ¾îÀÖ´Â°Í °°Àºµ¥, 5.6À» ±»ÀÌ ¼³Ä¡ÇÒ ÇÊ¿ä´Â ¾ø¾ú´ø°Í °°´Ù.
OpenSSLÀ» ¼³Ä¡Çϱâ À§Çؼ´Â Perl 5¿Í ANSI CÄÄÆÄÀÏ·¯°¡ ÇÊ¿äÇÏ´Ù. ±âº»ÀûÀÎ ¼³Ä¡ ¹æ¹ýÀº ÀÎÅͳݻóÀÇ ´Ù¸¥ ÆÐÅ°Áöµéó·³ ´ÙÀ½°ú °°ÀÌÇÏ¿© ¼³Ä¡ÇÒ¼ö ÀÖ´Ù.
$ ./config $ make $ make test $ make install
config¿¡¼ prefix¸¦ ÁÖÁö ¾Ê¾ÒÀ» ¶§¿¡´Â /usr/local/sslµð·¢Å丮¿¡ ¼³Ä¡°¡ µÇ´Ï ´Ù¸¥ µð·¢Å丮¿¡ ¼³Ä¡¸¦ ÇÏ°íÀÚ ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. $ ./config --prefix=/usr/local --openssldir=/usr/local/openssl ÀÌ·¸°Ô Çϸé OpenSSLÀÇ ½ÇÇàÈÀÏÀº /usr/local/bin¿¡ ¼³Ä¡µÇ°í Certificate Service¸¦ À§ÇÑ ÈÀϵéÀº /usr/local/openssl¾Æ·¡ÀÇ µð·¢Å丮¿¡ »ý¼ºµÈ´Ù. ¶ÇÇÑ rsaref¸¦ ¼±ÅûçÇ×À¸·Î ÁÙ¼ö°¡ Àִµ¥ ÀÌ°ÍÀº librsaref.a¶ó´Â ¶óÀ̺귯¸®°¡ ¶óÀ̺귯¸® Search°æ·Î¿¡ ÀÖ¾î¾ß ÇÑ´Ù. (¹ýÀûÀ¸·Î ¹®Á¦°¡ µÇ´ÂºÎºÐÀÌ ¾Æ´Ñ°¡ ¸ð¸£°Ú³×¿ä..¾îµð¼ ÀÐÀº°Í °°¾Æ¼..-.-; ftp search¿¡¼ rsaref20À¸·Î °Ë»öÇϽøé ãÀ»¼ö ÀÖ½À´Ï´Ù...±×·±µ¥, ³Ö°í ÄÄÆÄÀÏÇÏ¸é ¿¡·¯°¡ ³ª´õ¶ó±¸¿ä..)
make¸¦ ½ÇÇàÇϸé OpenSSL¶óÀ̺귯¸®(libcrypto.a¿Í libssl.a)¿Í ½ÇÇàÈÀÏ (openssl)ÀÌ »ý¼ºµÇ°í, ¶óÀ̺귯¸®´Â make¸¦ ½ÇÇàÇÑ µð·¢Å丮¿¡, OpenSSL½ÇÇàÈÀÏÀº appsµð·¢Å丮¿¡ »ý¼ºµÈ´Ù. make¸¦ ½ÇÇàÇÏ´Â µµÁß ¿¡·¯°¡ »ý±â¸é, ¿¡·¯¸Þ¼¼Áö¸¦ »ìÆ캸¾Æ¾ß ÇÑ´Ù. ´ëºÎºÐ OpenSSLÀÇ ¹®Á¦°¡ ¾Æ´Ï¶ó°í Çϸç, Á¤¸»·Î OpenSSLÀÇ ¹®Á¦¶ó°í ÆǴܵȴٸé make report¸í·ÉÀ» ÀÌ¿ëÇÏ¿© Ãâ·ÂµÈ ³»¿ëÀ» openssl-bugs@openssl.org¿¡ ¼Û½ÅÇÑ´Ù.
´ÙÀ½Àº make test¸¦ ½ÇÇàÇÏ¿© OpenSSLÀÌ Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´ÂÁö È®ÀÎÇÑ´Ù. ½ÇÆÐÇÑ ³»¿ëÀÌ ÀÖ´Ù¸é, CFLAGSµîÀ» ¼öÁ¤ÇÏ°í "make clean; make"¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ´Ù½Ã ÄÄÆÄÀÏÇÑÈÄ make test¸¦ ½ÇÇàÇØ º»´Ù.
¸ðµç ½ÃÇèÀÌ Á¤»óÀûÀ¸·Î ¼º°øÇÑ´Ù¸é, make install¸í·É¾î¸¦ ÀÌ¿ëÇÏ¿© ¼³Ä¡µð·¢Å丮(/usr/local/sslÀ̳ª /usr/local/bin, /usr/local/opensslµî)¿¡ ½ÇÇàÈÀÏ°ú µµ¿ò¸» ÈÀÏ, ȯ°æ¼³Á¤ÈÀϵîÀ» ¼³Ä¡ÇÑ´Ù. ¿©±â±îÁö º° ¹®Á¦ ¾øÀÌ ½ÇÇàµÇ¾ú´Ù¸é, Certificate Server¸¦ ½ÇÇàÇϱâ À§ÇÑ ±âº»ÀûÀÎ Áغñ´Â ¿Ï·áµÈ °ÍÀÌ´Ù. ´ÙÀ½Àº OpenSSLÀ» ÀÌ¿ëÇÑ Certificate Server¿î¿ëÀ» À§ÇÑ Å°»ý¼º°ú ȯ°æ¼³Á¤À» ½Ç½ÃÇÑ´Ù.
Certificate Server¸¦ ¿î¿ëÇÏ´Â °÷Àº Tree±¸Á¶ÀÇ ÇüÅ·ΠÀÌ·ç¾îÁ® ÀÖ´Ù. Á¦ÀÏ Ã³À½¿¡ ³ªÅ¸³ª´Â CA¸¦ rootCA¶ó°í ÇÏ°í ÀÚ±â ÀÚ½ÅÀÌ »ý¼ºÇÑ ÀÎÁõ¿ä±¸¼¸¦ ÀÚ±âÀÚ½ÅÀÌ signÇÏ¿© °³ÀÎÀ̳ª, ±â°ü¿¡°Ô ¹èÆ÷ÇÑ´Ù. rootCA·ÎºÎÅÍ ÀÎÁõÀ» ¹ÞÀº ÀÎÁõ±â°üÀº Áß°èÀÎÁõ±â°üÀ̶ó°í Çϸç, ÀÎÁõ¿ä±¸¼¸¦ rootCA·Î ºÎÅÍ ÀÎÁõ¹Þ¾Æ¼ ´Ù¸¥»ç¶÷À̳ª ±â°üÀÇ ÀÎÁõ¿ä±¸¼¸¦ ÀÎÁõÇØÁÖ´Â ¿ªÈ°À» ÇÑ´Ù. Áö±ÝºÎÅÍ´Â ¾Õ¿¡¼ »ý¼ºµÈ OpenSSLÀÇ ½ÇÇàÈÀϵéÀ» ÀÌ¿ëÇؼ ÀڽŸ¸ÀÇ rootCA¸¦ »ý¼ºÇÑ´Ù.
(¾Æ·¡¿¡¼ ¼³¸íÇÏ´Â ³»¿ëÀº /path/to/openssldir/misc¿¡ º¸½Ã¸é CA.pl°ú CA.sh °¡ ÀÖ½À´Ï´Ù. CA.xx¸¦ ÀûÀýÈ÷ ¼öÁ¤ÇÏ°í ./CA.xx -newca·Î ÇÏ¿© rootCA¸¦ »ý¼ºÇϼŵµ µË´Ï´Ù. Perl°ú shellÀÇ scriptÀÓÀ¸·Î Å©°Ô ¾î·Á¿î°ÍÀº ¾øÀ» °Ì´Ï´Ù...^^; "CATOP"º¯¼ö¸¦ ÀûÀýÈ÷ ¼öÁ¤ÇÏ½Ã¸é µË´Ï´Ù. ¶ÇÇÑ ClientµéÀÇ Sign Request°¡ ÀÖÀ»¶§¿¡µµ »ç¿ëÇϽǼö ÀÖÀ¸¹Ç·Î ÀÚ¼¼È÷ »ìÆ캸½Ã´Â°ÍÀÌ ÁÁ½À´Ï´Ù.)
$ openssl genrsa -des3 -out ca.key 1024
1024ºñÆ®ÀÇ º¸¾Èµµ¸¦ °¡Áö´Â RSAÅ°¸¦ »ý¼ºÇÑ´Ù. Certificate ServerÀÚüÀÇ ºñ¹ÐÅ°°¡ µÊÀ¸·Î ¹Þµå½Ã ´Ù¸¥»ç¶÷ÀÌ º¼¼ö ¾ø´Â°÷¿¡ º¸°üÇÏ°í »ª¾÷À» ¹ÞÀºÈÄ¿¡ »ç¿ëÇϴ°ÍÀÌ ÁÁ´Ù.
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt
À§ÀÇ ¸í·É¾î¸¦ ÀÌ¿ëÇϸé Certificate ServerÀÇ Distinguished NameÀ» ¹°¾î¿Â´Ù. Áú¹®¿¡ ´ëÇÑ ´äÀ» Á¤È®ÇÏ°Ô ÀÔ·ÂÇÏ°í³ª¸é rootCAÀÇ Certificate ServerÀÇ ÀÎÁõ¼°¡ »ý¼ºµÈ´Ù. ±×¸®°í ÇÊ¿ä¿¡ µû¶ó days°°Àº Ç׸ñÀº ¼öÁ¤Çؼ »ç¿ëÇϵµ·Ï ÇÑ´Ù. (ºñ¹Ð¹øÈ£ Àؾî¸ÔÁö ¾Êµµ·Ï ÁÖÀÇÇϼ¼¿ä..T.T)
openssl.cnfÈÀÏÀº Certificate Service¸¦ ¿î¿ëÇϱâ À§ÇÑ È¯°æ¼³Á¤À» ´ã°í ÀÖ´Â ÈÀÏ·Î make installÀ» ÇßÀ»¶§¿¡´Â sample ÀÚ·á°¡ µé¾îÀÖ´Ù. ÀÌ ÈÀÏÀº ÆíÁýÇÏ¿© ¿©·¯ºÐÀÇ Certificate Service¸¦ ÇÒ ¼ö ÀÖµµ·Ï ¼öÁ¤ ÇÏ¿©¾ß ÇÑ´Ù.
$ mkdir /usr/local/openssl/MyCA $ mkdir /usr/local/openssl/MyCA/certs $ mkdir /usr/local/openssl/MyCA/crl $ mkdir /usr/local/openssl/MyCA/newcerts $ mkdir /usr/local/openssl/MyCA/private $ echo "01" > /usr/local/openssl/MyCA/serial $ touch /usr/local/openssl/MyCA/index.txt
ca.key´Â /path/to/openssldir/ÀÚ±âCA/private/cakey.pemÀ¸·Î º¹»çÇÏ°í ca.crt´Â /path/to/openssldir/ÀÚ±âCA/cacert.pemÁ¤µµ·Î º¹»çÇÏ¸é µË´Ï´Ù.
ÀϹÝÀûÀÎ Apache ¿Í phpÀÇ ¼³Ä¡ ¹æ¹ý¿¡ Å« Â÷ÀÌ´Â ¾øÀ¸´Ï, ¿©±â¿¡¼´Â ¼ø¼¸¸ ±â¼úÇÏ°í ³Ñ¾î °¡µµ·Ï ÇÑ´Ù. ¶ÇÇÑ ÀÌ ³»¿ëÀº mod_sslÀÇ INSTALLÈÀÏ¿¡ ¼³¸íÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î ±×°ÍÀ» Àо´Â °ÍÀÌ Á¤È®ÇÒ °ÍÀÌ´Ù. mod_sslÀº ¹öÁ¯º°·Î Apache¿Í ¿¬°áÀÌ µÊÀ¸·Î ÀÚ½ÅÀÌ ¼³Ä¡ÇÏ´Â Apache¹öÁ¯°ú ÀÏÄ¡ÇÏ´Â mod_sslÀ» ¼³Ä¡ÇÏ¿©¾ß ÇÑ´Ù. ÀÌ´Â mod_sslÀÇ ÈÀϸíÀ» º¸¸é ¾Ë ¼ö°¡ Àִµ¥, "mod_ssl-ÀڽŹöÁ¯-¾ÆÆÄÄ¡¹öÁ¯"ÀÇ ÇüÅ·ΠµÇ¾îÀÖ´Ù.
$ tar xvfz apache_1.3.x.tar.gz $ tar xvfz mod_ssl-2.7.x-1.3.x.tar.gz $ tar xvfz php-4.0.x.tar.gz $ cd apache_1.3.x $ ./configure $ cd ../mod_ssl-2.7.x-1.3.x $ ./configure --with-apache=../apache_1.3.x $ cd ../apache_1.3.x $ .configure --prefix=/path/to/apache $ cd ../php-4.0.x $ CFLAGS='-O2 -I/path/to/openssl/include' \ ./configure \ --with-apache=../apache_1.3.x \ --with-mysql \ --enable-memory-limit=yes \ --enable-debug=no $ make $ make install $ cd ../apache_1.3.x $ SSL_BASE=/path/to/openssl \ ./configure \ --prefix=/path/to/apache \ --enable-module=ssl \ --activate-module=src/modules/php4/libphp4.a \ --enable-module=php4 $ make $ make certificate $ make installÄÄÆÄÀÏ °úÁ¤Áß ÁÖÀÇÇÒ Á¡Àº ¸¶Áö¸·ÀÇ ApacheÀÇ È¯°æ¼³Á¤À» ÇÒ¶§¿¡ SSL_BASE´Â OpenSSLÀ» ¼³Ä¡ÇÒ¶§¿¡ prefix¿¡ ÁÖ¾îÁø µð·¢Å丮¸¦ ÁÖ¾î¾ß ÇÑ´Ù. (openssldirÀÌ ¾Æ´Ï´Ù.)
»ó±âÀÇ ÄÄÆÄÀÏ °úÁ¤À» °ÅÃļ »ý¼ºµÈ Apache¼¹ö´Â apachectl start¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ½ÇÇàÀ» ÇÏ°Ô µÇ¸é ÀÏ¹Ý Apache¼¹ö¿Í µ¿ÀÏÇÑ ±â´ÉÀ» ÇÏ°Ô µÇ°í apachectl startssl ¸í·ÉÀ» ÀÌ¿ëÇϸé mod_sslÀ» ÀÌ¿ëÇÑ httpsÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÒ¼ö ÀÖ°Ô µÈ´Ù. Client¿¡¼ »ç¿ë¹ýÀº url¿¡ "https://server/path/"¶ó°í Àû°ÔµÇ¸ç, À̶§ Server¿Í Client°£ÀÇ ¾ÏÈ£È ¹æ¹ý¿¡ ´ëÇÑ Çù»óÀÌ ÀÌ·ç¾î Áö°Ô µÇ°í ÀÌÈÄ¿¡ Server¿Í Client°£ÀÇ ÀÚ·á´Â ¾ÏÈ£È µÇ¾î Àü¼ÛÀÌ µÊÀ¸·Î, sniffer¸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀ¸·Î´Â ÀڷḦ ÈÉÃĺ¼¼ö ¾ø°Ô µÈ´Ù. ÀÚ¼¼ÇÑ°ÍÀº kldp.org¿¡¼ mod_sslÀ» °Ë»ö¾î·Î ã¾Æº¸±æ ¹Ù¶õ´Ù.
Apache + mod_sslÀ» ¼³Ä¡ÇÏ¸é ±âº»ÀûÀ¸·Î 30ÀÏ°£ »ç¿ëÇÒ¼ö ÀÖ´Â Certificate°¡ /path/to/apache/conf/ssl.crt µð·¢Å丮¿¡ ¼³Ä¡µÇ¾î ÀÖ´Ù. ÀÌ°ÍÀ» ¿©·¯ºÐÀÇ CA¿¡¼ ÀÎÁõÇÑ´Ù¸é ¿©·¯ºÐÀÌ ¿øÇÏ´Â ±â°£µ¿¾È »ç¿ëÇÒ¼ö ÀÖ´Â Certificate°¡ »ý¼ºµÈ´Ù.(1³âÀ̵ç 10³âÀ̵ç...^^;) (¾Æ·¡ÀÇ °úÁ¤À» ÁøÇàÇÏ´Ù º¸¸é ±âÁ¸¿¡ ¼³Ä¡µÈ OpenSSL°ú Ãæµ¹ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. À̶§¿¡´Â ±âÁ¸¿¡ ¼³Ä¡µÈ OpenSSLÀ» Á¦°Å ÇϽðųª, "-config /path/to/openssldir/openssl.cnf"¸¦ Ãß°¡·Î ÀÔ·ÂÇؼ »ç¿ëÇϽʽÿä.) ¼³Ä¡°úÁ¤Áß make certificate TYPE=customÀ¸·Î ½ÇÇàÇÏ´Â °æ¿ì¿¡´Â openssl¿¡¼ »ý¼º½ÃŲ rootCAÀÇ key¿Í certificateÈÀÏÀ» ´Ù½Ã ¼³Ä¡ÇØ¾ß ÇÑ´Ù. À̶§ »ý¼ºµÈ rootCA¿¡´Â object sign(S/W¿¡ »çÀÎÇϴ°Í(?))ÀÌ ºüÁ® ÀÖÀ¸¹Ç·Î rootCA¸¦ ¿î¿µÇÏ´Â µ¥¿¡´Â ºÎÀûÇÕ ÇÒ ¼öµµ ÀÖ´Ù.
$ openssl genrsa -des3 -out server.key 1024
À̶§ »ý¼ºµÇ´Â Å°´Â Web Server¸¦ ¿î¿ëÇϱâÀ§ÇÑ ºñ¹ÐÅ°°¡ µÊÀ¸·Î ¹Ýµå½Ã ¹é¾÷À» ¹Þ¾Æ³õ°í »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. »ý¼ºµÈ Å°´Â ´ÙÀ½ ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© ³»¿ëÀ» È®ÀÎÇÒ¼ö ÀÖ´Ù.
$ openssl rsa -noout -text -in server.key
$ openssl req -new -days 365 -key server.key -out server.csr
À§ÀÇ ¸í·É¾î¸¦ ¼öÇàÇÏ´Â µµÁß CommonNameÀ» ¹°¾îº¼¶§¿¡ ServerÀÇ FQDN(Fully Qualified Domain Name --> host.domain.comÀÇ ÇüÅÂ)·Î Àû¾î¾ß ÇÑ´Ù. »ý¼ºµÈ ÈÀÏÀº ´ÙÀ½ ¸í·ÉÀ¸·Î ³»¿ëÀ» È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.
$ openssl req -noout -text -in server.csr
$ openssl ca -in server.csr -out server.crt
(CA.plÀ̳ª CA.sh¸¦ ÀûÀýÈ÷ ¼öÁ¤ÇÏ¿´´Ù¸é "CA.xx -sign"À» ÀÌ¿ëÇصµ µË´Ï´Ù. ±×¸®°í ±âÁ¸ÀÇ OpenSSL°ú Ãæµ¹ÇÏÁö ¾Ê´ÂÁö È®ÀÎÇÏ½Ã°í »ç¿ëÇϽʽÿä.)
ApacheÀÇ conf/httpd.conf¿¡ º¸¸é, SSLCertificateFile Ç׸ñÀÌ Áö½ÃÇϴ°÷ÀÌ server.crtÈÀÏÀ» ³ªÅ¸³»´Â °÷ÀÌ°í SSLCertificateKeyFile Ç׸ñÀÌ server.keyÈÀÏÀ» Áö½ÃÇÑ´Ù.