{"id":603,"date":"2008-07-31T16:30:42","date_gmt":"2008-07-31T16:30:42","guid":{"rendered":"http:\/\/pchero21.com\/?p=603"},"modified":"2008-07-31T16:30:42","modified_gmt":"2008-07-31T16:30:42","slug":"openssl%ec%9d%84-%ec%9d%b4%ec%9a%a9%ed%95%9c-%ec%95%94%ed%98%b8%ed%99%94-%ed%86%b5%ec%8b%a0","status":"publish","type":"post","link":"http:\/\/pchero21.com\/?p=603","title":{"rendered":"Openssl\uc744 \uc774\uc6a9\ud55c \uc554\ud638\ud654 \ud1b5\uc2e0"},"content":{"rendered":"<p>&nbsp;Openssl\uc744 \uc774\uc6a9\ud55c \uc554\ud638\ud654 \ud1b5\uc2e0<\/p>\n<p>&nbsp;\uc11c\ubc84\ub294 \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud558\uc5ec \uac00\uc7a5 \uba3c\uc800 SSL_CTX\uc640 SSL \uad6c\uc870\uccb4\ub97c \uc120\uc5b8\ud558\uc5ec \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uadf8\ub9ac\uace0, SSL \uc138\uc158\uc744 \uc2dc\uc791\ud558\uae30 \uc704\ud55c \ucd08\uae30\uac12\uc744 \uc124\uc815\ud558\uace0, SSL_CTX_new() \ud568\uc218\ub97c \uc774\uc6a9\ud558\uc5ec SSL \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<p>&nbsp;\ub2e4\uc74c \ub2e8\uacc4\ub294 \uc778\uc99d\uc11c\ub97c \uc774\uc6a9\ud558\uc5ec \uc11c\ubc84\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \uac04\uc758 \uc778\uc99d\uc744 \uc218\ud589\ud560 \uacbd\uc6b0 SS_CTX_use_certificate_file()\ub97c \uc774\uc694\ud558\uc5ec \uc778\uc99d\uc11c \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uba70, SSL_CTX_use_PrivateKey_file()\ub97c \uc774\uc6a9\ud558\uc5ec \uac1c\uc778 \ud0a4\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<p>&nbsp;\uc774\ub7f0 \uc900\ube44 \ub2e8\uacc4 \ud6c4\uc5d0 SSL_new() \ud568\uc218\ub97c \uc774\uc6a9\ud558\uc5ec SSL \uc138\uc158\uc744 \uc0dd\uc131\ud558\uace0, \uc774\ud6c4\uc758 \ub2e8\uacc4\ub294 \uae30\uc874\uc758 \uc18c\ucf13 \uc11c\ubc84\uc640 \uc720\uc0ac\ud55c \ubc29\ubc95\uc73c\ub85c \ucc98\ub9ac\ub97c \uc218\ud589\ud560 \uc218 \uc788\ub2e4. SSL\uc744 \uc774\uc6a9\ud55c \uc1a1\uc218\uc2e0\uc740 SSL_accept(), SSL_read(), SSL_write() \ub4f1\uc758 \ud568\uc218\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc73c\uba70, \uc774 \uacfc\uc815\uc740 \uae30\uc885\uc758 \uc18c\ucf13 \ud504\ub85c\uadf8\ub798\ubc0d\uacfc \uc720\uc0ac\ud55c \ubc29\ubc95\uc73c\ub85c \uc218\ud589\ub41c\ub2e4.<\/p>\n<p><\/p>\n<fieldset class=\"geshi r2 g_hascaption\">\n<legend><span class=\"g_caption\">serv.c<\/span> <span class=\"g_lang\" style=\"color: rgb(170, 170, 170);\">(Language : c)<\/span><\/legend>\n<ol class=\"code\">\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\">\/*<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; serv.c<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; Copyright 2008 Kim Sung-tae &lt;pchero21@gmail.com&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; This program is free software; you can redistribute it and\/or modify<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; it under the terms of the GNU General Public License as published by<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; the Free Software Foundation; either version 2 of the License, or<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; (at your option) any later version.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; This program is distributed in the hope that it will be useful,<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; GNU General Public License for more details.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; You should have received a copy of the GNU General Public License<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; along with this program; if not, write to the Free Software<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; MA 02110-1301, USA.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;stdio.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;unistd.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;stdlib.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;memory.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;errno.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;sys\/types.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;sys\/socket.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;netinet\/in.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;arpa\/inet.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;netdb.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\">\/*<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> * openssl \uad00\ub828 \ud5e4\ub354 \ud30c\uc77c\uc744 include \ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/rsa.h&gt;&nbsp; &nbsp; &nbsp; &nbsp; \/* SSLeay stuff *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/crypto.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/x509.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/pem.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/ssl.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/err.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\">\/* define HOME to be dir for key and cert files&#8230;. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define HOME &#8220;.\/&#8221;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\">\/* Make these what you want for cert &amp; key files *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CERTF HOME &#8220;server.crt&#8221;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define KEYF HOME &#8220;server.key&#8221;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_NULL(x) if((x) == NULL) exit(1);<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_ERR(err, s) if((err) == -1) { perror(s); exit(1); }<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_SSL(err) if((err) == -1) { ERR_print_errors_fp(stderr); exit(2); }<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw4\">int<\/span> main<span class=\"br0\">(<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">)<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">int<\/span> err;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">int<\/span> listen_sd;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">int<\/span> sd;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">struct<\/span> sockaddr_in sa_serv;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">struct<\/span> sockaddr_in sa_cli;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; size_t client_len;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* SSL Context \ubc0f \uad00\ub828 \uad6c\uc870\uccb4\ub97c \uc120\uc5b8\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_CTX &nbsp;*ctx;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL &nbsp; &nbsp;*ssl;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; X509&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *client_cert;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">char<\/span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *str;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">char<\/span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buf<span class=\"br0\">[<\/span><span class=\"nu0\">4096<\/span><span class=\"br0\">]<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_METHOD&nbsp; *meth;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* SSL \uad00\ub828 \ucd08\uae30\ud654 \uc791\uc5c5\uc744 \uc218\ud589\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_load_error_strings<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSLeay_add_ssl_algorithms<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; meth = SSLv23_server_method<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;&nbsp; &nbsp; <span class=\"co1\">\/\/ \uc11c\ubc84 \uba54\uc18c\ub4dc.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; ctx = SSL_CTX_new<span class=\"br0\">(<\/span>meth<span class=\"br0\">)<\/span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ \uc9c0\uc815\ub41c \ucd08\uae30 \uac12\uc744 \uc774\uc6a9\ud558\uc5ec SSL Context\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>!ctx<span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; ERR_print_errors_fp<span class=\"br0\">(<\/span>stderr<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \uc778\uc99d\uc11c \ud30c\uc77c\uc744 \uc124\uc815\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>SSL_CTX_use_certificate_file<span class=\"br0\">(<\/span>ctx, CERTF, SSL_FILETYPE_PEM<span class=\"br0\">)<\/span> &lt;= <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span>&nbsp; &nbsp;&nbsp; &nbsp;<span class=\"co1\">\/\/ \uc778\uc99d\uc11c\ub97c \ud30c\uc77c\ub85c \ubd80\ud130 \ub85c\ub529\ud560\ub54c \uc0ac\uc6a9\ud568.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; ERR_print_errors_fp<span class=\"br0\">(<\/span>stderr<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">3<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \uac1c\uc778 \ud0a4\ub97c \uc124\uc815\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>SSL_CTX_use_PrivateKey_file<span class=\"br0\">(<\/span>ctx, KEYF, SSL_FILETYPE_PEM<span class=\"br0\">)<\/span> &lt;= <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; ERR_print_errors_fp<span class=\"br0\">(<\/span>stderr<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uac1c\uc778 \ud0a4\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \uac83\uc778\uc9c0 \ud655\uc778\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>!SSL_CTX_check_private_key<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class=\"br0\">(<\/span>stderr, <span class=\"st0\">&#8220;Private key does not match the certificate public key<span class=\"es0\">n<\/span>&#8220;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">5<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Prepare TCP socket for receiving connections *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; listen_sd = socket<span class=\"br0\">(<\/span>AF_INET, SOCK_STREAM, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_ERR<span class=\"br0\">(<\/span>listen_sd, <span class=\"st0\">&#8220;socket&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; memset<span class=\"br0\">(<\/span>&amp;sa_serv, <span class=\"st0\">&#8216;<span class=\"es0\">\u0000<\/span>&#8216;<\/span>, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>sa_serv<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa_serv.<span class=\"me1\">sin_family<\/span> = AF_INET;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa_serv.<span class=\"me1\">sin_addr<\/span>.<span class=\"me1\">s_addr<\/span> = INADDR_ANY;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa_serv.<span class=\"me1\">sin_port<\/span> = htons<span class=\"br0\">(<\/span><span class=\"nu0\">1111<\/span><span class=\"br0\">)<\/span>; <span class=\"coMULTI\">\/* Server Port number *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = bind<span class=\"br0\">(<\/span>listen_sd, <span class=\"br0\">(<\/span><span class=\"kw4\">struct<\/span> sockaddr*<span class=\"br0\">)<\/span>&amp;sa_serv, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>sa_serv<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_ERR<span class=\"br0\">(<\/span>err, <span class=\"st0\">&#8220;bimd&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Receive a TCP connection. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; err = listen<span class=\"br0\">(<\/span>listen_sd, <span class=\"nu0\">5<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; CHK_ERR<span class=\"br0\">(<\/span>err, <span class=\"st0\">&#8220;listen&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; client_len = <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>sa_cli<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; sd = accept<span class=\"br0\">(<\/span>listen_sd, <span class=\"br0\">(<\/span><span class=\"kw4\">struct<\/span> sockaddr*<span class=\"br0\">)<\/span>&amp;sa_cli, &amp;client_len<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; CHK_ERR<span class=\"br0\">(<\/span>sd, <span class=\"st0\">&#8220;accept&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; close<span class=\"br0\">(<\/span>listen_sd<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Connection from %1x, port %x<span class=\"es0\">n<\/span>&#8220;<\/span>, sa_cli.<span class=\"me1\">sin_addr<\/span>.<span class=\"me1\">s_addr<\/span>, sa_cli.<span class=\"me1\">sin_port<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp;&nbsp; <span class=\"coMULTI\">\/* TCP connection is ready. Do server side SSL. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; ssl = SSL_new<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span>; <span class=\"co1\">\/\/ \uc124\uc815\ub41c Context\ub97c \uc774\uc6a9\ud558\uc5ec SSL \uc138\uc158\uc758 \ucd08\uae30\ud654 \uc791\uc5c5\uc744 \uc218\ud589\ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_set_fd<span class=\"br0\">(<\/span>ssl, sd<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_accept<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;&nbsp; &nbsp; <span class=\"co1\">\/\/ SSL \uc138\uc158\uc744 \ud1b5\ud574 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc811\uc18d\uc744 \ub300\uae30\ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_SSL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Get the cipher &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;SSL connection using %s<span class=\"es0\">n<\/span>&#8220;<\/span>, SSL_get_cipher<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc778\uc99d\uc11c\ub97c \ubc1b\uc74c &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; client_cert = SSL_get_peer_certificate<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>client_cert != <span class=\"kw2\">NULL<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Client certificate:<span class=\"es0\">n<\/span>&#8220;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; str = X509_NAME_oneline<span class=\"br0\">(<\/span>X509_get_subject_name<span class=\"br0\">(<\/span>client_cert<span class=\"br0\">)<\/span>, <span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;<span class=\"es0\">t<\/span> subject: %s<span class=\"es0\">n<\/span>&#8220;<\/span>, str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; OPENSSL_free<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; str = X509_NAME_oneline<span class=\"br0\">(<\/span>X509_get_issuer_name<span class=\"br0\">(<\/span>client_cert<span class=\"br0\">)<\/span>, <span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;<span class=\"es0\">t<\/span> issuer: %s<span class=\"es0\">n<\/span>&#8220;<\/span>, str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; OPENSSL_free<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">\/* We could do all sorts of certificate verification stuff here before deallocating the certificate. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; X509_free<span class=\"br0\">(<\/span>client_cert<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Client does not have certificate.<span class=\"es0\">n<\/span>&#8220;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* SSL \uc138\uc158\uc744 \ud1b5\ud574\uc11c \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ub370\uc774\ud130\ub97c \uc1a1\uc218\uc2e0\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_read<span class=\"br0\">(<\/span>ssl, buf, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>buf<span class=\"br0\">)<\/span> &#8211; <span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_SSL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; buf<span class=\"br0\">[<\/span>err<span class=\"br0\">]<\/span> = <span class=\"st0\">&#8216;<span class=\"es0\">\u0000<\/span>&#8216;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Got %d chars: &#8216;%s&#8217;<span class=\"es0\">n<\/span>&#8220;<\/span>, err, buf<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_write<span class=\"br0\">(<\/span>ssl, <span class=\"st0\">&#8220;I hear you\/&#8221;<\/span>, strlen<span class=\"br0\">(<\/span><span class=\"st0\">&#8220;I hear you.&#8221;<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_SSL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc124\uc815\ud55c \uc790\uc6d0\uc744 \ubc18\ud658\ud558\uace0 \uc885\ub8cc\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; close<span class=\"br0\">(<\/span>sd<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_free<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_CTX_free<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">return<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<\/ol>\n<\/fieldset>\n<p><\/p>\n<fieldset class=\"geshi r2 g_hascaption\">\n<legend><span class=\"g_caption\">cli.c<\/span> <span class=\"g_lang\" style=\"color: rgb(170, 170, 170);\">(Language : c)<\/span><\/legend>\n<ol class=\"code\">\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\">\/*<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; cli.c<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; Copyright 2008 Kim Sung-tae &lt;pchero21@gmail.com&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; This program is free software; you can redistribute it and\/or modify<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; it under the terms of the GNU General Public License as published by<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; the Free Software Foundation; either version 2 of the License, or<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; (at your option) any later version.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; This program is distributed in the hope that it will be useful,<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; GNU General Public License for more details.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; You should have received a copy of the GNU General Public License<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; along with this program; if not, write to the Free Software<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *&nbsp; &nbsp; &nbsp; MA 02110-1301, USA.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"coMULTI\"> *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;stdio.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;memory.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;errno.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;sys\/types.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;sys\/socket.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;netinet\/in.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;arpa\/inet.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;netdb.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/crypto.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/x509.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/pem.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/ssl.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#include &lt;openssl\/err.h&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_NULL(x) if((x) == NULL) exit(1);<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_ERR(err, s) if((err) == -1) { perror(s); exit(1); }<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"co2\">#define CHK_SSL(err) if((err) == -1) { ERR_print_errors_fp(stderr); exit(2); }<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"kw4\">int<\/span> main<span class=\"br0\">(<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">)<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">int<\/span> err;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">int<\/span> sd;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">struct<\/span> sockaddr_in sa;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* SSL \uad00\ub828 \uc815\ubcf4\ub97c \uad00\ub9ac\ud560 \uad6c\uc870\uccb4\ub97c \uc120\uc5b8\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_CTX &nbsp; *ctx;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL &nbsp; &nbsp; *ssl;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; X509&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *server_cert;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">char<\/span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *str;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw4\">char<\/span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buf<span class=\"br0\">[<\/span><span class=\"nu0\">4096<\/span><span class=\"br0\">]<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_METHOD&nbsp; &nbsp; *meth;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud55c \ucd08\uae30\ud654 \uc791\uc5c5\uc744 \uc218\ud589\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_load_error_strings<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSLeay_add_ssl_algorithms<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; meth = SSLv3_client_method<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; ctx = SSL_CTX_new<span class=\"br0\">(<\/span>meth<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \uc778\uc99d\uc11c \ud30c\uc77c\uc744 \uc124\uc815\ud55c\ub2e4. &#8211; opt*\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>SSL_CTX_use_certificate_file<span class=\"br0\">(<\/span>ctx, <span class=\"st0\">&#8220;.\/client.crt&#8221;<\/span>, SSL_FILETYPE_PEM<span class=\"br0\">)<\/span> &lt;= <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span>&nbsp; &nbsp; <span class=\"co1\">\/\/ \uc778\uc99d\uc11c\ub97c \ud30c\uc77c\ub85c \ubd80\ud130 \ub85c\ub529\ud560\ub54c \uc0ac\uc6a9\ud568.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; ERR_print_errors_fp<span class=\"br0\">(<\/span>stderr<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">3<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \uac1c\uc778 \ud0a4\ub97c \uc124\uc815\ud55c\ub2e4. &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>SSL_CTX_use_PrivateKey_file<span class=\"br0\">(<\/span>ctx, <span class=\"st0\">&#8220;.\/client.key&#8221;<\/span>, SSL_FILETYPE_PEM<span class=\"br0\">)<\/span> &lt;= <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; ERR_print_errors_fp<span class=\"br0\">(<\/span>stderr<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uac1c\uc778 \ud0a4\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \uac83\uc778\uc9c0 \ud655\uc778\ud55c\ub2e4. &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">(<\/span>!SSL_CTX_check_private_key<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class=\"br0\">(<\/span>stderr, <span class=\"st0\">&#8220;Private key does not match the certificate public key<span class=\"es0\">n<\/span>&#8220;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; &nbsp; &nbsp; exit<span class=\"br0\">(<\/span><span class=\"nu0\">5<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"co1\">\/\/CHK_SSL(err);<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Create a socket and connect to server using normal socket calls. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sd = socket<span class=\"br0\">(<\/span>AF_INET, SOCK_STREAM, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_ERR<span class=\"br0\">(<\/span>sd, <span class=\"st0\">&#8220;socket&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; memset<span class=\"br0\">(<\/span>&amp;sa, <span class=\"st0\">&#8216;<span class=\"es0\">\u0000<\/span>&#8216;<\/span>, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>sa<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa.<span class=\"me1\">sin_family<\/span> = AF_INET;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa.<span class=\"me1\">sin_addr<\/span>.<span class=\"me1\">s_addr<\/span> = inet_addr<span class=\"br0\">(<\/span><span class=\"st0\">&#8220;127.0.0.1&#8221;<\/span><span class=\"br0\">)<\/span>;&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Server IP Address <\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; sa.<span class=\"me1\">sin_port<\/span> = htons<span class=\"br0\">(<\/span><span class=\"nu0\">1111<\/span><span class=\"br0\">)<\/span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Server Port Number<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = connect<span class=\"br0\">(<\/span>sd, <span class=\"br0\">(<\/span><span class=\"kw4\">struct<\/span> sockaddr*<span class=\"br0\">)<\/span>&amp;sa, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>sa<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_ERR<span class=\"br0\">(<\/span>err, <span class=\"st0\">&#8220;connect&#8221;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Now we have TCP connection. Start SSL negotiation. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; ssl = SSL_new<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span>; &nbsp;<span class=\"co1\">\/\/ \uc138\uc158\uc744 \uc704\ud55c \uc790\uc6d0\uc744 \ud560\ub2f9\ubc1b\ub294\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_set_fd<span class=\"br0\">(<\/span>ssl, sd<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_connect<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>; <span class=\"co1\">\/\/ \uae30\uc874\uc758 connect() \ud568\uc218 \ub300\uc2e0 \uc0ac\uc6a9\ud558\uc5ec \uc11c\ubc84\ub85c \uc811\uc18d\ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Following two steps are optional and not required for data exchange to be successful. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Get the Cipher &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;SSL connection using %s<span class=\"es0\">n<\/span>&#8220;<\/span>, SSL_get_cipher<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* Get server&#8217;s certificate (note: beware of dynamic allocation) &#8211; opt *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc11c\ubc84\uc758 \uc778\uc99d\uc11c\ub97c \ubc1b\ub294\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; server_cert = SSL_get_peer_certificate<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>server_cert<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Server certificate:<span class=\"es0\">n<\/span>&#8220;<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc778\uc99d\uc11c\uc758 \uc774\ub984\uc744 \ucd9c\ub825\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; str = X509_NAME_oneline<span class=\"br0\">(<\/span>X509_get_subject_name<span class=\"br0\">(<\/span>server_cert<span class=\"br0\">)<\/span>, <span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;<span class=\"es0\">t<\/span> subject: %s<span class=\"es0\">n<\/span>&#8220;<\/span>, str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; OPENSSL_free<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc778\uc99d\uc11c\uc758 issuer\ub97c \ucd9c\ub825\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; str = X509_NAME_oneline<span class=\"br0\">(<\/span>X509_get_issuer_name<span class=\"br0\">(<\/span>server_cert<span class=\"br0\">)<\/span>, <span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_NULL<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;<span class=\"es0\">t<\/span> issuer: %s<span class=\"es0\">n<\/span>&#8220;<\/span>, str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; OPENSSL_free<span class=\"br0\">(<\/span>str<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* We could do all sorts of certificate verification stuff here before deallocating the certificate *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; X509_free<span class=\"br0\">(<\/span>server_cert<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \uc11c\ubc84\uc640 \ub370\uc774\ud130\ub97c \uc1a1\uc218\uc2e0 \ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_write<span class=\"br0\">(<\/span>ssl, <span class=\"st0\">&#8220;Hello World!&#8221;<\/span>, strlen<span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Hello World!&#8221;<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_SSL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; err = SSL_read<span class=\"br0\">(<\/span>ssl, buf, <span class=\"kw4\">sizeof<\/span><span class=\"br0\">(<\/span>buf<span class=\"br0\">)<\/span> &#8211; <span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; CHK_SSL<span class=\"br0\">(<\/span>err<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; buf<span class=\"br0\">[<\/span>err<span class=\"br0\">]<\/span> = <span class=\"st0\">&#8216;<span class=\"es0\">\u0000<\/span>&#8216;<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\"><span class=\"kw3\">printf<\/span><\/a><span class=\"br0\">(<\/span><span class=\"st0\">&#8220;Got %d chars: &#8216;%s&#8217;<span class=\"es0\">n<\/span>&#8220;<\/span>, err, buf<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_shutdown<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;&nbsp; &nbsp; <span class=\"co1\">\/\/ SSL\ub85c \uc5f0\uacb0\ub41c \uc811\uc18d\uc744 \ud574\uc9c0\ud55c\ub2e4.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"coMULTI\">\/* \ud560\ub2f9\ub41c \uc790\uc6d0\uc744 \ubc18\ud658\ud558\uace0 \uc885\ub8cc\ud55c\ub2e4. *\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; close<span class=\"br0\">(<\/span>sd<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_free<span class=\"br0\">(<\/span>ssl<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; SSL_CTX_free<span class=\"br0\">(<\/span>ctx<span class=\"br0\">)<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"nu0\">0<\/span>;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\"><span class=\"br0\">}<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\">&nbsp;<\/div>\n<\/li>\n<\/ol>\n<\/fieldset>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;Openssl\uc744 \uc774\uc6a9\ud55c \uc554\ud638\ud654 \ud1b5\uc2e0 &nbsp;\uc11c\ubc84\ub294 \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud558\uc5ec \uac00\uc7a5 \uba3c\uc800 SSL_CTX\uc640 SSL \uad6c\uc870\uccb4\ub97c \uc120\uc5b8\ud558\uc5ec \uc554\ud638\ud654 \ud1b5\uc2e0\uc744 \uc704\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uadf8\ub9ac\uace0, SSL \uc138\uc158\uc744 \uc2dc\uc791\ud558\uae30 \uc704\ud55c \ucd08\uae30\uac12\uc744 \uc124\uc815\ud558\uace0, SSL_CTX_new() \ud568\uc218\ub97c \uc774\uc6a9\ud558\uc5ec SSL \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc0dd\uc131\ud55c\ub2e4. &nbsp;\ub2e4\uc74c \ub2e8\uacc4\ub294 \uc778\uc99d\uc11c\ub97c \uc774\uc6a9\ud558\uc5ec \uc11c\ubc84\uc640 &hellip; <a href=\"http:\/\/pchero21.com\/?p=603\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[48],"tags":[362,363,364],"_links":{"self":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts\/603"}],"collection":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=603"}],"version-history":[{"count":0,"href":"http:\/\/pchero21.com\/index.php?rest_route=\/wp\/v2\/posts\/603\/revisions"}],"wp:attachment":[{"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=603"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pchero21.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}