diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2014-02-23 13:46:52 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2014-02-23 13:46:52 +0000 |
commit | 358d352aa244b4f2ef655bccff6658d92d5ce03c (patch) | |
tree | b8b27085c2e6117496caab1d39cf1322ca5b1f8a /ssl/ssl_cert.c | |
parent | 13dc3ce9ab483cade378bcf3844c92bacd817316 (diff) |
Only set current certificate to valid values.
When setting the current certificate check that it has a corresponding
private key.
Diffstat (limited to 'ssl/ssl_cert.c')
-rw-r--r-- | ssl/ssl_cert.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c index ec208b507c..2c66460fe4 100644 --- a/ssl/ssl_cert.c +++ b/ssl/ssl_cert.c @@ -606,18 +606,20 @@ int ssl_cert_select_current(CERT *c, X509 *x) return 0; for (i = 0; i < SSL_PKEY_NUM; i++) { - if (c->pkeys[i].x509 == x) + CERT_PKEY *cpk = c->pkeys + i; + if (cpk->x509 == x && cpk->privatekey) { - c->key = &c->pkeys[i]; + c->key = cpk; return 1; } } for (i = 0; i < SSL_PKEY_NUM; i++) { - if (c->pkeys[i].x509 && !X509_cmp(c->pkeys[i].x509, x)) + CERT_PKEY *cpk = c->pkeys + i; + if (cpk->privatekey && cpk->x509 && !X509_cmp(cpk->x509, x)) { - c->key = &c->pkeys[i]; + c->key = cpk; return 1; } } @@ -641,9 +643,10 @@ int ssl_cert_set_current(CERT *c, long op) return 0; for (i = idx; i < SSL_PKEY_NUM; i++) { - if (c->pkeys[i].x509) + CERT_PKEY *cpk = c->key + i; + if (cpk->x509 && cpk->privatekey) { - c->key = &c->pkeys[i]; + c->key = cpk; return 1; } } |