summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2025-02-18Version bump.Sergey Kandaurov1-2/+2
2025-02-05nginx-1.27.4-RELEASErelease-1.27.4Sergey Kandaurov1-0/+104
2025-02-05SNI: added restriction for TLSv1.3 cross-SNI session resumption.Sergey Kandaurov2-4/+50
In OpenSSL, session resumption always happens in the default SSL context, prior to invoking the SNI callback. Further, unlike in TLSv1.2 and older protocols, SSL_get_servername() returns values received in the resumption handshake, which may be different from the value in the initial handshake. Notably, this makes the restriction added in b720f650b insufficient for sessions resumed with different SNI server name. Considering the example from b720f650b, previously, a client was able to request example.org by presenting a certificate for example.org, then to resume and request example.com. The fix is to reject handshakes resumed with a different server name, if verification of client certificates is enabled in a corresponding server configuration.
2025-02-05Added "keepalive_min_timeout" directive.Roman Arutyunyan4-7/+56
The directive sets a timeout during which a keepalive connection will not be closed by nginx for connection reuse or graceful shutdown. The change allows clients that send multiple requests over the same connection without delay or with a small delay between them, to avoid receiving a TCP RST in response to one of them. This excludes network issues and non-graceful shutdown. As a side-effect, it also addresses the TCP reset problem described in RFC 9112, Section 9.6, when the last sent HTTP response could be damaged by a followup TCP RST. It is important for non-idempotent requests, which cannot be retried by client. It is not recommended to set keepalive_min_timeout to large values as this can introduce an additional delay during graceful shutdown and may restrict nginx from effective connection reuse.
2025-01-30Misc: moved documentation in generated ZIP archive.Sergey Kandaurov1-0/+3
The recently added GitHub files now reside in the docs directory.
2025-01-30Configure: fixed --with-libatomic=DIR with recent libatomic_ops.Sergey Kandaurov2-5/+10
The build location of the resulting libatomic_ops.a was changed in v7.4.0 after converting libatomic_ops to use libtool. The fix is to use library from the install path, this allows building with both old and new versions. Initially reported here: https://mailman.nginx.org/pipermail/nginx/2018-April/056054.html
2025-01-28QUIC: added missing casts in iov_base assignments.Aleksei Bavshin1-2/+2
This is consistent with the rest of the code and fixes build on systems with non-standard definition of struct iovec (Solaris, Illumos).
2025-01-23Upstream: fixed --with-compat build without SSL, broken by 454ad0e.Pavel Pautov2-1/+1
2025-01-17SSL: avoid using mismatched certificate/key cached pairs.Sergey Kandaurov3-5/+34
This can happen with certificates and certificate keys specified with variables due to partial cache update in various scenarios: - cache expiration with only one element of pair evicted - on-disk update with non-cacheable encrypted keys - non-atomic on-disk update The fix is to retry with fresh data on X509_R_KEY_VALUES_MISMATCH.
2025-01-17Upstream: caching certificates and certificate keys with variables.Sergey Kandaurov6-2/+431
Caching is enabled with proxy_ssl_certificate_cache and friends. Co-authored-by: Aleksei Bavshin <a.bavshin@nginx.com>
2025-01-17SSL: cache revalidation of file based dynamic certificates.Sergey Kandaurov1-2/+42
Revalidation is based on file modification time and uniq file index, and happens after the cache object validity time is expired.
2025-01-17SSL: caching certificates and certificate keys with variables.Sergey Kandaurov10-68/+481
A new directive "ssl_certificate_cache max=N [valid=time] [inactive=time]" enables caching of SSL certificate chain and secret key objects specified by "ssl_certificate" and "ssl_certificate_key" directives with variables. Co-authored-by: Aleksei Bavshin <a.bavshin@nginx.com>
2025-01-17SSL: encrypted certificate keys are exempt from object cache.Sergey Kandaurov1-15/+38
SSL object cache, as previously introduced in 1.27.2, did not take into account encrypted certificate keys that might be unexpectedly fetched from the cache regardless of the matching passphrase. To avoid this, caching of encrypted certificate keys is now disabled based on the passphrase callback invocation. A notable exception is encrypted certificate keys configured without ssl_password_file. They are loaded once resulting in the passphrase prompt on startup and reused in other contexts as applicable.
2025-01-17SSL: object cache inheritance from the old configuration cycle.Sergey Kandaurov1-8/+99
Memory based objects are always inherited, engine based objects are never inherited to adhere the volatile nature of engines, file based objects are inherited subject to modification time and file index. The previous behaviour to bypass cache from the old configuration cycle is preserved with a new directive "ssl_object_cache_inheritable off;".
2025-01-16Slice filter: log the expected range in case of range error.Daniel Vasquez Lopez1-2/+2
2025-01-09Gzip: compatibility with recent zlib-ng 2.2.x versions.Sergey Kandaurov1-3/+5
It now uses 5/4 times more memory for the pending buffer. Further, a single allocation is now used, which takes additional 56 bytes for deflate_allocs in 64-bit mode aligned to 16, to store sub-allocation pointers, and the total allocation size now padded up to 128 bytes, which takes theoretically 200 additional bytes in total. This fits though into "4 * (64 + sizeof(void*))" additional space for ZALLOC used in zlib-ng 2.1.x versions. The comment was updated to reflect this.
2025-01-09Year 2025.Roman Arutyunyan1-1/+1
2024-12-27QUIC: fixed accessing a released stream.Roman Arutyunyan1-5/+13
While trying to close a stream in ngx_quic_close_streams() by calling its read event handler, the next stream saved prior to that could be destroyed recursively. This caused a segfault while trying to access the next stream. The way the next stream could be destroyed in HTTP/3 is the following. A request stream read event handler ngx_http_request_handler() could end up calling ngx_http_v3_send_cancel_stream() to report a cancelled request stream in the decoder stream. If sending stream cancellation decoder instruction fails for any reason, and the decoder stream is the next in order after the request stream, the issue is triggered. The fix is to postpone calling read event handlers for all streams being closed to avoid closing a released stream.
2024-12-26QUIC: ignore version negotiation packets.Roman Arutyunyan1-0/+5
Previously, such packets were treated as long header packets with unknown version 0, and a version negotiation packet was sent in response. This could be used to set up an infinite traffic reflect loop with another nginx instance. Now version negotiation packets are ignored. As per RFC 9000, Section 6.1: An endpoint MUST NOT send a Version Negotiation packet in response to receiving a Version Negotiation packet.
2024-12-23Updated security policy to clarify experimental features.Jordan Zebor1-2/+1
The original security policy language did not capture the scope as intended for experimental features and availability.
2024-12-10QUIC: fixed client request timeout in 0-RTT scenarios.nandsky1-1/+1
Since 0-RTT and 1-RTT data exist in the same packet number space, ngx_quic_discard_ctx incorrectly discards 1-RTT packets when 0-RTT keys are discarded. The issue was introduced by 58b92177e7c3c50f77f807ab3846ad5c7bbf0ebe.
2024-11-27Version bump.Roman Arutyunyan1-2/+2
2024-11-26nginx-1.27.3-RELEASErelease-1.27.3Sergey Kandaurov1-0/+93
2024-11-26Mail: handling of LOGIN IMAP command untagged response.Sergey Kandaurov1-0/+24
In particular, an untagged CAPABILITY response as described in the interim RFC 3501 internet drafts was seen in various IMAP servers. Previously resulted in a broken connection, now an untagged response is proxied to client.
2024-11-26Realip: allowed square brackets with portless IPv6 address.Roman Arutyunyan1-1/+5
When client address is received, IPv6 address could be specified without square brackets and without port, as well as both with the brackets and port. The change allows IPv6 in square brackets and no port, which was previously considered an error. This format conforms to RFC 3986. The change also affects proxy_bind and friends.
2024-11-26QUIC: got rid of memory copy when initializing constant values.Sergey Kandaurov1-8/+9
2024-11-26QUIC: constified nonce parameter of crypto functions.Sergey Kandaurov2-7/+7
This follows OpenSSL and BoringSSL API, and gives a hint to compiler that this parameter may not be modified.
2024-11-25Upstream: disallow empty path in proxy_store and friends.Sergey Kandaurov5-0/+24
Renaming a temporary file to an empty path ("") returns NGX_ENOPATH with a subsequent ngx_create_full_path() to create the full path. This function skips initial bytes as part of path separator lookup, which causes out of bounds access on short strings. The fix is to avoid renaming a temporary file to an obviously invalid path, as well as explicitly forbid such syntax for literal values. Although Coverity reports about potential type underflow, it is not actually possible because the terminating '\0' is always included. Notably, the run-time check is sufficient enough for Win32 as well. Other short invalid values result either in NGX_ENOENT or NGX_EEXIST and "MoveFile() .. failed" critical log messages, which involves a separate error handling. Prodded by Coverity (CID 1605485).
2024-11-25QUIC: prevented BIO leak in case of error.Roman Arutyunyan1-0/+1
2024-11-22SSL: a new macro to set default protocol versions.Sergey Kandaurov8-63/+14
This simplifies merging protocol values after ea15896 and ebd18ec. Further, as outlined in ebd18ec18, for libraries preceeding TLSv1.2+ support, only meaningful versions TLSv1 and TLSv1.1 are set by default. While here, fixed indentation.
2024-11-21Mp4: prevent chunk index underflow.Roman Arutyunyan1-0/+6
When cropping stsc atom, it's assumed that chunk index is never 0. Based on this assumption, start_chunk and end_chunk are calculated by subtracting 1 from it. If chunk index is zero, start_chunk or end_chunk may underflow, which will later trigger "start/end time is out mp4 stco chunks" error. The change adds an explicit check for zero chunk index to avoid underflow and report a proper error. Zero chunk index is explicitly banned in ISO/IEC 14496-12, 8.7.4 Sample To Chunk Box. It's also implicitly banned in QuickTime File Format specification. Description of chunk offset table references "Chunk 1" as the first table element.
2024-11-21Mp4: unordered stsc chunks error for the final chunk.Roman Arutyunyan1-0/+7
Currently an error is triggered if any of the chunk runs in stsc are unordered. This however does not include the final chunk run, which ends with trak->chunks + 1. The previous chunk index can be larger leading to a 32-bit overflow. This could allow to skip the validity check "if (start_sample > n)". This could later lead to a large trak->start_chunk/trak->end_chunk, which would be caught later in ngx_http_mp4_update_stco_atom() or ngx_http_mp4_update_co64_atom(). While there are no implications of the validity check being avoided, the change still adds a check to ensure the final chunk run is ordered, to produce a meaningful error and avoid a potential integer overflow.
2024-11-21Mp4: fixed handling an empty run of chunks in stsc atom.Roman Arutyunyan1-1/+4
A specially crafted mp4 file with an empty run of chunks in the stsc atom and a large value for samples per chunk for that run, combined with a specially crafted request, allowed to store that large value in prev_samples and later in trak->end_chunk_samples while in ngx_http_mp4_crop_stsc_data(). Later in ngx_http_mp4_update_stsz_atom() this could result in buffer overread while calculating trak->end_chunk_samples_size. Now the value of samples per chunk specified for an empty run is ignored.
2024-11-20Fixed missing double quote.Nathan Mentze1-1/+1
2024-11-19SSL: error message default in object caching API.Sergey Kandaurov1-0/+4
This change initializes the "err" variable, used to produce a meaningful diagnostics on error path, to a good safe value.
2024-11-19On DragonFly BSD 5.8+, TCP_KEEPIDLE and TCP_KEEPINTVL are in secs.Andy Pan1-1/+1
2024-11-12Fixed link to contributing guidelines.Dan Callahan1-2/+2
Absolute paths in links end up being rooted at github.com. The contributing guidelines link is broken unless we use the full URL. Also, remove superfluous "monospace formatting" for the link.
2024-11-12Uwsgi: added create_loc_conf comments.Sergey Kandaurov1-0/+22
2024-11-12SCGI: added create_loc_conf comments.Sergey Kandaurov1-0/+15
2024-11-12FastCGI: fixed create_loc_conf comments after 05b1a8f1e.Sergey Kandaurov1-1/+1
2024-11-11SSL: fixed MSVC compilation after ebd18ec1812b.蕭澧邦7-14/+42
MSVC generates a compilation error in case #if/#endif is used in a macro parameter.
2024-11-07Upstream: copy upstream zone DNS valid time during config reload.Mini Hawthorne4-2/+24
Previously, all upstream DNS entries would be immediately re-resolved on config reload. With a large number of upstreams, this creates a spike of DNS resolution requests. These spikes can overwhelm the DNS server or cause drops on the network. This patch retains the TTL of previous resolutions across reloads by copying each upstream's name's expiry time across configuration cycles. As a result, no additional resolutions are needed.
2024-11-07Upstream: per-upstream resolver.Vladimir Homutov4-12/+115
The "resolver" and "resolver_timeout" directives can now be specified directly in the "upstream" block.
2024-11-07Upstream: pre-resolve servers on reload.Ruslan Ermilov2-14/+388
After configuration is reloaded, it may take some time for the re-resolvable upstream servers to resolve and become available as peers. During this time, client requests might get dropped. Such servers are now pre-resolved using the "cache" of already resolved peers from the old shared memory zone.
2024-11-07Core: inheritance of non-reusable shared memory zones.Ruslan Ermilov1-4/+10
When re-creating a non-reusable zone, make the pointer to the old zone available during the new zone initialization.
2024-11-07Upstream: construct upstream peers from DNS SRV records.Dmitry Volyntsev10-67/+420
2024-11-07Upstream: re-resolvable servers.Ruslan Ermilov18-56/+1704
Specifying the upstream server by a hostname together with the "resolve" parameter will make the hostname to be periodically resolved, and upstream servers added/removed as necessary. This requires a "resolver" at the "http" configuration block. The "resolver_timeout" parameter also affects when the failed DNS requests will be attempted again. Responses with NXDOMAIN will be attempted again in 10 seconds. Upstream has a configuration generation number that is incremented each time servers are added/removed to the primary/backup list. This number is remembered by the peer.init method, and if peer.get detects a change in configuration, it returns NGX_BUSY. Each server has a reference counter. It is incremented by peer.get and decremented by peer.free. When a server is removed, it is removed from the list of servers and is marked as "zombie". The memory allocated by a zombie peer is freed only when its reference count becomes zero. Co-authored-by: Roman Arutyunyan <arut@nginx.com> Co-authored-by: Sergey Kandaurov <pluknet@nginx.com> Co-authored-by: Vladimir Homutov <vl@nginx.com>
2024-10-31SSL: disabled TLSv1 and TLSv1.1 by default.Sergey Kandaurov7-0/+14
TLSv1 and TLSv1.1 are formally deprecated and forbidden to negotiate due to insufficient security reasons outlined in RFC 8996. TLSv1 and TLSv1.1 are disabled in BoringSSL e95b0cad9 and LibreSSL 3.8.1 in the way they cannot be enabled in nginx configuration. In OpenSSL 3.0, they are only permitted at security level 0 (disabled by default). The support is dropped in Chrome 84, Firefox 78, and deprecated in Safari. This change disables TLSv1 and TLSv1.1 by default for OpenSSL 1.0.1 and newer, where TLSv1.2 support is available. For older library versions, which do not have alternatives, these protocol versions remain enabled.
2024-10-21Updated security policy to include disclosure details.jzebor-at-f51-5/+89
2024-10-15Configure: MSVC compatibility with PCRE2 10.43.Thierry Bastian1-1/+2