acl  3.5.3.0
mbedtls_conf.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/thread_mutex.hpp"
4 #include "sslbase_conf.hpp"
5 #include <vector>
6 
7 namespace acl
8 {
9 
10 /**
11  * SSL 证书校验级别类型定义
12  */
13 typedef enum
14 {
15  MBEDTLS_VERIFY_NONE, // 不校验证书
16  MBEDTLS_VERIFY_OPT, // 选择性校验,可以在握手时或握手后校验
17  MBEDTLS_VERIFY_REQ // 要求在握手时校验
19 
20 class mbedtls_io;
21 
22 /**
23  * SSL 连接对象的配置类,该类对象一般可以声明为全局对象,用来对每一个 SSL
24  * 连接对象进行证书配置;该类加载了全局性的证书、密钥等信息;每一个 SSL 对象
25  * (mbedtls_io) 调用本对象的setup_certs 方法来初始化自身的证书、密钥等信息
26  */
28 {
29 public:
30  /**
31  * 构造函数
32  * @param server_side {bool} 用来指定是服务端还是客户端,当为 true 时
33  * 为服务端模式,否则为客户端模式
34  * @param verify_mode {mbedtls_verify_t} SSL 证书校验级别
35  */
36  mbedtls_conf(bool server_side = false,
38  ~mbedtls_conf(void);
39 
40  /**
41  * @override
42  */
43  bool load_ca(const char* ca_file, const char* ca_path);
44 
45  /**
46  * @override
47  */
48  bool append_key_cert(const char* crt_file, const char* key_file,
49  const char* key_pass = NULL);
50 
51  /**
52  * @override
53  */
54  bool add_cert(const char* crt_file);
55 
56  /**
57  * @override
58  */
59  bool set_key(const char* key_file, const char* key_pass = NULL);
60 
61  /**
62  * @override
63  */
64  void enable_cache(bool on);
65 
66 public:
67  /**
68  * mbedtls_io::open 内部会调用本方法用来安装当前 SSL 连接对象的证书
69  * @param ssl {void*} SSL 连接对象,为 ssl_context 类型
70  * @return {bool} 配置 SSL 对象是否成功
71  */
72  bool setup_certs(void* ssl);
73 
74  /**
75  * 获得随机数生成器的熵对象
76  * @return {void*},返回值为 entropy_context 类型
77  */
78  void* get_entropy(void)
79  {
80  return entropy_;
81  }
82 
83 public:
84  /**
85  * 如果 mbedtls 分成三个库,可以调用本函数设置三个动态库的全路径
86  * @param libmbedcrypto {const char*} libmbedcrypto 动态库的全路径
87  * @param libmbedx509 {const char*} libmbedx509 动态库的全路径
88  * @param libmbedtls {const char*} libmbedtls 动态库的全路径
89  */
90  static void set_libpath(const char* libmbedcrypto,
91  const char* libmbedx509, const char* libmbedtls);
92 
93  /**
94  * 如果 mbedtls 合成一个库,可以调用本函数设置一个动态库的全路径
95  * @param libmbedtls {const char*} libmbedtls 动态库的全路径
96  */
97  static void set_libpath(const char* libmbedtls);
98 
99  /**
100  * 显式调用本方法,动态加载 mbedtls 动态库
101  * @return {bool} 加载是否成功
102  */
103  static bool load(void);
104 
105 public:
106  // @override sslbase_conf
107  sslbase_io* create(bool nblock);
108 
109 private:
110  friend class mbedtls_io;
111 
112  unsigned init_status_;
113  unsigned cert_status_;
114  thread_mutex lock_;
115 
116  bool server_side_;
117 
118  void* conf_;
119  void* entropy_;
120  void* rnd_;
121  void* cacert_;
122  void* pkey_;
123  void* cert_chain_;
124  void* cache_;
125  mbedtls_verify_t verify_mode_;
126  std::vector<std::pair<void*, void*> > cert_keys_;
127 
128 private:
129  bool init_once(void);
130  bool init_rand(void);
131  void free_ca(void);
132 };
133 
134 } // namespace acl
void * get_entropy(void)
#define ACL_CPP_API
mbedtls_verify_t