feature (adapt maat): keyring type changed from int to uuid_string when using RPC with cerstore
This commit is contained in:
@@ -27,7 +27,7 @@ void key_keeper_free_keyring(struct keyring* cert);
|
|||||||
|
|
||||||
struct evhttp_connection* key_keeper_evhttp_init(struct event_base * evbase, struct evdns_base* dnsbase, struct key_keeper * key_keeper_handler);
|
struct evhttp_connection* key_keeper_evhttp_init(struct event_base * evbase, struct evdns_base* dnsbase, struct key_keeper * key_keeper_handler);
|
||||||
|
|
||||||
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, int keyring_id,
|
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, uuid_t *keyring_uuid,
|
||||||
X509 * origin_cert, int is_cert_valid, struct event_base * evbase, struct evdns_base* dnsbase, struct evhttp_connection *evhttp);
|
X509 * origin_cert, int is_cert_valid, struct event_base * evbase, struct evdns_base* dnsbase, struct evhttp_connection *evhttp);
|
||||||
|
|
||||||
void key_keeper_statistic(struct key_keeper *keeper, struct key_keeper_stat* result);
|
void key_keeper_statistic(struct key_keeper *keeper, struct key_keeper_stat* result);
|
||||||
|
|||||||
@@ -678,7 +678,7 @@ struct keyring* key_keeper_release_keyring(future_result_t* result)
|
|||||||
return &(kyr->head);
|
return &(kyr->head);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uchar* get_key_by_cert(X509* cert, int keyring_id, unsigned int* len, int is_cert_valid)
|
static uchar* get_key_by_cert(X509* cert, const char *keyring_uuid_str, unsigned int* len, int is_cert_valid)
|
||||||
{
|
{
|
||||||
if(cert == NULL)
|
if(cert == NULL)
|
||||||
{
|
{
|
||||||
@@ -692,7 +692,7 @@ static uchar* get_key_by_cert(X509* cert, int keyring_id, unsigned int* len, int
|
|||||||
}
|
}
|
||||||
char* key = ALLOC(char, HTABLE_MAX_KEY_LEN);
|
char* key = ALLOC(char, HTABLE_MAX_KEY_LEN);
|
||||||
memset(key, 0, HTABLE_MAX_KEY_LEN);
|
memset(key, 0, HTABLE_MAX_KEY_LEN);
|
||||||
snprintf(key, HTABLE_MAX_KEY_LEN, "%d:%d:", keyring_id, is_cert_valid);
|
snprintf(key, HTABLE_MAX_KEY_LEN, "%d:%d:", keyring_uuid_str, is_cert_valid);
|
||||||
strncat(key, cert_fingerprint, HTABLE_MAX_KEY_LEN);
|
strncat(key, cert_fingerprint, HTABLE_MAX_KEY_LEN);
|
||||||
*len = strnlen(key, HTABLE_MAX_KEY_LEN);
|
*len = strnlen(key, HTABLE_MAX_KEY_LEN);
|
||||||
free(cert_fingerprint);
|
free(cert_fingerprint);
|
||||||
@@ -716,11 +716,13 @@ char* url_escape(char* url)
|
|||||||
return _url;
|
return _url;
|
||||||
}
|
}
|
||||||
|
|
||||||
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, int keyring_id, X509 * origin_cert, int is_cert_valid, struct event_base * evbase, struct evdns_base* dnsbase, struct evhttp_connection *evhttp)
|
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const char* sni, uuid_t *keyring_uuid, X509 * origin_cert, int is_cert_valid, struct event_base * evbase, struct evdns_base* dnsbase, struct evhttp_connection *evhttp)
|
||||||
{
|
{
|
||||||
struct promise* p = future_to_promise(f);
|
struct promise* p = future_to_promise(f);
|
||||||
unsigned int len = 0;
|
unsigned int len = 0;
|
||||||
uchar* key = get_key_by_cert(origin_cert, keyring_id, &len, is_cert_valid);
|
char keyring_uuid_str[UUID_STRING_SIZE];
|
||||||
|
uuid_unparse(*keyring_uuid, keyring_uuid_str);
|
||||||
|
uchar* key = get_key_by_cert(origin_cert, keyring_uuid_str, &len, is_cert_valid);
|
||||||
if(key == NULL)
|
if(key == NULL)
|
||||||
{
|
{
|
||||||
promise_failed(p, FUTURE_ERROR_EXCEPTION, "get hash key by_cert failed");
|
promise_failed(p, FUTURE_ERROR_EXCEPTION, "get hash key by_cert failed");
|
||||||
@@ -771,13 +773,13 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c
|
|||||||
//keyring_id = 1;
|
//keyring_id = 1;
|
||||||
if(sni == NULL || sni[0] == '\0')
|
if(sni == NULL || sni[0] == '\0')
|
||||||
{
|
{
|
||||||
asprintf(&url, "http://%s:%d/ca?keyring_id=%d&is_valid=%d",
|
asprintf(&url, "http://%s:%d/ca?keyring_id=%s&is_valid=%d",
|
||||||
keeper->cert_store_host, keeper->cert_store_port, keyring_id, is_cert_valid);
|
keeper->cert_store_host, keeper->cert_store_port, keyring_uuid_str, is_cert_valid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asprintf(&url, "http://%s:%d/ca?keyring_id=%d&sni=%s&is_valid=%d",
|
asprintf(&url, "http://%s:%d/ca?keyring_id=%s&sni=%s&is_valid=%d",
|
||||||
keeper->cert_store_host, keeper->cert_store_port, keyring_id, sni, is_cert_valid);
|
keeper->cert_store_host, keeper->cert_store_port, keyring_uuid_str, sni, is_cert_valid);
|
||||||
}
|
}
|
||||||
TFE_LOG_DEBUG(keeper->logger, "CertStore query: %.100s", url);
|
TFE_LOG_DEBUG(keeper->logger, "CertStore query: %.100s", url);
|
||||||
tfe_rpc_async_ask(f_certstore_rpc, url, POST, DONE_CB, origin_cert_pem, strlen(origin_cert_pem), evbase, dnsbase, evhttp);
|
tfe_rpc_async_ask(f_certstore_rpc, url, POST, DONE_CB, origin_cert_pem, strlen(origin_cert_pem), evbase, dnsbase, evhttp);
|
||||||
|
|||||||
@@ -2036,16 +2036,16 @@ void ssl_async_downstream_create(struct future * f, struct ssl_mgr * mgr, struct
|
|||||||
|
|
||||||
ctx->f_ask_keyring = future_create("ask_kyr",ask_keyring_on_succ, ask_keyring_on_fail, p);
|
ctx->f_ask_keyring = future_create("ask_kyr",ask_keyring_on_succ, ask_keyring_on_fail, p);
|
||||||
ctx->is_origin_crt_verify_passed = upstream->up_parts.is_server_cert_verify_passed;
|
ctx->is_origin_crt_verify_passed = upstream->up_parts.is_server_cert_verify_passed;
|
||||||
int keyring_id = 0;
|
uuid_t *keyring_uuid = NULL;
|
||||||
if (ctx->is_origin_crt_verify_passed)
|
if (ctx->is_origin_crt_verify_passed)
|
||||||
{
|
{
|
||||||
keyring_id = upstream->up_parts.keyring_for_trusted;
|
keyring_uuid = &upstream->up_parts.keyring_for_trusted;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
keyring_id = upstream->up_parts.keyring_for_untrusted;
|
keyring_uuid = &upstream->up_parts.keyring_for_untrusted;
|
||||||
}
|
}
|
||||||
key_keeper_async_ask(ctx->f_ask_keyring, mgr->key_keeper, sni, keyring_id, ctx->origin_crt, ctx->is_origin_crt_verify_passed,
|
key_keeper_async_ask(ctx->f_ask_keyring, mgr->key_keeper, sni, keyring_uuid, ctx->origin_crt, ctx->is_origin_crt_verify_passed,
|
||||||
evbase, dnsbase, evhttp);
|
evbase, dnsbase, evhttp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user