Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
377b8de
Update image (#55648)
adegeo Aug 25, 2026
d0fa3a5
Annotate changed files with build warnings (#55650)
gewarren Aug 25, 2026
04d0c5a
Clarify MTP message bus UID filtering (#55646)
Evangelink Aug 25, 2026
f597daa
Bump the dotnet group with 1 update (#55718)
dependabot[bot] Aug 26, 2026
4330fbf
Bump the dotnet group with 4 updates (#55734)
dependabot[bot] Aug 26, 2026
df40d2f
Bump the dotnet group with 2 updates (#55720)
dependabot[bot] Aug 26, 2026
9c15423
Document Azure DevOps group limitations (#55325)
Evangelink Aug 26, 2026
71ec8a7
Document current MSTest and MTP features (#55742)
Evangelink Aug 26, 2026
e3da7ba
Document Schannel handshake message limits for SslStream (#55739)
rzikm Aug 26, 2026
321718d
Make SslStream certificate guidance peer-agnostic (client + server) (…
rzikm Aug 26, 2026
bd51fd9
Bump the dotnet group with 1 update (#55671)
dependabot[bot] Aug 26, 2026
c4077a0
Clarify architecture migration from VSTest to MTP (#55748)
Evangelink Aug 26, 2026
0e8aae7
Clarify Azure DevOps group defaults by MTP release (#55746)
Evangelink Aug 26, 2026
2e9ccad
Bump the dotnet group with 5 updates (#55738)
dependabot[bot] Aug 26, 2026
76da820
Bump the dotnet group with 7 updates (#55735)
dependabot[bot] Aug 26, 2026
df7e399
Bump the dotnet group with 7 updates (#55733)
dependabot[bot] Aug 26, 2026
3e535ae
Bump the dotnet group with 4 updates (#55732)
dependabot[bot] Aug 26, 2026
6f29298
Bump the dotnet group with 2 updates (#55731)
dependabot[bot] Aug 26, 2026
e1c0d6f
Bump the dotnet group with 4 updates (#55730)
dependabot[bot] Aug 26, 2026
493b3fb
Bump the dotnet group with 2 updates (#55729)
dependabot[bot] Aug 26, 2026
4f564d7
Bump the dotnet group with 2 updates (#55728)
dependabot[bot] Aug 26, 2026
2b6e14e
Bump the dotnet group with 2 updates (#55726)
dependabot[bot] Aug 26, 2026
34ad4d3
Bump the dotnet group with 4 updates (#55713)
dependabot[bot] Aug 26, 2026
7d294fc
Bump the dotnet group with 1 update (#55716)
dependabot[bot] Aug 26, 2026
d4e03be
Bump the dotnet group with 1 update (#55710)
dependabot[bot] Aug 26, 2026
5e94b0f
Bump the dotnet group with 2 updates (#55709)
dependabot[bot] Aug 26, 2026
c9f7c66
Bump the dotnet group with 4 updates (#55706)
dependabot[bot] Aug 26, 2026
3a02b8f
Bump the dotnet group with 1 update (#55704)
dependabot[bot] Aug 26, 2026
63b1579
Bump the dotnet group with 2 updates (#55698)
dependabot[bot] Aug 26, 2026
243f6c2
Bump the dotnet group with 2 updates (#55696)
dependabot[bot] Aug 26, 2026
81dd7ad
Bump the dotnet group with 3 updates (#55677)
dependabot[bot] Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/generate-preview-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
runs-on: ubuntu-latest
permissions:
statuses: read
checks: write
pull-requests: write
steps:
- name: Harden Runner
Expand All @@ -23,3 +24,4 @@ jobs:
- uses: dotnet/docs-tools/actions/preview-link-generator@main
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
annotate_file_warnings: true
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.1.0" />
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation.Quality" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation.Quality" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
<PackageReference Include="MSTest" Version="4.3.3" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.1.0" />
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation.Reporting" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.AI.Abstractions" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation.Reporting" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.Evaluation.Safety" Version="10.3.0-preview.1.26109.11" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
<PackageReference Include="MSTest" Version="4.3.3" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.AI" Version="10.8.1" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.1.0" />
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="OpenAI" Version="2.12.0" />
<PackageReference Include="OpenAI" Version="2.13.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="ModelContextProtocol" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="ModelContextProtocol" Version="2.2.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="OllamaSharp" Version="5.4.27" />
<PackageReference Include="System.Threading.RateLimiting" Version="10.0.10" />
<PackageReference Include="OllamaSharp" Version="5.4.30" />
<PackageReference Include="System.Threading.RateLimiting" Version="10.0.11" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.10" />
<PackageReference Include="OllamaSharp" Version="5.4.27" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.11" />
<PackageReference Include="OllamaSharp" Version="5.4.30" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.17.0" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" Version="2.8.0-beta.1" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.17.0" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.18.0" />
<!--
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.2" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.8.3" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.10" />
<PackageReference Include="CommunityToolkit.VectorData.InMemory" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.11" />
<PackageReference Include="CommunityToolkit.VectorData.InMemory" Version="1.0.1" />
</ItemGroup>

</Project>
Binary file modified docs/architecture/modern-web-apps-azure/media/image5-8.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.10" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.11" />
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.20.2" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.11.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.29.1" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.14.0" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.14.1" />
</ItemGroup>

</Project>
6 changes: 3 additions & 3 deletions docs/azure/sdk/snippets/logging/LoggingSampleApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.Extensions.AspNetCore.DataProtection.Blobs" Version="1.5.3" />
<PackageReference Include="Azure.Extensions.AspNetCore.DataProtection.Keys" Version="1.6.3" />
<PackageReference Include="Azure.Extensions.AspNetCore.DataProtection.Blobs" Version="1.5.4" />
<PackageReference Include="Azure.Extensions.AspNetCore.DataProtection.Keys" Version="1.6.4" />
<PackageReference Include="Azure.Identity" Version="1.21.0" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.14.0" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.14.1" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.AmbientMetadata.Build" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.AmbientMetadata.Build" Version="10.9.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.ResourceMonitoring" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.ResourceMonitoring" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Spectre.Console" Version="0.57.2" />
</ItemGroup>

Expand Down
8 changes: 4 additions & 4 deletions docs/core/enrichment/snippets/enrichment/Enrichment.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Telemetry" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Telemetry" Version="10.9.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.AsyncState" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.AsyncState" Version="10.9.0" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.11" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Http.Diagnostics" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.Http.Diagnostics" Version="10.9.0" />
</ItemGroup>

</Project>
52 changes: 43 additions & 9 deletions docs/core/extensions/sslstream-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ title: TLS/SSL best practices
description: Learn the best practices when using SslStream in .NET.
author: rzikm
ms.author: radekzikmund
ms.date: 03/13/2023
ms.date: 08/26/2026
ai-usage: ai-assisted
---

# TLS/SSL best practices
Expand All @@ -25,19 +26,52 @@ Deferring the decision to the OS automatically uses the most recent version of T
> [!NOTE]
> <xref:System.Net.Security.CipherSuitesPolicy> is not supported on Windows and attempts to instantiate it will cause <xref:System.NotSupportedException> to be thrown.

## Specify a server certificate
## Specify a local certificate

When authenticating as a server, <xref:System.Net.Security.SslStream> requires an <xref:System.Security.Cryptography.X509Certificates.X509Certificate2> instance. It is recommended to always use an <xref:System.Security.Cryptography.X509Certificates.X509Certificate2> instance which also contains the private key.
When authenticating as a server, <xref:System.Net.Security.SslStream> always requires a certificate. When authenticating as a client, you also provide a certificate if the server requests one for mutual TLS (mTLS). In both roles, the certificate must be an <xref:System.Security.Cryptography.X509Certificates.X509Certificate2> instance that contains the private key.

There are multiple ways that a server certificate can be passed to <xref:System.Net.Security.SslStream>:
Recent .NET versions handle the server and client sides symmetrically, so the following guidance applies whether the application authenticates as a server, a client, or both.

- Directly as a parameter to <xref:System.Net.Security.SslStream.AuthenticateAsServerAsync*?displayProperty=nameWithType> or via <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificate?displayProperty=nameWithType> property
- From a selection callback in <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateSelectionCallback?displayProperty=nameWithType> property
- By passing a <xref:System.Net.Security.SslStreamCertificateContext> in the <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateContext?displayProperty=nameWithType> property
You can provide the certificate to <xref:System.Net.Security.SslStream> in several ways.

The recommended approach is to use the <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateContext?displayProperty=nameWithType> property. When the certificate is obtained by one of the other two ways, a <xref:System.Net.Security.SslStreamCertificateContext> instance is created internally by the <xref:System.Net.Security.SslStream> implementation. Creating a <xref:System.Net.Security.SslStreamCertificateContext> involves building an <xref:System.Security.Cryptography.X509Certificates.X509Chain> which is a CPU intensive operation. It is more efficient to create a <xref:System.Net.Security.SslStreamCertificateContext> once and reuse it for multiple <xref:System.Net.Security.SslStream> instances.
When you authenticate as a server:

Reusing <xref:System.Net.Security.SslStreamCertificateContext> instances also enables additional features such us [TLS session resumption](https://datatracker.ietf.org/doc/html/rfc5077) on Linux servers.
- Set the <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificate?displayProperty=nameWithType> property, or pass the certificate to <xref:System.Net.Security.SslStream.AuthenticateAsServerAsync*?displayProperty=nameWithType>.
- Return the certificate from the <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateSelectionCallback?displayProperty=nameWithType> callback.
- Set a <xref:System.Net.Security.SslStreamCertificateContext> on the <xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateContext?displayProperty=nameWithType> property.

When you authenticate as a client:

- Add the certificate to the <xref:System.Net.Security.SslClientAuthenticationOptions.ClientCertificates?displayProperty=nameWithType> collection, or pass a collection that contains it to <xref:System.Net.Security.SslStream.AuthenticateAsClientAsync*?displayProperty=nameWithType>.
- Return the certificate from the <xref:System.Net.Security.SslClientAuthenticationOptions.LocalCertificateSelectionCallback?displayProperty=nameWithType> callback.
- Set a <xref:System.Net.Security.SslStreamCertificateContext> on the <xref:System.Net.Security.SslClientAuthenticationOptions.ClientCertificateContext?displayProperty=nameWithType> property.

> [!NOTE]
> The <xref:System.Net.Security.SslClientAuthenticationOptions.ClientCertificateContext> property is available starting in .NET 8.

For better performance, use the certificate context property (<xref:System.Net.Security.SslServerAuthenticationOptions.ServerCertificateContext> or <xref:System.Net.Security.SslClientAuthenticationOptions.ClientCertificateContext>). When you provide the certificate in one of the other ways, <xref:System.Net.Security.SslStream> creates a <xref:System.Net.Security.SslStreamCertificateContext> internally. Creating the context builds an <xref:System.Security.Cryptography.X509Certificates.X509Chain>, which is a CPU-intensive operation, so it's more efficient to create the context once and reuse it across multiple <xref:System.Net.Security.SslStream> instances.

Reusing a <xref:System.Net.Security.SslStreamCertificateContext> instance also enables extra features such as [TLS session resumption](https://datatracker.ietf.org/doc/html/rfc5077) on Linux servers.

### Send intermediate certificates to the peer

When an intermediate certificate authority issues the local certificate, the peer might not be able to build the full certificate chain unless the handshake includes the intermediate certificates. To send these intermediates, create a <xref:System.Net.Security.SslStreamCertificateContext> with the <xref:System.Net.Security.SslStreamCertificateContext.Create*> method and pass the intermediate certificates in the `additionalCertificates` parameter:

```csharp
X509Certificate2 leafCertificate = GetLeafCertificate();
X509Certificate2Collection intermediates = GetIntermediateCertificates();

SslStreamCertificateContext certificateContext =
SslStreamCertificateContext.Create(leafCertificate, intermediates);

// When you authenticate as a server.
serverOptions.ServerCertificateContext = certificateContext;

// When you authenticate as a client for mutual TLS.
clientOptions.ClientCertificateContext = certificateContext;
```

The context works the same way for both roles. On the client side, the certificate context is the recommended way to send intermediates, because the alternative—adding the intermediates to the machine or user certificate store—affects every application on the system.

## Custom `X509Certificate` validation

Expand Down
Loading
Loading