ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>openssl_programing
![]()
Tweet
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ºñº¸¾È ¸ðµå¿Í º¸¾È¸ðµå·Î ÀÛ¼ºÀ» ÇØº¸µµ·Ï ÇÏ°í ¸¶Áö¸·¿¡´Â ¼¹ö¿Í Ŭ¶óÀÌ¾ðÆ®¿¡¼ µ¿½Ã¿¡ º¸¾È/ºñº¸¾È ¸ðµå¸¦ Áö¿ø°¡´É Çϵµ·Ï ¸¸µé¾îº¼ »ý°¢ÀÌ´Ù. ºñ º¸¾È ¿¬°á °ü·Ã ¿¹Á¦ÄÚµå´Â ¸Å¿ì °£´ÜÇÏ¸ç ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|