An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
Hey S Abijith,
The core of what youre asking for runs into a protocol-level limitation so its important to be very clear about what TLS can and cannot do honestly.
Your two requirements were: the HTTPS server must disable session resumption, and even with session resumption disabled it should not perform a full handshake each time. Those two are essentially incompatible.
In TLS the only standard way to avoid paying the full handshake cost on every new TCP connection is session resumption (session IDs, session tickets, TLS 1.3 PSK etc). If you turn off all resumption mechanisms every new connection has to do a full handshake, theres no "third mode" where resumption is off but the handshake is still abbreviated.
TLS 1.3 does make full handshakes faster (fewer round-trips than TLS 1.2) but its still a full handshake, its just a more efficient protocol.
On the .NET 8 side heres the situation: ASP.NET Core and Kestrel dont implement TLS themselves, they use the OS TLS stack (SChannel on Windows, OpenSSL on Linux). With SslServerAuthenticationOptions you can configure protocol versions, cipher suites, certificates etc. However in .NET 8 there is no documented server-side setting like "disable TLS resumption for this Kestrel endpoint".
Theres an SslServerAuthenticationOptions.AllowTlsResume property but its for newer runtimes (.NET 9+), it doesnt exist in .NET 8 so you cant rely on it there.
If you really must disable session resumption for policy or compliance reasons the realistic options are:
Terminate TLS on a reverse proxy or load balancer. Put nginx, HAProxy, Apache, F5, Cloudflare etc in front of your .NET app and configure TLS there. Those components give you explicit controls:
nginx
ssl_session_tickets off;
ssl_session_cache off;
That effectively disables session resumption at the edge. Your .NET 8 app then talks plain HTTP behind the proxy.
Use OS-level TLS settings (Windows/SChannel): On Windows SChannel allows you to restrict or disable the server session cache via registry settings such as MaximumCacheSize. Setting this to 0 disables session caching and thus resumption, but this is global for all SChannel-using services on the machine, not something .NET controls per application.
On Linux/OpenSSL resumption is typically controlled by OpenSSL options (session tickets, server cache) but those options are not exposed directly by .NET, youd need to manage TLS at a proxy or native layer instead.
A more realistic framing would be: If your main concern is security not passing a specific "no resumption" checkbox, use TLS 1.3, disable 0-RTT if youre worried about replay, keep reasonable ticket lifetimes. TLS 1.3 still gives you perfect forward secrecy even when using resumption.
If you truly must disable resumption for compliance then accept that every new TCP connection will do a full handshake and you probably need to manage TLS at a reverse proxy or OS level not inside .NET 8/Kestrel itself.
Shortly, with .NET 8 you cant really get "session resumption disabled but no full TLS handshakes", the TLS spec doesnt support that combination and .NET 8 doesnt expose a fine-grained server-side resumption toggle anyway. You either terminate TLS somewhere you fully control it or you reconsider requirement #2.