mirror of
				https://github.com/3proxy/3proxy.git
				synced 2025-11-04 07:42:39 +08:00 
			
		
		
		
	ssl_server_verify, ssl_server_ca_dir, ssl_server_ca_store added, ssl_server / ssl_client aliases added to ssl_serv / ssl_cli
This commit is contained in:
		
							parent
							
								
									6355f9659b
								
							
						
					
					
						commit
						43d48adeb9
					
				@ -45,6 +45,11 @@ static char hexMap[] = {
 | 
				
			|||||||
static BIO *bio_err=NULL;
 | 
					static BIO *bio_err=NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char * getSSLErr(){
 | 
				
			||||||
 | 
					    return ERR_error_string(ERR_get_error(), errbuf);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static size_t bin2hex (const unsigned char* bin, size_t bin_length, char* str, size_t str_length) 
 | 
					static size_t bin2hex (const unsigned char* bin, size_t bin_length, char* str, size_t str_length) 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char *p;
 | 
						char *p;
 | 
				
			||||||
@ -218,13 +223,13 @@ SSL_CONN ssl_handshake_to_server(SOCKET s, char * hostname, SSL_CONFIG *config,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if(!SSL_set_fd(conn->ssl, s)){
 | 
						if(!SSL_set_fd(conn->ssl, s)){
 | 
				
			||||||
		ssl_conn_free(conn);
 | 
							ssl_conn_free(conn);
 | 
				
			||||||
		*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
							*errSSL = getSSLErr();
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if(hostname && *hostname)SSL_set_tlsext_host_name(conn->ssl, hostname);
 | 
						if(hostname && *hostname)SSL_set_tlsext_host_name(conn->ssl, hostname);
 | 
				
			||||||
	err = SSL_connect(conn->ssl);
 | 
						err = SSL_connect(conn->ssl);
 | 
				
			||||||
	if ( err == -1 ) {
 | 
						if ( err == -1 ) {
 | 
				
			||||||
		*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
							*errSSL = getSSLErr();
 | 
				
			||||||
		ssl_conn_free(conn);
 | 
							ssl_conn_free(conn);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -250,42 +255,6 @@ SSL_CONN ssl_handshake_to_server(SOCKET s, char * hostname, SSL_CONFIG *config,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SSL_CTX * ssl_cli_ctx(SSL_CONFIG *config, X509 *server_cert, EVP_PKEY *server_key, char** errSSL){
 | 
					 | 
				
			||||||
    SSL_CTX *ctx;
 | 
					 | 
				
			||||||
    int err = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
 | 
					 | 
				
			||||||
    ctx = SSL_CTX_new(SSLv23_server_method());
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    ctx = SSL_CTX_new(TLS_server_method());
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!ctx) {
 | 
					 | 
				
			||||||
	*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    err = SSL_CTX_use_certificate(ctx, (X509 *) server_cert);
 | 
					 | 
				
			||||||
    if ( err <= 0 ) {
 | 
					 | 
				
			||||||
	*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
					 | 
				
			||||||
	SSL_CTX_free(ctx);
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    err = SSL_CTX_use_PrivateKey(ctx, server_key);
 | 
					 | 
				
			||||||
    if ( err <= 0 ) {
 | 
					 | 
				
			||||||
	*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
					 | 
				
			||||||
	SSL_CTX_free(ctx);
 | 
					 | 
				
			||||||
	return NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if(config->server_min_proto_version)SSL_CTX_set_min_proto_version(ctx, config->server_min_proto_version);
 | 
					 | 
				
			||||||
    if(config->server_max_proto_version)SSL_CTX_set_max_proto_version(ctx, config->server_max_proto_version);
 | 
					 | 
				
			||||||
    if(config->server_cipher_list)SSL_CTX_set_cipher_list(ctx, config->server_cipher_list);
 | 
					 | 
				
			||||||
    if(config->server_ciphersuites)SSL_CTX_set_ciphersuites(ctx, config->server_ciphersuites);
 | 
					 | 
				
			||||||
    return ctx;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SSL_CONN ssl_handshake_to_client(SOCKET s, SSL_CONFIG *config, X509 *server_cert, EVP_PKEY *server_key, char** errSSL){
 | 
					SSL_CONN ssl_handshake_to_client(SOCKET s, SSL_CONFIG *config, X509 *server_cert, EVP_PKEY *server_key, char** errSSL){
 | 
				
			||||||
	int err = 0;
 | 
						int err = 0;
 | 
				
			||||||
	X509 *cert;
 | 
						X509 *cert;
 | 
				
			||||||
@ -320,7 +289,7 @@ SSL_CONN ssl_handshake_to_client(SOCKET s, SSL_CONFIG *config, X509 *server_cert
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	conn->ssl = SSL_new(config->cli_ctx?config->cli_ctx : conn->ctx);
 | 
						conn->ssl = SSL_new(config->cli_ctx?config->cli_ctx : conn->ctx);
 | 
				
			||||||
	if ( conn->ssl == NULL ) {
 | 
						if ( conn->ssl == NULL ) {
 | 
				
			||||||
		*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
							*errSSL = getSSLErr();
 | 
				
			||||||
		if(conn->ctx)SSL_CTX_free(conn->ctx);
 | 
							if(conn->ctx)SSL_CTX_free(conn->ctx);
 | 
				
			||||||
		free(conn);
 | 
							free(conn);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
@ -329,7 +298,7 @@ SSL_CONN ssl_handshake_to_client(SOCKET s, SSL_CONFIG *config, X509 *server_cert
 | 
				
			|||||||
	SSL_set_fd(conn->ssl, s);
 | 
						SSL_set_fd(conn->ssl, s);
 | 
				
			||||||
	err = SSL_accept(conn->ssl);
 | 
						err = SSL_accept(conn->ssl);
 | 
				
			||||||
	if ( err <= 0 ) {
 | 
						if ( err <= 0 ) {
 | 
				
			||||||
		*errSSL = ERR_error_string(ERR_get_error(), errbuf);
 | 
							*errSSL = getSSLErr();
 | 
				
			||||||
		ssl_conn_free(conn);
 | 
							ssl_conn_free(conn);
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,10 +11,6 @@ typedef void *SSL_CONN;
 | 
				
			|||||||
typedef void *SSL_CERT;
 | 
					typedef void *SSL_CERT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ssl_config {
 | 
					struct ssl_config {
 | 
				
			||||||
    int mitm;
 | 
					 | 
				
			||||||
    int serv;
 | 
					 | 
				
			||||||
    int cli;
 | 
					 | 
				
			||||||
    char *certcache;
 | 
					 | 
				
			||||||
    X509 *CA_cert;
 | 
					    X509 *CA_cert;
 | 
				
			||||||
    X509 *server_cert;
 | 
					    X509 *server_cert;
 | 
				
			||||||
    X509 *client_cert;
 | 
					    X509 *client_cert;
 | 
				
			||||||
@ -23,11 +19,7 @@ struct ssl_config {
 | 
				
			|||||||
    EVP_PKEY *client_key;
 | 
					    EVP_PKEY *client_key;
 | 
				
			||||||
    SSL_CTX *cli_ctx;
 | 
					    SSL_CTX *cli_ctx;
 | 
				
			||||||
    SSL_CTX *srv_ctx;
 | 
					    SSL_CTX *srv_ctx;
 | 
				
			||||||
    int client_min_proto_version;
 | 
					    char *certcache;
 | 
				
			||||||
    int client_max_proto_version;
 | 
					 | 
				
			||||||
    int server_min_proto_version;
 | 
					 | 
				
			||||||
    int server_max_proto_version;
 | 
					 | 
				
			||||||
    int client_verify;
 | 
					 | 
				
			||||||
    char * client_ciphersuites;
 | 
					    char * client_ciphersuites;
 | 
				
			||||||
    char * server_ciphersuites;
 | 
					    char * server_ciphersuites;
 | 
				
			||||||
    char * client_cipher_list;
 | 
					    char * client_cipher_list;
 | 
				
			||||||
@ -35,6 +27,18 @@ struct ssl_config {
 | 
				
			|||||||
    char * client_ca_file;
 | 
					    char * client_ca_file;
 | 
				
			||||||
    char * client_ca_dir;
 | 
					    char * client_ca_dir;
 | 
				
			||||||
    char * client_ca_store;
 | 
					    char * client_ca_store;
 | 
				
			||||||
 | 
					    char * server_ca_file;
 | 
				
			||||||
 | 
					    char * server_ca_dir;
 | 
				
			||||||
 | 
					    char * server_ca_store;
 | 
				
			||||||
 | 
					    int mitm;
 | 
				
			||||||
 | 
					    int serv;
 | 
				
			||||||
 | 
					    int cli;
 | 
				
			||||||
 | 
					    int client_min_proto_version;
 | 
				
			||||||
 | 
					    int client_max_proto_version;
 | 
				
			||||||
 | 
					    int server_min_proto_version;
 | 
				
			||||||
 | 
					    int server_max_proto_version;
 | 
				
			||||||
 | 
					    int client_verify;
 | 
				
			||||||
 | 
					    int server_verify;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct ssl_config SSL_CONFIG;
 | 
					typedef struct ssl_config SSL_CONFIG;
 | 
				
			||||||
@ -69,6 +73,7 @@ void _ssl_cert_free(SSL_CERT cert);
 | 
				
			|||||||
// Global (de)initialization
 | 
					// Global (de)initialization
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
void ssl_init(void);
 | 
					void ssl_init(void);
 | 
				
			||||||
 | 
					char * getSSLErr(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // __my_ssl_h__
 | 
					#endif // __my_ssl_h__
 | 
				
			||||||
@ -38,6 +38,8 @@ char *srvkey = NULL;
 | 
				
			|||||||
char *clicert = NULL;
 | 
					char *clicert = NULL;
 | 
				
			||||||
char *clikey = NULL;
 | 
					char *clikey = NULL;
 | 
				
			||||||
char *server_ca_file = NULL;
 | 
					char *server_ca_file = NULL;
 | 
				
			||||||
 | 
					char *server_ca_dir = NULL;
 | 
				
			||||||
 | 
					char *server_ca_store = NULL;
 | 
				
			||||||
char *server_ca_key = NULL;
 | 
					char *server_ca_key = NULL;
 | 
				
			||||||
char *client_ca_file = NULL;
 | 
					char *client_ca_file = NULL;
 | 
				
			||||||
char *client_ca_dir = NULL;
 | 
					char *client_ca_dir = NULL;
 | 
				
			||||||
@ -51,6 +53,7 @@ int client_max_proto_version = 0;
 | 
				
			|||||||
int server_min_proto_version = 0;
 | 
					int server_min_proto_version = 0;
 | 
				
			||||||
int server_max_proto_version = 0;
 | 
					int server_max_proto_version = 0;
 | 
				
			||||||
int client_verify = 0;
 | 
					int client_verify = 0;
 | 
				
			||||||
 | 
					int server_verify = 0;
 | 
				
			||||||
char * client_ciphersuites = NULL;
 | 
					char * client_ciphersuites = NULL;
 | 
				
			||||||
char * server_ciphersuites = NULL;
 | 
					char * server_ciphersuites = NULL;
 | 
				
			||||||
char * client_cipher_list = NULL;
 | 
					char * client_cipher_list = NULL;
 | 
				
			||||||
@ -341,6 +344,59 @@ static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx){
 | 
				
			|||||||
    return preverify_ok;
 | 
					    return preverify_ok;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SSL_CTX * ssl_cli_ctx(SSL_CONFIG *config, X509 *server_cert, EVP_PKEY *server_key, char** errSSL){
 | 
				
			||||||
 | 
					    SSL_CTX *ctx;
 | 
				
			||||||
 | 
					    int err = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if OPENSSL_VERSION_NUMBER < 0x10100000L
 | 
				
			||||||
 | 
					    ctx = SSL_CTX_new(SSLv23_server_method());
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    ctx = SSL_CTX_new(TLS_server_method());
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!ctx) {
 | 
				
			||||||
 | 
						*errSSL = getSSLErr();
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    err = SSL_CTX_use_certificate(ctx, (X509 *) server_cert);
 | 
				
			||||||
 | 
					    if ( err <= 0 ) {
 | 
				
			||||||
 | 
						*errSSL = getSSLErr();
 | 
				
			||||||
 | 
						SSL_CTX_free(ctx);
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    err = SSL_CTX_use_PrivateKey(ctx, server_key);
 | 
				
			||||||
 | 
					    if ( err <= 0 ) {
 | 
				
			||||||
 | 
						*errSSL = getSSLErr();
 | 
				
			||||||
 | 
						SSL_CTX_free(ctx);
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(config->server_min_proto_version)SSL_CTX_set_min_proto_version(ctx, config->server_min_proto_version);
 | 
				
			||||||
 | 
					    if(config->server_max_proto_version)SSL_CTX_set_max_proto_version(ctx, config->server_max_proto_version);
 | 
				
			||||||
 | 
					    if(config->server_cipher_list)SSL_CTX_set_cipher_list(ctx, config->server_cipher_list);
 | 
				
			||||||
 | 
					    if(config->server_ciphersuites)SSL_CTX_set_ciphersuites(ctx, config->server_ciphersuites);
 | 
				
			||||||
 | 
					    if(config->server_verify){
 | 
				
			||||||
 | 
					fprintf(stderr, "server verify\n");
 | 
				
			||||||
 | 
					fflush(stderr);
 | 
				
			||||||
 | 
					                if(config->server_ca_file || config->server_ca_dir){
 | 
				
			||||||
 | 
					                    SSL_CTX_load_verify_locations(ctx, config->server_ca_file, config->server_ca_dir);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					#if OPENSSL_VERSION_NUMBER >= 0x30000000L
 | 
				
			||||||
 | 
					                else if(config->server_ca_store){
 | 
				
			||||||
 | 
					                    SSL_CTX_load_verify_store(ctx, config->server_ca_store);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					#endif          
 | 
				
			||||||
 | 
					                else 
 | 
				
			||||||
 | 
					                    SSL_CTX_set_default_verify_paths(ctx);
 | 
				
			||||||
 | 
					                SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT|SSL_VERIFY_CLIENT_ONCE, NULL);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return ctx;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void* ssl_filter_open(void * idata, struct srvparam * srv){
 | 
					static void* ssl_filter_open(void * idata, struct srvparam * srv){
 | 
				
			||||||
	char fname[256];
 | 
						char fname[256];
 | 
				
			||||||
	char *errSSL;
 | 
						char *errSSL;
 | 
				
			||||||
@ -355,6 +411,7 @@ static void* ssl_filter_open(void * idata, struct srvparam * srv){
 | 
				
			|||||||
	sc->server_min_proto_version = server_min_proto_version;
 | 
						sc->server_min_proto_version = server_min_proto_version;
 | 
				
			||||||
	sc->server_max_proto_version = server_max_proto_version;
 | 
						sc->server_max_proto_version = server_max_proto_version;
 | 
				
			||||||
	sc->client_verify = client_verify;
 | 
						sc->client_verify = client_verify;
 | 
				
			||||||
 | 
						sc->server_verify = server_verify;
 | 
				
			||||||
	if(client_ciphersuites) sc->client_ciphersuites = strdup(client_ciphersuites);
 | 
						if(client_ciphersuites) sc->client_ciphersuites = strdup(client_ciphersuites);
 | 
				
			||||||
	if(server_ciphersuites) sc->server_ciphersuites = strdup(server_ciphersuites);
 | 
						if(server_ciphersuites) sc->server_ciphersuites = strdup(server_ciphersuites);
 | 
				
			||||||
	if(client_cipher_list) sc->client_cipher_list = strdup(client_cipher_list);
 | 
						if(client_cipher_list) sc->client_cipher_list = strdup(client_cipher_list);
 | 
				
			||||||
@ -375,7 +432,10 @@ static void* ssl_filter_open(void * idata, struct srvparam * srv){
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	if(client_ca_file)sc->client_ca_file=client_ca_file;
 | 
						if(client_ca_file)sc->client_ca_file=client_ca_file;
 | 
				
			||||||
	if(client_ca_dir)sc->client_ca_dir=client_ca_dir;
 | 
						if(client_ca_dir)sc->client_ca_dir=client_ca_dir;
 | 
				
			||||||
	if(client_ca_store)sc->client_ca_dir=client_ca_store;
 | 
						if(client_ca_store)sc->client_ca_store=client_ca_store;
 | 
				
			||||||
 | 
						if(server_ca_file)sc->server_ca_file=server_ca_file;
 | 
				
			||||||
 | 
						if(server_ca_dir)sc->server_ca_dir=server_ca_dir;
 | 
				
			||||||
 | 
						if(server_ca_store)sc->server_ca_store=server_ca_store;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(mitm){
 | 
						if(mitm){
 | 
				
			||||||
@ -474,7 +534,7 @@ static void* ssl_filter_open(void * idata, struct srvparam * srv){
 | 
				
			|||||||
#endif		
 | 
					#endif		
 | 
				
			||||||
		else 
 | 
							else 
 | 
				
			||||||
		    SSL_CTX_set_default_verify_paths(sc->srv_ctx);
 | 
							    SSL_CTX_set_default_verify_paths(sc->srv_ctx);
 | 
				
			||||||
		SSL_CTX_set_verify(sc->srv_ctx, SSL_VERIFY_PEER, verify_callback);
 | 
							SSL_CTX_set_verify(sc->srv_ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#ifdef WIWHSPLICE
 | 
					#ifdef WIWHSPLICE
 | 
				
			||||||
@ -770,6 +830,18 @@ static int h_client_ca_store(int argc, unsigned char **argv){
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int h_server_ca_dir(int argc, unsigned char **argv){
 | 
				
			||||||
 | 
						free(server_ca_dir);
 | 
				
			||||||
 | 
						server_ca_dir = argc > 1? strdup((char *)argv[1]) : NULL;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int h_server_ca_store(int argc, unsigned char **argv){
 | 
				
			||||||
 | 
						free(server_ca_store);
 | 
				
			||||||
 | 
						server_ca_store = argc > 1? strdup((char *)argv[1]) : NULL;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct vermap{
 | 
					struct vermap{
 | 
				
			||||||
    char *sver;
 | 
					    char *sver;
 | 
				
			||||||
    int iver;
 | 
					    int iver;
 | 
				
			||||||
@ -836,6 +908,15 @@ static int h_no_client_verify(int argc, unsigned char **argv){
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int h_server_verify(int argc, unsigned char **argv){
 | 
				
			||||||
 | 
						server_verify = 1;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					static int h_no_server_verify(int argc, unsigned char **argv){
 | 
				
			||||||
 | 
						server_verify = 0;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct commands ssl_commandhandlers[] = {
 | 
					static struct commands ssl_commandhandlers[] = {
 | 
				
			||||||
	{ssl_commandhandlers+1, "ssl_mitm", h_mitm, 1, 1},
 | 
						{ssl_commandhandlers+1, "ssl_mitm", h_mitm, 1, 1},
 | 
				
			||||||
	{ssl_commandhandlers+2, "ssl_nomitm", h_nomitm, 1, 1},
 | 
						{ssl_commandhandlers+2, "ssl_nomitm", h_nomitm, 1, 1},
 | 
				
			||||||
@ -862,6 +943,14 @@ static struct commands ssl_commandhandlers[] = {
 | 
				
			|||||||
	{ssl_commandhandlers+23, "ssl_nocli", h_nocli, 1, 1},
 | 
						{ssl_commandhandlers+23, "ssl_nocli", h_nocli, 1, 1},
 | 
				
			||||||
	{ssl_commandhandlers+24, "ssl_client_cert", h_clicert, 1, 2},
 | 
						{ssl_commandhandlers+24, "ssl_client_cert", h_clicert, 1, 2},
 | 
				
			||||||
	{ssl_commandhandlers+25, "ssl_client_key", h_clikey, 1, 2},
 | 
						{ssl_commandhandlers+25, "ssl_client_key", h_clikey, 1, 2},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+26, "ssl_server", h_serv, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+27, "ssl_noserver", h_noserv, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+28, "ssl_client", h_cli, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+29, "ssl_noclient", h_nocli, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+30, "ssl_server_verify", h_server_verify, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+31, "ssl_server_no_verify", h_no_server_verify, 1, 1},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+32, "ssl_server_ca_dir", h_server_ca_dir, 1, 2},
 | 
				
			||||||
 | 
						{ssl_commandhandlers+33, "ssl_server_ca_store", h_server_ca_store, 1, 2},
 | 
				
			||||||
	{NULL, "ssl_certcache", h_certcache, 2, 2},
 | 
						{NULL, "ssl_certcache", h_certcache, 2, 2},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -875,22 +964,30 @@ static struct commands ssl_commandhandlers[] = {
 | 
				
			|||||||
PLUGINAPI int PLUGINCALL ssl_plugin (struct pluginlink * pluginlink, 
 | 
					PLUGINAPI int PLUGINCALL ssl_plugin (struct pluginlink * pluginlink, 
 | 
				
			||||||
					 int argc, char** argv){
 | 
										 int argc, char** argv){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mitm = 0;
 | 
				
			||||||
 | 
						serv = 0;
 | 
				
			||||||
 | 
						cli = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pl = pluginlink;
 | 
						pl = pluginlink;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ssl_connect_timeout = 0;
 | 
						ssl_connect_timeout = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	free(certcache);
 | 
						free(certcache);
 | 
				
			||||||
	certcache = NULL;
 | 
						certcache = NULL;
 | 
				
			||||||
	free(srvcert);
 | 
						free(srvcert);
 | 
				
			||||||
	srvcert = NULL;
 | 
						srvcert = NULL;
 | 
				
			||||||
	free(srvkey);
 | 
						free(srvkey);
 | 
				
			||||||
	srvkey = NULL;
 | 
						srvkey = NULL;
 | 
				
			||||||
	mitm = 0;
 | 
						free(clicert);
 | 
				
			||||||
	serv = 0;
 | 
						clicert = NULL;
 | 
				
			||||||
 | 
						free(clikey);
 | 
				
			||||||
 | 
						clikey = NULL;
 | 
				
			||||||
	client_min_proto_version = 0;
 | 
						client_min_proto_version = 0;
 | 
				
			||||||
	client_max_proto_version = 0;
 | 
						client_max_proto_version = 0;
 | 
				
			||||||
	server_min_proto_version = 0;
 | 
						server_min_proto_version = 0;
 | 
				
			||||||
	server_max_proto_version = 0;
 | 
						server_max_proto_version = 0;
 | 
				
			||||||
	client_verify = 0;
 | 
						client_verify = 0;
 | 
				
			||||||
 | 
						server_verify = 0;
 | 
				
			||||||
	free(client_ciphersuites);
 | 
						free(client_ciphersuites);
 | 
				
			||||||
	client_ciphersuites = NULL;
 | 
						client_ciphersuites = NULL;
 | 
				
			||||||
	free(server_ciphersuites);
 | 
						free(server_ciphersuites);
 | 
				
			||||||
@ -909,6 +1006,10 @@ PLUGINAPI int PLUGINCALL ssl_plugin (struct pluginlink * pluginlink,
 | 
				
			|||||||
	client_ca_dir = NULL;
 | 
						client_ca_dir = NULL;
 | 
				
			||||||
	free(client_ca_store);
 | 
						free(client_ca_store);
 | 
				
			||||||
	client_ca_store = NULL;
 | 
						client_ca_store = NULL;
 | 
				
			||||||
 | 
						free(server_ca_dir);
 | 
				
			||||||
 | 
						server_ca_dir = NULL;
 | 
				
			||||||
 | 
						free(server_ca_store);
 | 
				
			||||||
 | 
						server_ca_store = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!ssl_loaded){
 | 
						if(!ssl_loaded){
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user