Openssl programing
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>openssl_programing



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¼Ò°³

ÀÌ¹Ì OpenSSL(12)À» ÀÌ¿ëÇÑ ÆÄÀÏ ¾Ïȣȭ¿¡¼­ OpenSSL(12)¿¡ ´ëÇÑ ±âº»ÀûÀÎ ³»¿ëÀº ´Ù·ç¾úÀ¸¹Ç·Î ¿©±â¿¡¼­´Â ½ÇÁ¦ OpenSSL¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼öµéÀ» ÀÌ¿ëÇØ¼­ SSL(12)¼¼¼ÇÀ» ¸¸µé°í ÀÌ ¼¼¼ÇÀ» ÅëÇØ¼­ µ¥ÀÌÅ͸¦ Åë½ÅÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

Âü°í·Î OpenSSLÀ» ÀÌ¿ëÇÑ ÆÄÀÏ ¾Ïȣȭ°ú´Â ³»¿ëÀÌ Á» ´Ù¸£´Ù. ¾Õ¼­ ´Ù·ç¾ú´ø ³»¿ëÀº SSL¼¼¼ÇÀ» ÅëÇÑ Åë½ÅÀÌ ¾Æ´Ñ OpenSSL¿¡¼­ Á¦°øÇÏ´Â ¾Ïȣȭ ¾Ë°í¸®ÁòÀ» ÅëÇÑ ¾Ïȣȭ ±â¹ý¿¡ ´ëÇÑ °ÍÀ¸·Î ¿©±â¿¡¼­ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ë°ú´Â ¼º°Ý¿¡ À־ Â÷À̰¡ ³­´Ù.

SSL À̶õ ¹«¾ùÀΰ¡


SSL

SSLÀº Secure Socket LayerÀÇ ÁÙÀÓ¸»ÀÌ´Ù. ÀÎÅͳݿ¡¼­ º¸¾È Åë½ÅÀ» À§ÇÑ Ç¥ÁØÀûÀÎ ¹æ¹ýÀ» Á¦°øÇϸç, ÇÁ·ÎÅäÄÝ ³»ºÎ¿¡ µ¥ÀÌÅÍ ¾Ïȣȭ¿Í °ü·ÃµÈ ³»¿ëµéÀ» ÅëÇÕÇϰí ÀÖ´Ù. µ¥ÀÌÅÍ ¾Ïȣȭ´Â ÄÄÇ»ÅÍ¿¡¼­ ¹ÛÀ¸·Î ³ª°¡±â Àü¿¡ ÀÌ·ç¾îÁö¸ç, ¾ÏȣȭµÈ µ¥ÀÌÅÍ´Â µµÂøÁö¿¡¼­ ´Ù½Ã º¹È£È­ µÈ´Ù. ÀÌ´Â ÀÎÅͳÝÀ» °¡·ÎÁö¸£´Â Áß°£¿¡ µ¥ÀÌÅͰ¡ µµÃ»µÉ À§ÇèÀ» °¨¼Ò½ÃÄÑ ÁØ´Ù.

ÀÌ·ÐÀûÀ¸·Î ¾ÏȣȭµÈ µ¥ÀÌÅͰ¡ ¸ñÀûÁö¿¡ µµÂøÇϱâÀü °¡·Îä¾îÁ³´Ù¸é, ÀÌ µ¥ÀÌÅÍ´Â ºÐ¼®µÇ¾îÁú ¼ö ÀÖ´Ù. ±×·¯³ª À̸¦ ºÐ¼®Çϱâ À§Çؼ­´Â »ó´çÇÑ ÆÄ¿ö¸¦ °¡Áø ĿǻÅͷεµ ¼ö³â ȤÀº ¼ö½Ê³âÀÇ ½Ã°£ÀÌ °É¸®¹Ç·Î, ½ÇÁúÀûÀ¸·Î µ¥ÀÌÅÍÀÇ µµÃ»À» ¸·À» ¼ö ÀÖ´Ù.

SSLÀº º¸¾È ¿¬°áÀ» À§ÇÑ ¶Ç´Ù¸¥ ÀÎÅÍ³Ý ÇÁ·ÎÅäÄݷνá ÀÛµ¿ÇÑ´Ù. ÀÌ´Â HTTP, PHP3, telnet¿Í °°Àº ±âÁ¸ÀÇ ÀÎÅÍ³Ý ¼­ºñ½º¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù.

°ü·Ã±Û

Cache Error

OpenSSL À̶õ ¹«¾ùÀΰ¡


OpenSSL

OpenSSLÀº SSL(12)À» ÀÌ¿ëÇÑ, ¸Þ½ÃÁö Ãà¾à, ÆÄÀÏÀÇ ¾Ï/º¹È£, ÀüÀÚ¼­¸í, ÀüÀÚÀÎÁõ, ·£´ý°ª »ý¼º°ü·Ã API¸¦ Æ÷ÇÔÇÑ ¶óÀ̺귯¸®´Ù.

Cache Error

OpenSSL ÇÁ·Î±×·¡¹Ö

OpenSSLÀº Åë½Å°ú °ü·ÃµÈ ¿ÏÀüÇÑ API¸¦ Á¦°øÇϰí ÀÖ´Ù. À̵é API´Â ¼ÒÄÏ¿¡¼­ º¼ ¼ö ÀÖ´Â ¿¬°á»ý¼º, Àбâ/¾²±â, ´Ý±â¿Í °°Àº ÇÔ¼öµéÀ» Á¦°øÇϸç, ÀÔÃâ·Â ´ÙÁßÈ­¿Í °°Àº ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö ±â¼úµé°ú ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¶ÇÇÑ º¸¾È¿¬°á°ú °ü·ÃµÈ ÇÔ¼ö »Ó¸¸ ¾Æ´Ï¶ó, º¸¾È¿¬°áÀ» ÅëÇÏÁö ¾ÊÀº ÀÏ¹Ý µ¥ÀÌÅÍ Á¦¾î¸¦ À§ÇÑ ÇÔ¼öµµ Æ÷ÇÔÇϰí ÀÖ´Ù.

Áï °³¹ßÀÚ´Â ¼ÒÄϰú OpenSSLÀ» (º¹ÀâÇϰÔ)¼¯¾î¼­ »ç¿ëÇÒ ÇÊ¿ä ¾øÀÌ OpenSSL¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼öµé¸¸À» °¡Áö°í ¿ÏÀüÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.

°øÅë ÀÚ·áŸÀÔ °ú Çì´õÆÄÀϵé

OpenSSLÀ» ÀÌ¿ëÇÑ ÀÀ¿ëÀ» ÀÛ¼ºÇϱ⠿øÇÑ´Ù¸é, ´ÙÀ½ÀÇ Çì´õÆÄÀϵéÀ» Çʼö ÀûÀ¸·Î Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¹°·Ð ±×Àü¿¡ OpenSSL°ü·Ã ¶óÀ̺귯¸®´Â ´ç¿¬È÷ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ¸®´ª½º¿î¿µÃ¼Á¦´Â °ÅÀÇ ´ëºÎºÐ Æ÷ÇÔÇϰí ÀÖÀ½À¸·Î ½Å°æ¾µ ÇÊ¿ä ¾øÀ» °ÍÀÌ´Ù. À©µµ¿ì ȯ°æ¿¡¼­ÀÇ OpenSSLÀÌ¿ëÀº À©µµ¿ì¿¡¼­ÀÇ openssl ÇÁ·Î±×·¡¹ÖÀ» Âü°íÇϱ⠹ٶõ´Ù.
#include <openssl/bio.h> 
#include <openssl/ssl.h> 
#include <openssl/err.h> 
 

´ÙÀ½Àº OpenSSL ÃʱâÈ­ °ü·Ã ÇÔ¼öµé·Î ¹Ýµå½Ã Æ÷ÇԵǾî¾ß ÇÏ´Â ÇÔ¼öµéÀÌ´Ù.
void SSL_load_error_strings(void); 
void OpenSSL_add_all_algorithms(void); 
void ERR_load_BIO_strings(void); 
 
ERR_load_error_strings´Â libcryptoÇÔ¼ö¿Í °ü·ÃµÈ ¸ðµç ¿¡·¯¸Þ½ÃÁö¸¦ °¡Áö°í ÀÖÀÖ´Ù. OpenSSL_add_all_algorithmÀº µ¥ÀÌÅÍ Ãà¾à°ú ciphers¸¦ À§ÇÑ ¾Ë°í¸®ÁòÀ» Áö¿ø½Ã۱â À§Çؼ­ »ç¿ëÇÑ´Ù.

OpenSSLÀÇ ÇÙ½ÉÀûÀÎ ÀڷᱸÁ¶·Î BIO¶ó´Â ÀڷᱸÁ¶°¡ Á¦°øÇÑ´Ù. À̰ÍÀº struct bio_st ÀÇ typedef·Î Á¤ÀǵǾî Àִµ¥, º¸¾È¿¬°á°ú °ü·ÃµÈ ÀÚ·áµéÀ» °¡Áö°í ÀÖÀ¸¸ç, ´ëºÎºÐÀÇ OpenSSL ÇÔ¼öµéÀº BIO¸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ ÀÏÀ» ÇÏ°Ô µÈ´Ù.
BIO *bio 
 
Ȥ½Ã³ª ½É½ÉÇØ¼­ bio_st ±¸Á¶Ã¼¸¦ »ìÆìº¸°í ½Í´Ù¸é openssl/bio.h ÆÄÀÏÀ» Âü°íÇϱ⠹ٶõ´Ù.

°øÅë ÇÔ¼ö

¿¬°á °ü·Ã ÇÔ¼ö

¾Õ¼­ ¼³¸íÇßµíÀÌ OpenSSLÀº ÀÚüÀûÀ¸·Î ¿ÏÀüÇÑ Åë½ÅÁö¿øÀ» À§ÇÑ ¸ðµç ÇÔ¼öµéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ÀÌÁß ºñ º¸¾È ¿¬°áÀ» À§Çؼ­ BIO_new_connect¿Í BIO_new_accept ¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
BIO *BIO_new_connect(char *hostinfo); 
BIO *BIO_new_accept(char *hostinfo); 
 
ÀÌ ÇÔ¼öµéÀº ¿¬°áÇϰíÀÚ Çϴ ȣ½ºÆ®ÀÇ ÀÎÅͳÝÁ¤º¸(ÀÎÅÍ³Ý ÁÖ¼Ò¿Í Æ÷Æ®)¸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼­ ½ÇÇàÇϰí BIO °´Ã¼¸¦ µÇµ¹·Á ÁØ´Ù. _connectÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ® Ãø¾î ¿¬°áÀ» À§Çؼ­, _new_accept´Â ¼­¹öÃø¿¡¼­ BIO °´Ã¼¸¦ ¸¸µé±â À§Çؼ­ »ç¿ëÇÑ´Ù. ¸¸¾à ºñ º¸¾È ¿¬°á(ÀÏ¹Ý ¼ÒÄÏ¿¬°á)¸¸À» À§ÇÑ ¼­¹ö¸¦ ÀÛ¼ºÇÏ´Ù¸é BIO_new_accept¸¦ »ç¿ëÇÑ´Ù.

¿¬°áÀÇ ¼º°ø¿©ºÎ´Â BIO°¡ NULLÀÎÁö¸¦ °Ë»çÇÏ´Â °ÍÀ¸·Î ÀÌ·ç¾îÁø´Ù. ÀÏ´Ü BIO°´Ã¼°¡ ¸¸µé¾î Á³´Ù¸é BIO_do_connect¿Í BIO_do_acceptµîÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¿¬°áÀ» ½ÃµµÇϰųª ¿¬°áÀ» ¹Þ¾ÆµéÀδÙ.
#include <openssl/bio.h>  
 
int BIO_do_accept(BIO *b); 
int BIO_do_connect(BIO *b); 
 

´ÙÀ½Àº °£´ÜÇÑ »ç¿ë¹æ¹ýÀÌ´Ù.
BIO *bio; 
bio = BIO_new_connect("127.0.0.1:1010"); 
if (bio == NULL) 
{ 
    // ¿¡·¯Ã³¸® 
} 
// ¿¬°áÀ» ½ÃµµÇÑ´Ù. 
if (BIO_do_connect(bio) <= 0) 
{ 
} 
 
À§ÀÇ °æ¿ì´Â Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ÀÇ ¹æ¹ýÀε¥, ¼­¹öÃøÀÇ °æ¿ì¿¡´Â BIO_new_accept¿Í BIO_do_acceptÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. BIO_do_accept´Â µè±â ¼ÒÄÏÀ¸·Î ºÎÅÍ ¿¬°áÀÌ ÀÖ´ÂÁö¸¦ °Ë»çÇÑ´Ù.

Àбâ/¾²±â

º¸¾È ¿¬°áÀÌµç ¾Æ´Ïµç°£¿¡ °øÅëÀûÀ¸·Î »ç¿ë°¡´É ÇÑ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
#inlcude <openssl/bio.h> 
 
int    BIO_read(BIO *b, void *buf, int len); 
int    BIO_write(BIO *b, const void *buf, int len); 
int    BIO_gets(BIO *b, char *buf, int size); 
int    BIO_puts(BIO *b, const char *buf); 
 
±âº»ÀûÀÎ ½Ã½ºÅÛ ÇÔ¼öÀÎ read(2), write(2)¿Í °í¼öÁØ ÀÔÃâ·Â ÇÔ¼öÀÎ gets(3), puts(3)¿Í µ¿ÀÏ ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î »ç¿ëÇϴµ¥ À־ ¾î·Á¿òÀÌ ¾øÀ» °ÍÀÌ´Ù.

ÁÖ¾îÁø SSL°´Ã¼ b·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Á¦´ë·Î ÀÐ¾î µé¿´´Ù¸é 0º¸´Ù ´õÅ« °ªÀ» ¸®ÅÏÇÑ´Ù. ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é, 0À̳ª -1À» ¸®ÅÏÇÑ´Ù. 0ÀÌ ¸®ÅϵǴ °æ¿ì´Â ÁÖ·Î ¹Ý´ëÂÊ¿¡¼­ ¿¬°áÀ» ²÷¾úÀ» °æ¿ì´Ù. À̵é ÇÔ¼ö´Â ÀÔÃâ·Â ´ÙÁßÈ­¸¦ À§ÇÑ select(), poll()µî°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÜÁö read()/write()´ë½Å À§ÀÇ ÇÔ¼öµéÀ» »ç¿ëÇØÁֱ⸸ ÇÏ¸é µÈ´Ù. ½ÇÁ¦ Àû¿ë¿¡ ´ëÇØ¼­´Â ³ªÁß¿¡ µû·Î ´Ù·çµµ·Ï ÇϰڴÙ.


º¸¾È ¿¬°áÀ» À§ÇÑ Ãß°¡ ÇÔ¼ö

º¸¾È ¿¬°áµµ °øÅë ¿¬°á¿¡¼­ »ç¿ëµÇ´Â °¢Á¾ SSL APIµéÀ» ±×´ë·Î »ç¿ëÇØ¼­ ¿¬°áÀ» ¸¸µé°í Åë½ÅÀ» ÇÏÁö¸¸, º¸¾È ¿¬°áÀ» ¸¸µé±â Àü¿¡ ¸î°¡Áö °úÁ¤ÀÌ Ãß°¡ µÈ´Ù. Ãß°¡ µÇ´Â ºÎºÐÀº ÀÀ¿ë¿¡¼­ SSLÀ» »ç¿ëÇϱâ À§Çؼ­ CTX°´Ã¼¸¦ »ý¼º°ú °ü·ÃµÈ °ÍÀ¸·Î À̵鿡 ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

À̸¦ À§Çؼ­ ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
#include <openssl/ssl.h> 
 
SSL_CTX *SSL_CTX_new(SSL_METHOD *method); 
int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, 
                const char *CApath); 
 
SSL_CTX_new ´Â TLS(12)/SSL¿¬°áÀ» ÇÒ¼ö ÀÖ´Â SSL_CTX°´Ã¼¸¦ »ý¼ºÇÑ´Ù. ¾î¶°ÇÑ ¿¬°á¹æ½ÄÀ» »ç¿ëÇÒ °ÍÀÎÁö¸¦ methodÀÎÀÚ¸¦ ÅëÇØ °áÁ¤ÇÒ ¼ö Àִµ¥, SSLȤÀº TLSÀ» »ç¿ëÇÒ°ÍÀÎÁö, ¾î¶°ÇÑ ¹öÁ¯À» »ç¿ëÇÒ °ÍÀÎÁö¿¡ µû¶ó Àû´çÇÑ ¸Þ¼­µå ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

SSL ¹öÁ¯ 2¿Í 3À» ¸ðµÎ Áö¿øÇϴ Ŭ¶óÀÌ¾ðÆ®¸¦ À§Çؼ­´Â SSLv23_client_method(void), ¼­¹ö¸¦ À§Çؼ­´Â SSLv23_server_method(void)¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Âü°í·Î ¹öÁ¯ 2´Â SSLv2_server_method/SSLv2_client_methodµîÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. TLSÀ» ÀÌ¿ëÇÏ°í ½Í´Ù¸é SSLÀ» TLS·Î º¯°æÇؼ­ »ç¿ëÇÏ¸é µÈ´Ù.

SSL_CTX_load_verity_locationsÇÔ¼ö´Â CTX°´Ã¼¿¡¼­ ÂüÁ¶ÇÒ CA Áõ¸í¼­(certificate)ÆÄÀÏÀÇ À§Ä¡¸¦ ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇÑ´Ù. CAfileÀº ÆÄÀÏÀÇ À̸§À̰í CApath´Â °æ·ÎÀ̸§ÀÌ´Ù. ÀϹÝÀûÀ¸·Î /usr/share/ssl ¹Ø¿¡ »ç¿ë°¡´ÉÇÑ CAÆÄÀÏÀÌ Á¸ÀçÇÏ´Ï À̰ÍÀ» Âü°íÇÏ¸é µÈ´Ù.

ÀÏ´Ü CTX°´Ã¼¸¦ »ý¼ºÇÏ°í ¼º°øÀûÀ¸·Î CAÆÄÀÏÀ» ·ÎµåÇß´Ù¸é, ctx¸¦ ÀÌ¿ëÇØ¼­ ssl ¿¬°áÀ» ¸¸µé¾î¾ß ÇÑ´Ù. À̸¦ À§Çؼ­ BIO_new_ssl_connectÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
BIO *BIO_new_ssl_connect(SSL_CTX *ctx); 
 

¸¶Áö¸·À¸·Î SSL ¿¬°á ¸ðµå¸¦ ¼³Á¤ÇØÁÖ¸é µÈ´Ù.
BIO_get_ssl(BIO *bio, SSL *ssl);  
BIO_set_mode(SSL *ssl, MODE);  
 

¿¹Á¦

±âº»ÀûÀÎ ³»¿ëÀ» ´Ù·ç¾úÀ¸¹Ç·Î ½ÇÁ¦ ÀÀ¿ëÀÌ °¡´ÉÇÑÁö È®ÀÎÀ» À§Çؼ­ °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸±â·Î Çß´Ù. ÀÌ¹Ì ¸î¹ø ´Ù·ç¾îº» echo ¼­¹ö/Ŭ¶óÀÌ¾ðÆ®¸¦SSHºñº¸¾È ¸ðµå¿Í º¸¾È¸ðµå·Î ÀÛ¼ºÀ» ÇØº¸µµ·Ï ÇÏ°í ¸¶Áö¸·¿¡´Â ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®¿¡¼­ µ¿½Ã¿¡ º¸¾È/ºñº¸¾È ¸ðµå¸¦ Áö¿ø°¡´É Çϵµ·Ï ¸¸µé¾îº¼ »ý°¢ÀÌ´Ù.

ºñ º¸¾È ¿¬°á °ü·Ã ¿¹Á¦

#include <openssl/ssl.h> #include <openssl/bio.h> #include <openssl/err.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(int argc, char **argv) { BIO *abio, *cbio; char buf[256]; ERR_load_BIO_strings(); SSL_load_error_strings(); OpenSSL_add_all_algorithms(); // 1111 Æ÷Æ®·Î µè±â ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù. abio = BIO_new_accept("1111"); // µè±â ¼ÒÄÏÀÇ ÃʱâÈ­ if (BIO_do_accept(abio) <= 0) { ERR_print_errors_fp(stderr); exit(0); } while(1) { // µè±â ¼ÒÄÏÀ¸·Î ºÎÅÍ ¿¬°áÀ» ±â´Ù¸°´Ù. printf("¿¬°áÀ» ±â´Ù¸²\n"); if (BIO_do_accept(abio) <= 0) { ERR_print_errors_fp(stderr); exit(0); } // ¸¸¾à ¿¬°áÀÌ·ç¾î Á³´Ù¸é // ÇØ´ç ¿¬°áÀ» °¡Áö°í ¿Â´Ù. cbio = BIO_pop(abio); memset(buf, 0x00, 256); // ÀÐ°í ¾´´Ù. if (BIO_read(cbio, buf, 255) <= 0) { perror("Read Error"); } BIO_write(cbio, buf, 255); BIO_free(cbio); } }
ÄÚµå´Â ¸Å¿ì °£´ÜÇÏ¸ç ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. telnet¸¦ ÀÌ¿ëÇØ¼­ ½±°Ô Å×½ºÆ® °¡´ÉÇÏ´Ù.

º¸¾È ¿¬°á °ü·Ã ¿¹Á¦

º¸¾È ¿¬°á ¿¹Á¦¸¦ Å×½ºÆ® Çϱâ À§Çؼ­´Â ¿ì¼± CAÆÄÀÏÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ÆÄÀÏÀº /usr/share/ssl/cert ¹Ø¿¡ cert.pemÀ̶ó´Â À̸§À¸·Î ÀÖ´Ù. cert.pemÀÇ À§Ä¡´Â ¹èÆ÷ÆÇ°ú ÆÐŰÁö ¼³Ä¡ ¹æ¹ý¿¡ µû¶ó¼­ ´Þ¶óÁú ¼ö ÀÖÀ¸´Ï Àß Ã£¾Æº¸±â ¹Ù¶õ´Ù. Âü°í·Î ÀÌ À§Ä¡´Â fedora core2 ¿¡¼­ÀÇ À§Ä¡´Ù.

¿¹Á¦´Â www.verisign.com¿¡ https(12)¸¦ ÅëÇØ¼­ ¿¬°áÇϰí À妽º ÆäÀÌÁö¸¦ Àоî¿Â´Ù. ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â ±ÍÂú¾Æ¼­ http://www.kennethballard.com/Download/intro-openssl.zip¿¡ ÀÖ´Â Äڵ带 ±×´ë·Î »ç¿ëÇß´Ù.
#include "openssl/ssl.h" 
#include "openssl/bio.h" 
#include "openssl/err.h" 
 
#include "stdio.h" 
#include "string.h" 
 
int main() 
{ 
    BIO * bio; 
    SSL * ssl; 
    SSL_CTX * ctx; 
 
    int p; 
 
    char * request = "GET / HTTP/1.1\x0D\x0AHost: www.verisign.com\x0D\x0A\x43onnection: Close\x0D\x0A\x0D\x0A"; 
    char r[1024]; 
 
    /* Set up the library */ 
 
    ERR_load_BIO_strings(); 
    SSL_load_error_strings(); 
    OpenSSL_add_all_algorithms(); 
 
    /* Set up the SSL context */ 
    ctx = SSL_CTX_new(SSLv23_client_method()); 
 
    /* Load the trust store */ 
    if(! SSL_CTX_load_verify_locations(ctx, "cert.pem", "/usr/share/ssl")) 
    { 
        fprintf(stderr, "Error loading trust store\n"); 
        ERR_print_errors_fp(stderr); 
        SSL_CTX_free(ctx); 
        return 0; 
    } 
 
    /* Setup the connection */ 
 
    bio = BIO_new_ssl_connect(ctx); 
 
    /* Set the SSL_MODE_AUTO_RETRY flag */ 
 
    BIO_get_ssl(bio, & ssl); 
    SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); 
 
    /* Create and setup the connection */ 
 
    BIO_set_conn_hostname(bio, "www.verisign.com:https"); 
 
    if(BIO_do_connect(bio) <= 0) 
    { 
        fprintf(stderr, "Error attempting to connect\n"); 
        ERR_print_errors_fp(stderr); 
        BIO_free_all(bio); 
        SSL_CTX_free(ctx); 
        return 0; 
    } 
 
    /* Check the certificate */ 
    if(SSL_get_verify_result(ssl) != X509_V_OK) 
    { 
        fprintf(stderr, "Certificate verification error: %i\n", SSL_get_verify_result(ssl)); 
        BIO_free_all(bio); 
        SSL_CTX_free(ctx); 
        return 0; 
    } 
 
    /* Send the request */ 
    BIO_write(bio, request, strlen(request)); 
    /* Read in the response */ 
 
    for(;;) 
    { 
        p = BIO_read(bio, r, 1023); 
        if(p <= 0) break; 
        r[p] = 0; 
        printf("%s", r); 
    } 
    /* Close the connection and free the context */ 
    BIO_free_all(bio); 
    SSL_CTX_free(ctx); 
    return 0; 
} 
 

Âü°í ¹®Çå

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.