NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ssl_context.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_SSL_SSL_CONTEXT_HPP__
2#define NEFORCE_NETWORK_SSL_SSL_CONTEXT_HPP__
3
11
14#include "NeForce/network/ssl/ssl_exception.hpp"
15#include <openssl/ssl.h>
16NEFORCE_BEGIN_NAMESPACE__
17
23
36
54class NEFORCE_API ssl_context {
55private:
56 struct ctx_deleter {
57 void operator()(::SSL_CTX* ctx) const noexcept {
58 if (ctx != nullptr) {
59 ::SSL_CTX_free(ctx);
60 }
61 }
62 };
63
65 ssl_method method_;
66 bool cert_loaded_{false};
67
68 ssl_context(ssl_method method, ssl_context* /*tag*/) :
69 method_(method) {}
70
71public:
83
84 ~ssl_context() = default;
85
86 ssl_context(const ssl_context&) = delete;
87 ssl_context& operator=(const ssl_context&) = delete;
88
89 ssl_context(ssl_context&& other) noexcept = default;
90 ssl_context& operator=(ssl_context&& other) noexcept = default;
91
98 NEFORCE_NODISCARD ssl_context clone() const;
99
105 NEFORCE_NODISCARD shared_ptr<ssl_context> clone_shared() const;
106
116 bool load_certificate(const string& cert_file, const string& key_file);
117
127 void load_certificate_from_memory(const string& cert_pem, const string& key_pem);
128
138 bool load_verify_locations(const string& ca_file, const string& ca_path = "");
139
147 void set_options(long options);
148
160 void set_verify_mode(int mode);
161
169
178 void set_cipher_list(const string& ciphers);
179
188 void set_ciphersuites(const string& ciphersuites);
189
202
212
221
231 void set_alpn_protos(const vector<string>& protocols);
232
237 NEFORCE_NODISCARD ::SSL_CTX* native_handle() const noexcept { return ctx_.get(); }
238
243 explicit operator bool() const noexcept { return ctx_ != nullptr; }
244
249 NEFORCE_NODISCARD bool is_valid() const noexcept { return ctx_ != nullptr; }
250
255 NEFORCE_NODISCARD bool has_certificate() const noexcept { return cert_loaded_; }
256};
257 // SSL/TLS
259
260NEFORCE_END_NAMESPACE__
261#endif // NEFORCE_NETWORK_SSL_SSL_CONTEXT_HPP__
共享智能指针类模板
bool has_certificate() const noexcept
检查是否已加载证书
::SSL_CTX * native_handle() const noexcept
获取原生SSL_CTX句柄
ssl_context clone() const
克隆当前SSL上下文
bool load_certificate(const string &cert_file, const string &key_file)
加载证书和私钥(从文件)
void set_session_cache_size(long size)
设置会话缓存大小
void set_cipher_list(const string &ciphers)
设置密码套件列表(TLS 1.2及以下)
bool is_valid() const noexcept
检查上下文是否有效
shared_ptr< ssl_context > clone_shared() const
克隆为共享指针
ssl_context(ssl_method method=ssl_method::TLS_SERVER)
构造函数
void set_options(long options)
设置SSL选项
void set_timeout(long seconds)
设置会话超时时间
void require_client_certificate()
要求客户端提供证书
void set_alpn_protos(const vector< string > &protocols)
设置ALPN协议列表
void set_default_options()
设置安全的默认选项
void load_certificate_from_memory(const string &cert_pem, const string &key_pem)
加载证书和私钥(从内存)
void set_ciphersuites(const string &ciphersuites)
设置密码套件列表(TLS 1.3)
bool load_verify_locations(const string &ca_file, const string &ca_path="")
加载CA证书用于验证
void set_verify_mode(int mode)
设置验证模式
独占智能指针
动态大小数组容器
duration< int64_t > seconds
秒持续时间
ssl_method
SSL/TLS方法类型
@ TLS_SERVER
TLS服务器端
@ TLS_CLIENT_DTLS
DTLS客户端端(数据报TLS)
@ TLS_CLIENT
TLS客户端端
@ TLS_SERVER_DTLS
DTLS服务器端(数据报TLS)
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
共享智能指针实现
动态大小数组容器