mirror of
https://github.com/nginx/nginx.git
synced 2025-06-12 13:42:55 +08:00
SSL: ciphers now set before loading certificates (ticket #2035).
To load old/weak server or client certificates it might be needed to adjust the security level, as introduced in OpenSSL 1.1.0. This change ensures that ciphers are set before loading the certificates, so security level changes via the cipher string apply to certificate loading.
This commit is contained in:
parent
b381cbc085
commit
ce5996cdd1
@ -4896,6 +4896,12 @@ ngx_http_grpc_set_ssl(ngx_conf_t *cf, ngx_http_grpc_loc_conf_t *glcf)
|
|||||||
cln->handler = ngx_ssl_cleanup_ctx;
|
cln->handler = ngx_ssl_cleanup_ctx;
|
||||||
cln->data = glcf->upstream.ssl;
|
cln->data = glcf->upstream.ssl;
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, glcf->upstream.ssl, &glcf->ssl_ciphers, 0)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (glcf->upstream.ssl_certificate) {
|
if (glcf->upstream.ssl_certificate) {
|
||||||
|
|
||||||
if (glcf->upstream.ssl_certificate_key == NULL) {
|
if (glcf->upstream.ssl_certificate_key == NULL) {
|
||||||
@ -4927,12 +4933,6 @@ ngx_http_grpc_set_ssl(ngx_conf_t *cf, ngx_http_grpc_loc_conf_t *glcf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, glcf->upstream.ssl, &glcf->ssl_ciphers, 0)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (glcf->upstream.ssl_verify) {
|
if (glcf->upstream.ssl_verify) {
|
||||||
if (glcf->ssl_trusted_certificate.len == 0) {
|
if (glcf->ssl_trusted_certificate.len == 0) {
|
||||||
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
||||||
|
@ -4944,6 +4944,12 @@ ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf)
|
|||||||
cln->handler = ngx_ssl_cleanup_ctx;
|
cln->handler = ngx_ssl_cleanup_ctx;
|
||||||
cln->data = plcf->upstream.ssl;
|
cln->data = plcf->upstream.ssl;
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, plcf->upstream.ssl, &plcf->ssl_ciphers, 0)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (plcf->upstream.ssl_certificate) {
|
if (plcf->upstream.ssl_certificate) {
|
||||||
|
|
||||||
if (plcf->upstream.ssl_certificate_key == NULL) {
|
if (plcf->upstream.ssl_certificate_key == NULL) {
|
||||||
@ -4975,12 +4981,6 @@ ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, plcf->upstream.ssl, &plcf->ssl_ciphers, 0)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plcf->upstream.ssl_verify) {
|
if (plcf->upstream.ssl_verify) {
|
||||||
if (plcf->ssl_trusted_certificate.len == 0) {
|
if (plcf->ssl_trusted_certificate.len == 0) {
|
||||||
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
||||||
|
@ -797,6 +797,13 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
ngx_http_ssl_npn_advertised, NULL);
|
ngx_http_ssl_npn_advertised, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
||||||
|
conf->prefer_server_ciphers)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_CONF_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (ngx_http_ssl_compile_certificates(cf, conf) != NGX_OK) {
|
if (ngx_http_ssl_compile_certificates(cf, conf) != NGX_OK) {
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
}
|
}
|
||||||
@ -829,13 +836,6 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
|
||||||
conf->prefer_server_ciphers)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_CONF_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
conf->ssl.buffer_size = conf->buffer_size;
|
conf->ssl.buffer_size = conf->buffer_size;
|
||||||
|
|
||||||
if (conf->verify) {
|
if (conf->verify) {
|
||||||
|
@ -2432,6 +2432,12 @@ ngx_http_uwsgi_set_ssl(ngx_conf_t *cf, ngx_http_uwsgi_loc_conf_t *uwcf)
|
|||||||
cln->handler = ngx_ssl_cleanup_ctx;
|
cln->handler = ngx_ssl_cleanup_ctx;
|
||||||
cln->data = uwcf->upstream.ssl;
|
cln->data = uwcf->upstream.ssl;
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, uwcf->upstream.ssl, &uwcf->ssl_ciphers, 0)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (uwcf->upstream.ssl_certificate) {
|
if (uwcf->upstream.ssl_certificate) {
|
||||||
|
|
||||||
if (uwcf->upstream.ssl_certificate_key == NULL) {
|
if (uwcf->upstream.ssl_certificate_key == NULL) {
|
||||||
@ -2463,12 +2469,6 @@ ngx_http_uwsgi_set_ssl(ngx_conf_t *cf, ngx_http_uwsgi_loc_conf_t *uwcf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, uwcf->upstream.ssl, &uwcf->ssl_ciphers, 0)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uwcf->upstream.ssl_verify) {
|
if (uwcf->upstream.ssl_verify) {
|
||||||
if (uwcf->ssl_trusted_certificate.len == 0) {
|
if (uwcf->ssl_trusted_certificate.len == 0) {
|
||||||
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
||||||
|
@ -394,6 +394,13 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
cln->handler = ngx_ssl_cleanup_ctx;
|
cln->handler = ngx_ssl_cleanup_ctx;
|
||||||
cln->data = &conf->ssl;
|
cln->data = &conf->ssl;
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
||||||
|
conf->prefer_server_ciphers)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_CONF_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
|
if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
|
||||||
conf->certificate_keys, conf->passwords)
|
conf->certificate_keys, conf->passwords)
|
||||||
!= NGX_OK)
|
!= NGX_OK)
|
||||||
@ -430,13 +437,6 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
|
||||||
conf->prefer_server_ciphers)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_CONF_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ngx_ssl_dhparam(cf, &conf->ssl, &conf->dhparam) != NGX_OK) {
|
if (ngx_ssl_dhparam(cf, &conf->ssl, &conf->dhparam) != NGX_OK) {
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -2185,6 +2185,10 @@ ngx_stream_proxy_set_ssl(ngx_conf_t *cf, ngx_stream_proxy_srv_conf_t *pscf)
|
|||||||
cln->handler = ngx_ssl_cleanup_ctx;
|
cln->handler = ngx_ssl_cleanup_ctx;
|
||||||
cln->data = pscf->ssl;
|
cln->data = pscf->ssl;
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, pscf->ssl, &pscf->ssl_ciphers, 0) != NGX_OK) {
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (pscf->ssl_certificate) {
|
if (pscf->ssl_certificate) {
|
||||||
|
|
||||||
if (pscf->ssl_certificate_key == NULL) {
|
if (pscf->ssl_certificate_key == NULL) {
|
||||||
@ -2216,10 +2220,6 @@ ngx_stream_proxy_set_ssl(ngx_conf_t *cf, ngx_stream_proxy_srv_conf_t *pscf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, pscf->ssl, &pscf->ssl_ciphers, 0) != NGX_OK) {
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pscf->ssl_verify) {
|
if (pscf->ssl_verify) {
|
||||||
if (pscf->ssl_trusted_certificate.len == 0) {
|
if (pscf->ssl_trusted_certificate.len == 0) {
|
||||||
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
||||||
|
@ -720,6 +720,13 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
ngx_stream_ssl_servername);
|
ngx_stream_ssl_servername);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
||||||
|
conf->prefer_server_ciphers)
|
||||||
|
!= NGX_OK)
|
||||||
|
{
|
||||||
|
return NGX_CONF_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (ngx_stream_ssl_compile_certificates(cf, conf) != NGX_OK) {
|
if (ngx_stream_ssl_compile_certificates(cf, conf) != NGX_OK) {
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
}
|
}
|
||||||
@ -752,13 +759,6 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
|
|
||||||
conf->prefer_server_ciphers)
|
|
||||||
!= NGX_OK)
|
|
||||||
{
|
|
||||||
return NGX_CONF_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conf->verify) {
|
if (conf->verify) {
|
||||||
|
|
||||||
if (conf->client_certificate.len == 0 && conf->verify != 3) {
|
if (conf->client_certificate.len == 0 && conf->verify != 3) {
|
||||||
|
Loading…
Reference in New Issue
Block a user