{"id":268500,"date":"2015-11-18T21:34:06","date_gmt":"2015-11-18T18:34:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=268500"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=268500","title":{"rendered":"\u0417\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0435 TLS-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Boost.Asio \u0438 OpenSSL \u043f\u043e\u0434 Windows"},"content":{"rendered":"<br \/>\n<h4><b>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/b><\/h4>\n<p>  \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u043e\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u042f \u043f\u043e\u043c\u043d\u0438\u043b, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a Boost Asio \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f OpenSSL. \u042f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043d\u043e, \u0443\u0432\u044b, \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043d\u0430\u0448\u0435\u043b, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434 Windows. \u0422\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434 Windows \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Boost Asio \u0438 OpenSSL, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u043c\u0443 TLS-\u043a\u0430\u043d\u0430\u043b\u0443. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0437\u044f\u0442\u044c \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_53_0\/doc\/html\/boost_asio\/example\/ssl\/client.cpp\">\u043a\u043b\u0438\u0435\u043d\u0442<\/a> \u0438 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_53_0\/doc\/html\/boost_asio\/example\/ssl\/server.cpp\">\u0441\u0435\u0440\u0432\u0435\u0440<\/a> \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 Boost.<br \/>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c OpenSSL, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043e\u0431\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Boost Asio, OpenSSL.<\/p>\n<h4><b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 OpenSSL \u043f\u043e\u0434 Windows<\/b><\/h4>\n<p>  \u042f \u0432\u0437\u044f\u043b OpenSSL \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f: <a href=\"https:\/\/github.com\/openssl\/openssl\">github.com\/openssl\/openssl<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 OpenSSL \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:  <\/p>\n<ul>\n<li>NASM, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u044f \u0432\u0437\u044f\u043b \u043e\u0442\u0441\u044e\u0434\u0430: <a href=\"http:\/\/www.nasm.us\/\">www.nasm.us<\/a> \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u043a nasm.exe \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b PATH.<\/li>\n<li>Active Perl, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u044f \u0432\u0437\u044f\u043b \u043e\u0442\u0441\u044e\u0434\u0430: <a href=\"http:\/\/www.activestate.com\/activeperl\">www.activestate.com\/activeperl<\/a> \u0418 \u043f\u0443\u0442\u044c \u043a perl.exe \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b PATH.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 OpenSSL \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b MS Visual Studio 2013, \u0438 \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<br \/>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c OpenSSL \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 Perl, \u043f\u043e\u0434 Win32. \u041d\u0438\u0436\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u044f \u0431\u0443\u0434\u0443 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e OpenSSL \u0443 \u0432\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 C:\\Work\\OpenSSL. \u0412\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0439\u0442\u0438 \u0432 \u044d\u0442\u043e\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"dos\">cd C:\\Work\\OpenSSL perl Configure VC-WIN32 --prefix=C:\\Work\\OpenSSL\\output enable-deprecated -I$(SRC_D) <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432\u043e\u0442 \u043d\u0430 \u0447\u0442\u043e:  <\/p>\n<ul>\n<li>\u0417\u0434\u0435\u0441\u044c \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>&#8212;prefix<\/b> \u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0443\u0442\u044c, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438. OpenSSL \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \\output \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438.<\/li>\n<li>\u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u0437\u0430\u0434\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <b>enable-deprecated<\/b> \u2014 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0441\u0431\u043e\u0440\u043a\u0443 \u0431\u0443\u0434\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d deprecated-\u043a\u043e\u0434. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438 Boost Asio \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 CRYPTO_set_id_callback \u0438\u0437 openssl\\crypto.h \u0438 DH_free \u0438\u0437 openssl\\dh.h \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c enable-deprecated.<\/li>\n<li>\u041f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e C:\\Work\\OpenSSL \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 *.h \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b <b>-I$(SRC_D)<\/b>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0441\u043a\u0430\u0442\u044c \u0442\u0430\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c -IC:\\Work\\OpenSSL. \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 ms\\do_nasm, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0444\u0430\u0439\u043b ms\\nt.mak \u0438 \u0432\u043f\u0438\u0448\u0438\u0442\u0435 \u0442\u0443\u0434\u0430 \u043f\u0443\u0442\u044c \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c.<\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u041d\u0443\u0436\u043d\u043e \u0438\u0437 \u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code class=\"dos\">ms\\do_nasm <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 MS Visual Studio, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 MS Visual Studio \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\Tools\\Shortcuts<\/i>.<\/p>\n<p>  \u0418\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 MS Visual Studio \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 C:\\Work\\OpenSSL \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e nmake:<\/p>\n<pre><code class=\"dos\">nmake -f ms\\nt.mak <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c ntdll.mak.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u0431\u043e\u0440\u043a\u0438. \u0415\u0441\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u0438\u0434\u0435\u0442, \u0442\u043e \u0432\u043e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:  <\/p>\n<ul>\n<li>\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u0443\u0442\u044c \u043a nasm.exe \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u044b PATH<\/li>\n<li>\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 C:\\Work\\OpenSSL<\/li>\n<li>\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0441\u0431\u043e\u0440\u043a\u0443 \u043d\u0435 \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 MS Visual Studio.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043b tmp32\/x86cpuid.obj \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 *.asm. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0443\u0442\u044c \u043a nasm \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f PATH. \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c nasm-\u043e\u043c \u0432\u0441\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438\u0445 \u0442\u0430\u043c \u0432\u0441\u0435\u0433\u043e 22.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433:<\/p>\n<pre><code class=\"dos\">nmake -f ms\\nt.mak install <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0430 OpenSSL \u043f\u043e\u0434 Windows \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.<\/p>\n<h4><b>\u0421\u0431\u043e\u0440\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/b><\/h4>\n<p>  \u041a\u0430\u043a \u044f \u0438 \u0441\u043a\u0430\u0437\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435, \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0437\u044f\u0442\u044c \u0432\u043e\u0442 \u044d\u0442\u0438 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_53_0\/doc\/html\/boost_asio\/example\/ssl\/client.cpp\">\u043a\u043b\u0438\u0435\u043d\u0442<\/a> \u0438 <a href=\"http:\/\/www.boost.org\/doc\/libs\/1_53_0\/doc\/html\/boost_asio\/example\/ssl\/server.cpp\">\u0441\u0435\u0440\u0432\u0435\u0440<\/a> \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e Boost Asio. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.<\/p>\n<p>  \u0418\u0442\u0430\u043a:  <\/p>\n<ul>\n<li>27 \u044f\u043d\u0432\u0430\u0440\u044f 2015 \u0433\u043e\u0434\u0430 \u0432 OpenSSL \u0432\u043d\u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0432\u0430\u0436\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/openssl\/openssl\/commit\/b6ba401497001c2f042feff693ed292b21c8369c\">\u043a\u043e\u043c\u043c\u0438\u0442<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043d\u0435\u0441 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 ssl.h \u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a ssl_locl.h. \u042d\u0442\u0438 \u0432\u0441\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 Boost Asio, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b ssl_locl.h.<\/li>\n<li>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a ssl_locl.h \u0442\u0430\u043a\u0436\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a packet_locl.h, \u0430 \u0432 \u043d\u0435\u043c \u043d\u0430 411 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 void* \u0432 unsigned char*:<br \/> \n<pre><code class=\"cpp\">*data = BUF_memdup(pkt-&gt;curr, length); <\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u043a\u0430\u043a extern \u00abC\u00bb, \u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0421 \u0442\u0443\u0442 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u043e Visual Studio \u043d\u0435 \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443. \u041c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u044f\u0432\u043d\u043e:  <\/p>\n<pre><code class=\"cpp\">*data = (unsigned char*)BUF_memdup(pkt-&gt;curr, length); <\/code><\/pre>\n<p>  <\/li>\n<li>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432 ssl.h \u0431\u044b\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 SSL_R_SHORT_READ, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0435\u0435 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u0443\u0431\u0440\u0430\u043b\u0438. \u042d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Boost Asio, \u0438 \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430.<br \/> \n<pre><code class=\"cpp\">#define SSL_R_SHORT_READ 219 #include &quot;ssl_locl.h&quot; #include &lt;boost\/asio\/ssl.hpp&gt; <\/code><\/pre>\n<p>  <\/li>\n<li>\u041d\u0443\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 _WIN32_WINNT=0x0501 \u2014 \u0434\u043b\u044f Boost, OPENSSL_NO_SSL2 \u2014 \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e SSL \u0438 OPENSSL_USE_DEPRECATED, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 OpenSSL \u0441 \u043a\u043b\u044e\u0447\u043e\u043c enable-deprecated.  <\/li>\n<li>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0443\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 D:\\Work\\OpenSSL \u0438 D:\\Work\\OpenSSL\\output\\include  <\/li>\n<\/ul>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 Boost Asio \u0438 OpenSSL \u043f\u043e\u0434 Windows \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Visual Studio 2013.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">server.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;cstdlib&gt; #include &lt;iostream&gt;  #include &lt;boost\/bind.hpp&gt; #include &lt;boost\/asio.hpp&gt;  #define SSL_R_SHORT_READ 219 #include &quot;ssl\/ssl_locl.h&quot; #include &lt;boost\/asio\/ssl.hpp&gt;    typedef boost::asio::ssl::stream&lt;boost::asio::ip::tcp::socket&gt; ssl_socket;  class session { public: \tsession(boost::asio::io_service& io_service, \t\tboost::asio::ssl::context& context) \t\t: socket_(io_service, context) \t{ \t}  \tssl_socket::lowest_layer_type& socket() \t{ \t\treturn socket_.lowest_layer(); \t}  \tvoid start() \t{ \t\tsocket_.async_handshake(boost::asio::ssl::stream_base::server, \t\t\tboost::bind(&session::handle_handshake, this, \t\t\tboost::asio::placeholders::error)); \t}  \tvoid handle_handshake(const boost::system::error_code& error) \t{ \t\tif (!error) \t\t{ \t\t\tsocket_.async_read_some(boost::asio::buffer(data_, max_length), \t\t\t\tboost::bind(&session::handle_read, this, \t\t\t\tboost::asio::placeholders::error, \t\t\t\tboost::asio::placeholders::bytes_transferred)); \t\t} \t\telse \t\t{ \t\t\tdelete this; \t\t} \t}  \tvoid handle_read(const boost::system::error_code& error, \t\tsize_t bytes_transferred) \t{ \t\tif (!error) \t\t{ \t\t\tboost::asio::async_write(socket_, \t\t\t\tboost::asio::buffer(data_, bytes_transferred), \t\t\t\tboost::bind(&session::handle_write, this, \t\t\t\tboost::asio::placeholders::error)); \t\t} \t\telse \t\t{ \t\t\tdelete this; \t\t} \t}  \tvoid handle_write(const boost::system::error_code& error) \t{ \t\tif (!error) \t\t{ \t\t\tsocket_.async_read_some(boost::asio::buffer(data_, max_length), \t\t\t\tboost::bind(&session::handle_read, this, \t\t\t\tboost::asio::placeholders::error, \t\t\t\tboost::asio::placeholders::bytes_transferred)); \t\t} \t\telse \t\t{ \t\t\tdelete this; \t\t} \t}  private: \tssl_socket socket_; \tenum { max_length = 1024 }; \tchar data_[max_length]; };  class server { public: \tserver(boost::asio::io_service& io_service, unsigned short port) \t\t: io_service_(io_service), \t\tacceptor_(io_service, \t\tboost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), \t\tcontext_(boost::asio::ssl::context::sslv23) \t{ \t\tcontext_.set_options( \t\t\tboost::asio::ssl::context::default_workarounds \t\t\t| boost::asio::ssl::context::no_sslv2 \t\t\t| boost::asio::ssl::context::single_dh_use); \t\tcontext_.set_password_callback(boost::bind(&server::get_password, this)); \t\tcontext_.use_certificate_chain_file(&quot;user.crt&quot;); \t\tcontext_.use_private_key_file(&quot;user.key&quot;, boost::asio::ssl::context::pem); \t\tcontext_.use_tmp_dh_file(&quot;dh2048.pem&quot;);  \t\tstart_accept(); \t}  \tstd::string get_password() const \t{ \t\treturn &quot;&quot;; \t}  \tvoid start_accept() \t{ \t\tsession* new_session = new session(io_service_, context_); \t\tacceptor_.async_accept(new_session-&gt;socket(), \t\t\t\t\tboost::bind(&server::handle_accept, this, new_session, \t\t\t\t\tboost::asio::placeholders::error)); \t}  \tvoid handle_accept(session* new_session, \t\tconst boost::system::error_code& error) \t{ \t\tif (!error) \t\t{ \t\t\tnew_session-&gt;start(); \t\t} \t\telse \t\t{ \t\t\tdelete new_session; \t\t}  \t\tstart_accept(); \t}  private: \tboost::asio::io_service& io_service_; \tboost::asio::ip::tcp::acceptor acceptor_; \tboost::asio::ssl::context context_; };   int main(int argc, char* argv[]) {    \ttry \t{ \t\tif (argc != 2) \t\t{ \t\t\tstd::cerr &lt;&lt; &quot;Usage: server &lt;port&gt;\\n&quot;; \t\t\treturn 1; \t\t}   \t\tboost::asio::io_service io_service;  \t\tusing namespace std; \/\/ For atoi. \t\tserver s(io_service, atoi(argv[1]));  \t\tio_service.run(); \t} \tcatch (std::exception& e) \t{ \t\tstd::cerr &lt;&lt; &quot;Exception: &quot; &lt;&lt; e.what() &lt;&lt; &quot;\\n&quot;; \t}   \treturn 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0438\u0435\u043d\u0442\u0430:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">client.cpp<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;cstdlib&gt; #include &lt;iostream&gt;  #include &lt;boost\/bind.hpp&gt; #include &lt;boost\/asio.hpp&gt;  #define SSL_R_SHORT_READ 219 #include &quot;ssl\/ssl_locl.h&quot; #include &lt;boost\/asio\/ssl.hpp&gt;   enum { max_length = 1024 };  class client { public: \tclient(boost::asio::io_service& io_service, \t\t\tboost::asio::ssl::context& context, \t\t\tboost::asio::ip::tcp::resolver::iterator endpoint_iterator) \t\t: socket_(io_service, context) \t{ \t\tsocket_.set_verify_mode(boost::asio::ssl::verify_peer); \t\tsocket_.set_verify_callback( \t\t\tboost::bind(&client::verify_certificate, this, _1, _2));  \t\tboost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator, \t\t\tboost::bind(&client::handle_connect, this, \t\t\tboost::asio::placeholders::error)); \t}  \tbool verify_certificate(bool preverified, \t\tboost::asio::ssl::verify_context& ctx) \t{ \t\t\/\/ The verify callback can be used to check whether the certificate that is \t\t\/\/ being presented is valid for the peer. For example, RFC 2818 describes \t\t\/\/ the steps involved in doing this for HTTPS. Consult the OpenSSL \t\t\/\/ documentation for more details. Note that the callback is called once \t\t\/\/ for each certificate in the certificate chain, starting from the root \t\t\/\/ certificate authority.  \t\t\/\/ In this example we will simply print the certificate's subject name. \t\tchar subject_name[256]; \t\tX509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle()); \t\tX509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256); \t\tstd::cout &lt;&lt; &quot;Verifying &quot; &lt;&lt; subject_name &lt;&lt; &quot;\\n&quot;;  \t\treturn preverified; \t}  \tvoid handle_connect(const boost::system::error_code& error) \t{ \t\tif (!error) \t\t{ \t\t\tsocket_.async_handshake(boost::asio::ssl::stream_base::client, \t\t\t\tboost::bind(&client::handle_handshake, this, \t\t\t\tboost::asio::placeholders::error)); \t\t} \t\telse \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Connect failed: &quot; &lt;&lt; error.message() &lt;&lt; &quot;\\n&quot;; \t\t} \t}  \tvoid handle_handshake(const boost::system::error_code& error) \t{ \t\tif (!error) \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Enter message: &quot;; \t\t\tstd::cin.getline(request_, max_length); \t\t\tsize_t request_length = strlen(request_);  \t\t\tboost::asio::async_write(socket_, \t\t\t\tboost::asio::buffer(request_, request_length), \t\t\t\tboost::bind(&client::handle_write, this, \t\t\t\tboost::asio::placeholders::error, \t\t\t\tboost::asio::placeholders::bytes_transferred)); \t\t} \t\telse \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Handshake failed: &quot; &lt;&lt; error.message() &lt;&lt; &quot;\\n&quot;; \t\t} \t}  \tvoid handle_write(const boost::system::error_code& error, \t\tsize_t bytes_transferred) \t{ \t\tif (!error) \t\t{ \t\t\tboost::asio::async_read(socket_, \t\t\t\tboost::asio::buffer(reply_, bytes_transferred), \t\t\t\tboost::bind(&client::handle_read, this, \t\t\t\tboost::asio::placeholders::error, \t\t\t\tboost::asio::placeholders::bytes_transferred)); \t\t} \t\telse \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Write failed: &quot; &lt;&lt; error.message() &lt;&lt; &quot;\\n&quot;; \t\t} \t}  \tvoid handle_read(const boost::system::error_code& error, \t\tsize_t bytes_transferred) \t{ \t\tif (!error) \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Reply: &quot;; \t\t\tstd::cout.write(reply_, bytes_transferred); \t\t\tstd::cout &lt;&lt; &quot;\\n&quot;; \t\t} \t\telse \t\t{ \t\t\tstd::cout &lt;&lt; &quot;Read failed: &quot; &lt;&lt; error.message() &lt;&lt; &quot;\\n&quot;; \t\t} \t}  private: \tboost::asio::ssl::stream&lt;boost::asio::ip::tcp::socket&gt; socket_; \tchar request_[max_length]; \tchar reply_[max_length]; };  int main(int argc, char* argv[]) { \ttry \t{ \t\tif (argc != 3) \t\t{ \t\t\tstd::cerr &lt;&lt; &quot;Usage: client &lt;host&gt; &lt;port&gt;\\n&quot;; \t\t\treturn 1; \t\t}   \t\tboost::asio::io_service io_service;  \t\tboost::asio::ip::tcp::resolver resolver(io_service); \t\tboost::asio::ip::tcp::resolver::query query(argv[1], argv[2]); \t\tboost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);  \t\tboost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23); \t\tctx.load_verify_file(&quot;rootca.crt&quot;);    \t\tclient c(io_service, ctx, iterator);  \t\tio_service.run(); \t} \tcatch (std::exception& e) \t{ \t\tstd::cerr &lt;&lt; &quot;Exception: &quot; &lt;&lt; e.what() &lt;&lt; &quot;\\n&quot;; \t}  \treturn 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h4><b>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432<\/b><\/h4>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 C:\\Work\\OpenSSL\\output\\bin \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c openssl.exe, \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430:<\/p>\n<pre><code class=\"dos\">openssl genrsa -out rootca.key 2048 <\/code><\/pre>\n<p>  \u041f\u043e\u0442\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442, \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 20000 \u0434\u043d\u0435\u0439:<\/p>\n<pre><code class=\"dos\">openssl req -x509 -new -nodes -key rootca.key -days 20000 -out rootca.crt <\/code><\/pre>\n<p>  \u0412 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432\u0430\u0441 \u043f\u043e\u043f\u0440\u043e\u0441\u044f\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u0434\u0432\u0443\u0445\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b, \u043f\u0440\u043e\u0432\u0438\u043d\u0446\u0438\u044e, \u0433\u043e\u0440\u043e\u0434, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435, Common Name \u0438 e-mail \u0430\u0434\u0440\u0435\u0441. \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u043d\u0430 \u0441\u0432\u043e\u0435 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043a\u043b\u044e\u0447:<\/p>\n<pre><code class=\"dos\">openssl genrsa -out user.key 2048 <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"dos\">openssl req -new -key user.key -out user.csr <\/code><\/pre>\n<p>  \u0412 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0442\u0435 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430. \u041d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438 Common Name \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0441\u044f \u043e\u0442 Common Name \u0443 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e!<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c:<\/p>\n<pre><code class=\"dos\">openssl x509 -req -in user.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out user.crt -days 20000 <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"dos\">openssl verify -CAfile rootca.crt rootca.crt openssl verify -CAfile rootca.crt user.crt openssl verify -CAfile user.crt user.crt <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c OK, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u2014 \u0441\u0430\u043c\u043e\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439.<br \/>  \u0412\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u041e\u041a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e user.crt \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c.<br \/>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e user.crt \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 OK, \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c Common Name \u0443 \u043e\u0431\u043e\u0438\u0445 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0441\u044f.<\/p>\n<p>  \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f DH-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0\">\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0414\u0438\u0444\u0444\u0438 \u2014 \u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430<\/a>, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0439\u043c\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<pre><code class=\"dos\">openssl dhparam -out dh2048.pem 2048 <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043f\u0443\u0442\u0438 \u043a \u044d\u0442\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c, \u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/271203\/\"> http:\/\/habrahabr.ru\/post\/271203\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<br \/>\n<h4><b>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/b><\/h4>\n<p>  \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u043c\u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u043e\u0438\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u042f \u043f\u043e\u043c\u043d\u0438\u043b, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a Boost Asio \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f OpenSSL. \u042f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043d\u043e, \u0443\u0432\u044b, \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043d\u0430\u0448\u0435\u043b, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434 Windows. \u0422\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u044d\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u044e\u0434\u044f\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-268500","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/268500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=268500"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/268500\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=268500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=268500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=268500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}