acl  3.5.3.0
polarssl_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  POLARSSL_VERIFY_NONE, // 不校验证书
16  POLARSSL_VERIFY_OPT, // 选择性校验,可以在握手时或握手后校验
17  POLARSSL_VERIFY_REQ // 要求在握手时校验
19 
20 class polarssl_io;
21 
22 /**
23  * SSL 连接对象的配置类,该类对象一般可以声明为全局对象,用来对每一个 SSL
24  * 连接对象进行证书配置;该类加载了全局性的证书、密钥等信息;每一个 SSL 对象
25  * (polarssl_io) 调用本对象的setup_certs 方法来初始化自身的证书、密钥等信息
26  */
28 {
29 public:
30  /**
31  * 构造函数
32  * @param server_side {bool} 用来指定是服务端还是客户端,当为 true 时
33  * 为服务端模式,否则为客户端模式
34  * @param verify_mode {polarssl_verify_t} SSL 证书校验级别
35  */
36  polarssl_conf(bool server_side = false,
38  virtual ~polarssl_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 add_cert(const char* crt_file);
49 
50  /**
51  * @override
52  */
53  bool set_key(const char* key_file, const char* key_pass = NULL);
54 
55  /**
56  * @override
57  */
58  void enable_cache(bool on);
59 
60 public:
61  /**
62  * 设置 SSL 证书校验方式,内部缺省为不校验证书
63  * @param verify_mode {polarssl_verify_t}
64  */
65  void set_authmode(polarssl_verify_t verify_mode);
66 
67  /**
68  * 获得随机数生成器的熵对象
69  * @return {void*},返回值为 entropy_context 类型
70  */
71  void* get_entropy(void)
72  {
73  return entropy_;
74  }
75 
76  /**
77  * stream_hook::open 内部会调用本方法用来安装当前 SSL 连接对象的证书
78  * @param ssl {void*} SSL 连接对象,为 ssl_context 类型
79  * @param server_side {bool} 是服务端还是客户端
80  * @return {bool} 配置 SSL 对象是否成功
81  */
82  bool setup_certs(void* ssl, bool server_side);
83 
84 public:
85  /**
86  * 必须首先调用此函数设置 libpolarssl.so 的全路径
87  * @param path {const char*} libpolarssl.so 的全路径
88  */
89  static void set_libpath(const char* path);
90 
91  /**
92  * 可以显式调用本方法,动态加载 polarssl 动态库
93  * @return {bool} 加载是否成功
94  */
95  static bool load(void);
96 
97 public:
98  // @override sslbase_conf
99  sslbase_io* create(bool nblock);
100 
101 private:
102  friend class polarssl_io;
103 
104  bool has_inited_;
105  thread_mutex lock_;
106 
107  bool server_side_;
108  void* entropy_;
109  void* cacert_;
110  void* pkey_;
111  void* cert_chain_;
112  void* cache_;
113  polarssl_verify_t verify_mode_;
114 
115 private:
116  void init_once(void);
117  void free_ca(void);
118 };
119 
120 } // namespace acl
void * get_entropy(void)
polarssl_verify_t
#define ACL_CPP_API