mirror of
https://github.com/nginx/nginx.git
synced 2024-12-01 11:19:00 +08:00
SSL: loading certificate keys via ENGINE_load_private_key().
This commit is contained in:
parent
811281ec36
commit
cf5013dd3f
@ -376,6 +376,67 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
|
||||
|
||||
BIO_free(bio);
|
||||
|
||||
if (ngx_strncmp(key->data, "engine:", sizeof("engine:") - 1) == 0) {
|
||||
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
|
||||
u_char *p, *last;
|
||||
ENGINE *engine;
|
||||
EVP_PKEY *pkey;
|
||||
|
||||
p = key->data + sizeof("engine:") - 1;
|
||||
last = (u_char *) ngx_strchr(p, ':');
|
||||
|
||||
if (last == NULL) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"invalid syntax in \"%V\"", key);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
*last = '\0';
|
||||
|
||||
engine = ENGINE_by_id((char *) p);
|
||||
|
||||
if (engine == NULL) {
|
||||
ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
|
||||
"ENGINE_by_id(\"%s\") failed", p);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
*last++ = ':';
|
||||
|
||||
pkey = ENGINE_load_private_key(engine, (char *) last, 0, 0);
|
||||
|
||||
if (pkey == NULL) {
|
||||
ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
|
||||
"ENGINE_load_private_key(\"%s\") failed", last);
|
||||
ENGINE_free(engine);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ENGINE_free(engine);
|
||||
|
||||
if (SSL_CTX_use_PrivateKey(ssl->ctx, pkey) == 0) {
|
||||
ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
|
||||
"SSL_CTX_use_PrivateKey(\"%s\") failed", last);
|
||||
EVP_PKEY_free(pkey);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
EVP_PKEY_free(pkey);
|
||||
|
||||
return NGX_OK;
|
||||
|
||||
#else
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"loading \"engine:...\" certificate keys "
|
||||
"is not supported");
|
||||
return NGX_ERROR;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ngx_conf_full_name(cf->cycle, key, 1) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user