{"id":458,"date":"2022-09-13T09:40:10","date_gmt":"2022-09-13T00:40:10","guid":{"rendered":"https:\/\/www.b64.pw\/blog\/?p=458"},"modified":"2022-09-13T09:40:11","modified_gmt":"2022-09-13T00:40:11","slug":"c%e3%81%a7https%e3%82%b5%e3%83%bc%e3%83%90%e3%82%92%e7%ab%8b%e3%81%a6%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.b64.pw\/blog\/?p=458","title":{"rendered":"C++\u3067HTTPS\u30b5\u30fc\u30d0\u3092\u7acb\u3066\u308b"},"content":{"rendered":"\n<p>\u300cC++\u3067HTTPS\u30b5\u30fc\u30d0\u3092\u7acb\u3066\u308b\u306e\u3063\u3066\u3069\u3046\u3084\u308b\u3093\u3060\u308d\u3046\u300d\u3068\u601d\u3063\u3066\u3057\u3089\u3079\u3066\u307f\u305f\u3002<br>\u5177\u4f53\u7684\u306b\u306f<a href=\"https:\/\/github.com\/yhirose\/cpp-httplib\" target=\"_blank\" rel=\"noreferrer noopener\">cpp-htttplib<\/a>\u3092\u4f7f\u7528\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u307e\u305acpp-httplib\u3092clone\u3057\u3066\u304f\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>git clone https:\/\/github.com\/yhirose\/cpp-httplib.git<\/code><\/pre><\/div>\n\n\n\n<p>\u540c\u3058\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3066\u81ea\u5df1\u8a3c\u660e\u306e\u8a3c\u660e\u66f8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u308b(<a href=\"https:\/\/weblabo.oscasierra.net\/openssl-gencert-1\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u53c2\u8003<\/a>)<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>  openssl genrsa 2048 &gt; server.key\n  openssl req -new -key server.key &gt; server.csr\n  openssl x509 -days 3650 -req -sha256 -signkey server.key &lt; server.csr &gt; server.crt\n  openssl x509 -text &lt; server.crt # \u751f\u6210\u3057\u305f\u8a3c\u660e\u66f8\u306e\u78ba\u8a8d<\/code><\/pre><\/div>\n\n\n\n<p>main.cpp\u3092\u540c\u3058\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4f5c\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-cpp\" data-file=\"main.cpp\" data-lang=\"C++\"><code>#define CPPHTTPLIB_OPENSSL_SUPPORT\n#include &quot;httplib.h&quot;\n\nint main(void)\n{\n  using namespace httplib;\n\n SSLServer svr(&quot;.\/server.crt&quot;, &quot;.\/server.key&quot;);\n\n  svr.Get(&quot;\/hi&quot;, [](const Request& req, Response& res) {\n    res.set_content(&quot;Hello World!&quot;, &quot;text\/plain&quot;);\n  });\n\n  svr.Get(R&quot;(\/numbers\/(\\d+))&quot;, [&](const Request& req, Response& res) {\n    auto numbers = req.matches[1];\n    res.set_content(numbers, &quot;text\/plain&quot;);\n  });\n\n  svr.Get(&quot;\/body-header-param&quot;, [](const Request& req, Response& res) {\n    if (req.has_header(&quot;Content-Length&quot;)) {\n      auto val = req.get_header_value(&quot;Content-Length&quot;);\n    }\n    if (req.has_param(&quot;key&quot;)) {\n      auto val = req.get_param_value(&quot;key&quot;);\n    }\n    res.set_content(req.body, &quot;text\/plain&quot;);\n  });\n\n  svr.Get(&quot;\/stop&quot;, [&](const Request& req, Response& res) {\n    svr.stop();\n  });\n\n  svr.listen(&quot;localhost&quot;, 1234);\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u30d3\u30eb\u30c9\u3059\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>g++ -pthread main.cpp httplib.h -lssl -lcrypto<\/code><\/pre><\/div>\n\n\n\n<p>-lssl -lcrypto\u3092\u5fd8\u308c\u308b\u3068\u6b21\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3057\u307e\u3046<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>undefined reference to `SSL_shutdown&#39;<\/code><\/pre><\/div>\n\n\n\n<p>\u52d5\u4f5c\u30c1\u30a7\u30c3\u30af<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>$ ab -n 10000 -c 6 https:\/\/localhost:1234\/hi\nThis is ApacheBench, Version 2.3 &lt;$Revision: 1879490 $&gt;\nCopyright 1996 Adam Twiss, Zeus Technology Ltd, http:\/\/www.zeustech.net\/\nLicensed to The Apache Software Foundation, http:\/\/www.apache.org\/\n\nBenchmarking localhost (be patient)\nCompleted 1000 requests\nCompleted 2000 requests\nCompleted 3000 requests\nCompleted 4000 requests\nCompleted 5000 requests\nCompleted 6000 requests\nCompleted 7000 requests\nCompleted 8000 requests\nCompleted 9000 requests\nCompleted 10000 requests\nFinished 10000 requests\n\n\nServer Software:\nServer Hostname:        localhost\nServer Port:            1234\nSSL\/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256\nServer Temp Key:        X25519 253 bits\nTLS Server Name:        localhost\n\nDocument Path:          \/hi\nDocument Length:        12 bytes\n\nConcurrency Level:      6\nTime taken for tests:   14.775 seconds\nComplete requests:      10000\nFailed requests:        0\nTotal transferred:      1070000 bytes\nHTML transferred:       120000 bytes\nRequests per second:    676.80 [#\/sec] (mean)\nTime per request:       8.865 [ms] (mean)\nTime per request:       1.478 [ms] (mean, across all concurrent requests)\nTransfer rate:          70.72 [Kbytes\/sec] received\n\nConnection Times (ms)\n              min  mean[+\/-sd] median   max\nConnect:        2    7   1.5      7      32\nProcessing:     0    2   1.2      2      26\nWaiting:        0    1   0.8      1      17\nTotal:          3    9   1.6      8      33\n\nPercentage of the requests served within a certain time (ms)\n  50%      8\n  66%      9\n  75%      9\n  80%      9\n  90%     10\n  95%     11\n  98%     13\n  99%     14\n 100%     33 (longest request)<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u300cC++\u3067HTTPS\u30b5\u30fc\u30d0\u3092\u7acb\u3066\u308b\u306e\u3063\u3066\u3069\u3046\u3084\u308b\u3093\u3060\u308d\u3046\u300d\u3068 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[38],"tags":[],"_links":{"self":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/458"}],"collection":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=458"}],"version-history":[{"count":1,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":459,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=\/wp\/v2\/posts\/458\/revisions\/459"}],"wp:attachment":[{"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.b64.pw\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}