diff options
| author | zhengchao <[email protected]> | 2019-02-28 15:54:27 +0800 |
|---|---|---|
| committer | zhengchao <[email protected]> | 2019-02-28 15:54:27 +0800 |
| commit | fcb1581a1ccf931a41e880d921cbee2d5db99aa1 (patch) | |
| tree | 713ea20376b0da1d4fec923f934a9ee936d86a45 | |
| parent | f349d1254f9d8d8c3a990528f60c485b7e940754 (diff) | |
keykeeper的本地缓存,使用keyring_id:证书指纹作为key,在导入可信证书后,非法证书变为合法证书,但缓存查询到的仍是非法证书,导致 #119 。变更key为keyring_id:is_cert_valid:证书指纹。v3.0.8-20180228release-tfe3adevelop-tfe3a
| -rw-r--r-- | platform/src/key_keeper.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/platform/src/key_keeper.cpp b/platform/src/key_keeper.cpp index 68c6485..0a1f1db 100644 --- a/platform/src/key_keeper.cpp +++ b/platform/src/key_keeper.cpp @@ -519,24 +519,24 @@ struct keyring* key_keeper_release_keyring(future_result_t* result) return &(kyr->head); } -static uchar* get_key_by_cert(X509* cert, int keyring_id, unsigned int* len) +static uchar* get_key_by_cert(X509* cert, int keyring_id, unsigned int* len, int is_cert_valid) { if(cert == NULL) { return NULL; } - char* cert_fgr = NULL; - cert_fgr = ssl_x509_fingerprint(cert, 0); - if(cert_fgr == NULL) + char* cert_fingerprint = NULL; + cert_fingerprint = ssl_x509_fingerprint(cert, 0); + if(cert_fingerprint == NULL) { return NULL; } - char* key = (char*)malloc(HTABLE_MAX_KEY_LEN); + char* key = ALLOC(char, HTABLE_MAX_KEY_LEN); memset(key, 0, HTABLE_MAX_KEY_LEN); - snprintf(key, HTABLE_MAX_KEY_LEN, "%d:", keyring_id); - strncat(key, cert_fgr, HTABLE_MAX_KEY_LEN); + snprintf(key, HTABLE_MAX_KEY_LEN, "%d:%d:", keyring_id, is_cert_valid); + strncat(key, cert_fingerprint, HTABLE_MAX_KEY_LEN); *len = strnlen(key, HTABLE_MAX_KEY_LEN); - free(cert_fgr); + free(cert_fingerprint); return (uchar*)key; } @@ -561,7 +561,7 @@ void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, const c { struct promise* p = future_to_promise(f); unsigned int len = 0; - uchar* key = get_key_by_cert(origin_cert, keyring_id, &len); + uchar* key = get_key_by_cert(origin_cert, keyring_id, &len, is_cert_valid); if(key == NULL) { promise_failed(p, FUTURE_ERROR_EXCEPTION, "get hash key by_cert failed"); |
