mirror of
https://github.com/alirezarezvani/claude-skills.git
synced 2026-10-11 03:37:58 +00:00
39 lines
1.2 KiB
Markdown
39 lines
1.2 KiB
Markdown
# SSL/TLS
|
|
|
|
Applies to every style — `ssl::stream<>` is a library feature, not a language one.
|
|
|
|
|
|
```cpp
|
|
#include <boost/asio.hpp>
|
|
#include <boost/asio/ssl.hpp>
|
|
|
|
namespace asio = boost::asio;
|
|
namespace ssl = asio::ssl;
|
|
using tcp = asio::ip::tcp;
|
|
|
|
asio::awaitable<void> tls_client(asio::io_context& io) {
|
|
ssl::context ctx(ssl::context::tlsv13_client);
|
|
ctx.set_default_verify_paths();
|
|
|
|
ssl::stream<tcp::socket> stream(io, ctx);
|
|
|
|
// Connect underlying TCP socket
|
|
auto& sock = stream.lowest_layer();
|
|
co_await sock.async_connect(endpoint);
|
|
|
|
// Set SNI hostname (required for most servers)
|
|
SSL_set_tlsext_host_name(stream.native_handle(), "example.com");
|
|
stream.set_verify_mode(ssl::verify_peer);
|
|
stream.set_verify_callback(ssl::host_name_verification("example.com"));
|
|
|
|
// TLS handshake
|
|
co_await stream.async_handshake(ssl::stream_base::client);
|
|
|
|
// Read/write as normal stream
|
|
co_await async_write(stream, asio::buffer(request));
|
|
co_await async_read_until(stream, response_buf, "\r\n");
|
|
}
|
|
```
|
|
|
|
**Critical:** SSL streams require strand-based synchronization for all async operations — no concurrent reads/writes without a strand.
|
|
|