summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2024-10-02nginx-1.27.2-RELEASErelease-1.27.2Sergey Kandaurov1-0/+65
2024-10-02Updated OpenSSL used for win32 builds.Sergey Kandaurov1-1/+1
2024-10-01SSL: caching CA certificates.Sergey Kandaurov3-28/+185
This can potentially provide a large amount of savings, because CA certificates can be quite large. Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching CRLs.Sergey Kandaurov3-17/+164
Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching certificate keys.Sergey Kandaurov3-151/+172
EVP_KEY objects are a reference-counted container for key material, shallow copies and OpenSSL stack management aren't needed as with certificates. Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching certificates.Sergey Kandaurov3-102/+173
Certificate chains are now loaded once. The certificate cache provides each chain as a unique stack of reference counted elements. This shallow copy is required because OpenSSL stacks aren't reference counted. Based on previous work by Mini Hawthorne.
2024-10-01SSL: object caching.Sergey Kandaurov3-1/+318
Added ngx_openssl_cache_module, which indexes a type-aware object cache. It maps an id to a unique instance, and provides references to it, which are dropped when the cycle's pool is destroyed. The cache will be used in subsequent patches. Based on previous work by Mini Hawthorne.
2024-10-01SSL: moved certificate storage out of exdata.Sergey Kandaurov3-66/+89
Instead of cross-linking the objects using exdata, pointers to configured certificates are now stored in ngx_ssl_t, and OCSP staples are now accessed with rbtree in it. This allows sharing these objects between SSL contexts. Based on previous work by Mini Hawthorne.
2024-09-24Fixed a typo of bpf makefile debug option.tzssangglass1-1/+1
2024-09-20Added new primary README.md file.Michael Vernik3-4/+231
2024-09-20SSL: optional ssl_client_certificate for ssl_verify_client.Sergey Kandaurov3-6/+18
Starting from TLSv1.1 (as seen since draft-ietf-tls-rfc2246-bis-00), the "certificate_authorities" field grammar of the CertificateRequest message was redone to allow no distinguished names. In TLSv1.3, with the restructured CertificateRequest message, this can be similarly done by optionally including the "certificate_authorities" extension. This allows to avoid sending DNs at all. In practice, aside from published TLS specifications, all supported SSL/TLS libraries allow to request client certificates with an empty DN list for any protocol version. For instance, when operating in TLSv1, this results in sending the "certificate_authorities" list as a zero-length vector, which corresponds to the TLSv1.1 specification. Such behaviour goes back to SSLeay. The change relaxes the requirement to specify at least one trusted CA certificate in the ssl_client_certificate directive, which resulted in sending DNs of these certificates (closes #142). Instead, all trusted CA certificates can be specified now using the ssl_trusted_certificate directive if needed. A notable difference that certificates specified in ssl_trusted_certificate are always loaded remains (see 3648ba7db). Co-authored-by: Praveen Chaudhary <praveenc@nvidia.com>
2024-09-13Proxy: proxy_pass_trailers directive.Sergey Kandaurov5-17/+235
The directive allows to pass upstream response trailers to client.
2024-09-06Fixed a typo in win-utf.Shaikh Yaser1-1/+1
2024-09-04Added CI based on GitHub Actions.Konstantin Pavlov2-0/+19
Pushes to master and stable branches will result in buildbot-like checks on multiple OSes and architectures. Pull requests will be checked on a public Ubuntu GitHub runner.
2024-09-04Added GitHub templates.Maryna Herasimovich3-0/+66
2024-09-03Added contributing guidelines.Maryna Herasimovich1-0/+110
2024-09-02Added security policy.Maryna Herasimovich1-0/+20
2024-09-02Added Code of Conduct.Maryna Herasimovich1-0/+126
2024-08-30Removed C-style comments from LICENSE.Roman Arutyunyan1-26/+24
2024-08-30Moved LICENSE and README to root.Roman Arutyunyan3-2/+0
2024-08-30Switched GNUmakefile from hg to git.Roman Arutyunyan1-5/+5
2024-08-30Removed .hgtags file.Roman Arutyunyan1-482/+0
2024-08-22Stream: OCSP stapling.Sergey Kandaurov2-10/+73
2024-08-22Stream: client certificate validation with OCSP.Sergey Kandaurov2-0/+159
2024-08-20Version bump.Sergey Kandaurov1-2/+2
2024-08-12release-1.27.1 tagSergey Kandaurov1-0/+1
2024-08-12nginx-1.27.1-RELEASErelease-1.27.1Sergey Kandaurov1-0/+49
2024-08-12Updated OpenSSL used for win32 builds.Sergey Kandaurov1-1/+1
2024-08-12Mp4: rejecting unordered chunks in stsc atom.Roman Arutyunyan1-0/+7
Unordered chunks could result in trak->end_chunk smaller than trak->start_chunk in ngx_http_mp4_crop_stsc_data(). Later in ngx_http_mp4_update_stco_atom() this caused buffer overread while trying to calculate trak->end_offset.
2024-08-12Mp4: fixed buffer underread while updating stsz atom.Roman Arutyunyan1-3/+4
While cropping an stsc atom in ngx_http_mp4_crop_stsc_data(), a 32-bit integer overflow could happen, which could result in incorrect seeking and a very large value stored in "samples". This resulted in a large invalid value of trak->end_chunk_samples. This value is further used to calculate the value of trak->end_chunk_samples_size in ngx_http_mp4_update_stsz_atom(). While doing this, a large invalid value of trak->end_chunk_samples could result in reading memory before stsz atom start. This could potentially result in a segfault.
2024-08-09Stream ssl_preread: do not reallocate a parsed SNI host.Sergey Kandaurov1-1/+1
We own this memory from the session pool.
2024-08-09QUIC: zero out existing keying material only.Sergey Kandaurov1-6/+23
Previously, this used to have extra ngx_explicit_memzero() calls from within ngx_quic_keys_cleanup(), which might be suboptimal.
2024-08-09QUIC: discarding 0-RTT keys.Sergey Kandaurov1-0/+10
For simplicity, this is done on successful decryption of a 1-RTT packet.
2024-08-09Typo fixed.Sergey Kandaurov1-2/+2
2024-08-09Version bump.Sergey Kandaurov1-2/+2
2024-07-18HTTP/2: close connections initialized during graceful shutdown.Kasei Wang1-0/+5
In some rare cases, graceful shutdown may happen while initializing an HTTP/2 connection. Previously, such a connection ignored the shutdown and remained active. Now it is gracefully closed prior to processing any streams to eliminate the shutdown delay.
2024-06-27Stream: allow servers with no handler.Roman Arutyunyan1-7/+7
Previously handlers were mandatory. However they are not always needed. For example, a server configured with ssl_reject_handshake does not need a handler. Such servers required a fake handler to pass the check. Now handler absence check is moved to runtime. If handler is missing, the connection is closed with 500 code.
2024-05-28release-1.27.0 tagSergey Kandaurov1-0/+1
2024-05-28nginx-1.27.0-RELEASErelease-1.27.0Sergey Kandaurov1-0/+68
2024-05-28HTTP/3: fixed handling of zero-length literal field line.Sergey Kandaurov1-0/+3
Previously, st->value was passed with NULL data pointer to header handlers.
2024-05-28QUIC: ngx_quic_buffer_t use-after-free protection.Roman Arutyunyan1-0/+1
Previously the last chain field of ngx_quic_buffer_t could still reference freed chains and buffers after calling ngx_quic_free_buffer(). While normally an ngx_quic_buffer_t object should not be used after freeing, resetting last_chain field would prevent a potential use-after-free.
2024-05-28QUIC: ignore CRYPTO frames after handshake completion.Roman Arutyunyan1-0/+5
Sending handshake-level CRYPTO frames after the client's Finished message could lead to memory disclosure and a potential segfault, if those frames are sent in one packet with the Finished frame.
2024-05-28HTTP/3: fixed dynamic table overflow.Roman Arutyunyan1-1/+1
While inserting a new entry into the dynamic table, first the entry is added, and then older entries are evicted until table size is within capacity. After the first step, the number of entries may temporarily exceed the maximum calculated from capacity by one entry, which previously caused table overflow. The easiest way to trigger the issue is to keep adding entries with empty names and values until first eviction. The issue was introduced by 987bee4363d1.
2024-05-28HTTP/3: decoder stream pre-creation.Roman Arutyunyan3-9/+17
Previously a decoder stream was created on demand for sending Section Acknowledgement, Stream Cancellation and Insert Count Increment. If conditions for sending any of these instructions never happen, a decoder stream is not created at all. These conditions include client not using the dynamic table and no streams abandoned by server (RFC 9204, Section 2.2.2.2). However RFC 9204, Section 4.2 defines only one condition for not creating a decoder stream: An endpoint MAY avoid creating a decoder stream if its decoder sets the maximum capacity of the dynamic table to zero. The change enables pre-creation of the decoder stream at HTTP/3 session initialization if maximum dynamic table capacity is not zero. Note that this value is currently hardcoded to 4096 bytes and is not configurable, so the stream is now always created. Also, the change fixes a potential stack overflow when creating a decoder stream in ngx_http_v3_send_cancel_stream() while draining a request stream by ngx_drain_connections(). Creating a decoder stream involves calling ngx_get_connection(), which calls ngx_drain_connections(), which will drain the same request stream again. If client's MAX_STREAMS for uni stream is high enough, these recursive calls will continue until we run out of stack. Otherwise, decoder stream creation will fail at some point and the request stream connection will be drained. This may result in use-after-free, since this connection could still be referenced up the stack.
2024-05-28QUIC: client transport parameter data length checking.Sergey Kandaurov1-0/+8
2023-11-25Upstream: variables support in proxy_limit_rate and friends.J Carter6-18/+18
2024-05-23Optimized chain link usage (ticket #2614).Roman Arutyunyan6-14/+45
Previously chain links could sometimes be dropped instead of being reused, which could result in increased memory consumption during long requests. A similar chain link issue in ngx_http_gzip_filter_module was fixed in da46bfc484ef (1.11.10). Based on a patch by Sangmin Lee.
2024-05-16Configure: fixed building libatomic test.Edgar Bonet1-1/+1
Using "long *" instead of "AO_t *" leads either to -Wincompatible-pointer-types or -Wpointer-sign warnings, depending on whether long and size_t are compatible types (e.g., ILP32 versus LP64 data models). Notably, -Wpointer-sign warnings are enabled by default in Clang only, and -Wincompatible-pointer-types is an error starting from GCC 14. Signed-off-by: Edgar Bonet <bonet@grenoble.cnrs.fr>
2024-05-03Stream pass: disabled passing from or to udp.Roman Arutyunyan1-0/+9
Passing from udp was not possible for the most part due to preread buffer restriction. Passing to udp could occasionally work, but the connection would still be bound to the original listen rbtree, which prevented it from being deleted on connection closure.
2024-05-03SSL: fixed possible configuration overwrite loading "engine:" keys.Sergey Kandaurov1-2/+2
When loading certificate keys via ENGINE_load_private_key() in runtime, it was possible to overwrite configuration on ENGINE_by_id() failure. OpenSSL documention doesn't describe errors in details, the only reason I found in the comment to example is when the engine is not available.