← Back to Article List         
What is mTLS, and when is it used?

What is mTLS, and when is it used?

Published on 29 Sep 2026     13 min read Microservices
Authentication & Security

What Is mTLS, and When Is It Used?

mTLS (Mutual TLS) is a security mechanism where both sides of a connection authenticate each other using digital certificates.

With normal HTTPS/TLS:

Client verifies the server.

With mTLS:

Client verifies the server AND server verifies the client.

This makes mTLS particularly useful for microservice-to-microservice communication, where each service needs strong proof of the identity of the other service.


1. Normal TLS vs mTLS

Normal TLS / HTTPS

When Order Service calls Payment Service:

Order Service
     |
     | HTTPS
     v
Payment Service
     |
     | Server Certificate
     v
Order verifies Payment

The client verifies:

"Am I really communicating with Payment Service?"

But Payment Service does not automatically authenticate Order Service through TLS itself.

Application authentication might instead use:

JWT
OAuth Access Token
API Key

Mutual TLS

With mTLS:

Order Service
     |
     | Client Certificate
     | <---------------->
     | Server Certificate
     v
Payment Service

Both sides authenticate:

Order Service
     |
     | verifies
     v
Payment Service

AND

Payment Service
     |
     | verifies
     v
Order Service

Hence:

Mutual TLS


2. Why Do We Need mTLS?

Consider:

Order Service
     |
     v
Payment Service

Payment Service should not trust every application that can reach its network endpoint.

Without strong service authentication:

Order Service --------+
                      |
Inventory Service ----+----> Payment Service
                      |
Attacker -------------+

With mTLS, Payment Service can require a trusted client certificate.

Order Service
     |
     | Valid Certificate ✓
     v
Payment Service


Unknown Service
     |
     | Missing/Invalid Certificate ✗
     v
Connection Rejected

3. Purpose of mTLS

mTLS provides three major security properties.

Authentication

Both parties can authenticate each other.

Service A <----> Service B

A verifies B
B verifies A

Encryption

Traffic is encrypted using TLS.

Order Service
     |
     | Encrypted
     v
Payment Service

Integrity

TLS protects transmitted data against undetected modification in transit.

So conceptually:

mTLS
 |
 +--> Encryption
 |
 +--> Integrity
 |
 +--> Mutual Authentication

4. How mTLS Works

Suppose:

Order Service
     |
     v
Payment Service

Both have certificates.

Order Service
----------------
Client Certificate
Private Key


Payment Service
----------------
Server Certificate
Private Key

A trusted Certificate Authority (CA) establishes the certificate trust chain.

             Trusted CA
             /       \
            /         \
           v           v
     Order Cert    Payment Cert

5. Simplified mTLS Handshake

The actual TLS handshake is more detailed, but conceptually:

Order Service                     Payment Service
     |                                  |
     | -------- Connect --------------> |
     |                                  |
     | <---- Server Certificate ------- |
     |                                  |
     | Verify Payment Certificate       |
     |                                  |
     | <--- Request Client Cert -------- |
     |                                  |
     | ----- Client Certificate ------> |
     |                                  |
     |                    Verify Order  |
     |                    Certificate   |
     |                                  |
     | <==== Secure TLS Channel ======> |

Both services now have authenticated certificate identities and an encrypted channel.


6. What Is Inside a Certificate?

A certificate contains information such as:

Subject / identity information
Issuer
Public Key
Validity Period
Serial Number
Digital Signature
SAN (Subject Alternative Name)

Conceptually:

Certificate
|
+-- Identity
|
+-- Public Key
|
+-- Issuer
|
+-- Expiration
|
+-- Signature

The associated private key must remain private.


7. Certificate Authority

A Certificate Authority (CA) issues/signs certificates.

For example:

              Internal CA
             /     |      \
            /      |       \
           v       v        v
       Order    Payment   Inventory
       Cert      Cert       Cert

Services are configured to trust certificates chaining to approved CAs.

The model becomes:

Payment Service:

"I trust this CA."

        ↓

"Order Service presented a
certificate issued by that CA."

        ↓

Certificate validation succeeds

Additional authorization may still be necessary.


8. Authentication vs Authorization

mTLS primarily provides authentication of the connection peer.

Suppose Payment Service determines:

Caller = Order Service

That doesn't automatically mean:

Order Service can perform everything

You still need authorization.

mTLS
 |
 v
Who is calling?
 |
 v
Order Service
 |
 v
Authorization
 |
 | payments.process?
 |
 +---- YES ---> Process
 |
 +---- NO ----> Reject

This distinction is extremely important.


9. ASP.NET Core mTLS Example

ASP.NET Core/Kestrel can require client certificates.

For example:

using Microsoft.AspNetCore.Server.Kestrel.Https;

var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel(options =>
{
    options.ConfigureHttpsDefaults(httpsOptions =>
    {
        httpsOptions.ClientCertificateMode =
            ClientCertificateMode.RequireCertificate;
    });
});

builder.Services.AddControllers();

var app = builder.Build();

app.UseHttpsRedirection();

app.MapControllers();

app.Run();

Now the server requires a client certificate during the TLS connection.

In a real production system, certificate trust and validation must also be configured correctly for your PKI/deployment architecture.


10. Reading the Client Certificate

Inside ASP.NET Core:

var certificate =
    await HttpContext
        .Connection
        .GetClientCertificateAsync();

For example:

[HttpGet]
public async Task<IActionResult> Get()
{
    var certificate =
        await HttpContext
            .Connection
            .GetClientCertificateAsync();

    if (certificate == null)
    {
        return Unauthorized();
    }

    return Ok(new
    {
        Subject = certificate.Subject,
        Issuer = certificate.Issuer
    });
}

However, production authorization should not simply trust arbitrary Subject strings. Certificate authentication/trust validation should be configured systematically.


11. ASP.NET Core Certificate Authentication

ASP.NET Core also supports certificate authentication.

Package, depending on your target framework/project references:

dotnet add package Microsoft.AspNetCore.Authentication.Certificate

Configuration:

using Microsoft.AspNetCore.Authentication.Certificate;

builder.Services
    .AddAuthentication(
        CertificateAuthenticationDefaults
            .AuthenticationScheme)
    .AddCertificate(options =>
    {
        options.AllowedCertificateTypes =
            CertificateTypes.All;
    });

builder.Services.AddAuthorization();

Pipeline:

app.UseAuthentication();
app.UseAuthorization();

Controller:

[Authorize]
[ApiController]
[Route("api/payments")]
public class PaymentsController : ControllerBase
{
    [HttpPost]
    public IActionResult ProcessPayment()
    {
        return Ok("Payment processed");
    }
}

Conceptually:

Client Certificate
       |
       v
TLS validation
       |
       v
Certificate Authentication
       |
       v
ClaimsPrincipal
       |
       v
Authorization
       |
       v
Controller

12. Calling an mTLS API from Another .NET Service

Suppose Order Service has a client certificate.

var certificate =
    new X509Certificate2(
        "order-service.pfx",
        "certificate-password");

var handler =
    new HttpClientHandler();

handler.ClientCertificates.Add(certificate);

var httpClient =
    new HttpClient(handler);

var response =
    await httpClient.PostAsync(
        "https://payment-service/api/payments",
        null);

Flow:

Order Service
     |
     | order-service certificate
     v
Payment Service

For production systems, avoid casually storing the .pfx and its password alongside application code. Use secure certificate/key management provided by your deployment platform.


13. Using IHttpClientFactory

A more appropriate ASP.NET Core pattern is to configure an HttpClient through DI.

builder.Services
    .AddHttpClient<PaymentClient>()
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        var certificate =
            new X509Certificate2(
                "order-service.pfx",
                "certificate-password");

        var handler =
            new HttpClientHandler();

        handler.ClientCertificates.Add(
            certificate);

        return handler;
    });

Then:

public class PaymentClient
{
    private readonly HttpClient _httpClient;

    public PaymentClient(
        HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public async Task ProcessPaymentAsync()
    {
        await _httpClient.PostAsync(
            "https://payment-service/api/payments",
            null);
    }
}

Again, the certificate/private key should be provisioned securely in production.


14. When Is mTLS Used?

mTLS is particularly useful when you need strong machine/workload identity.

Common scenarios include:

Microservice-to-microservice communication

Order Service
     |
     | mTLS
     v
Payment Service

Kubernetes

Pod A
  |
  | mTLS
  v
Pod B

Service Mesh

For example:

Istio
Linkerd

can automate mTLS between workloads.

Financial systems

High-security internal service communication may use certificate-based authentication.

B2B APIs

For example:

Company A
    |
    | Client Certificate
    v
Company B API

Zero-Trust architectures

Each connection must establish workload identity rather than being trusted merely because it originates from an internal network.


15. mTLS in Kubernetes

Imagine:

Order Pod
   |
   v
Payment Pod

Manually managing certificates across hundreds of pods becomes difficult.

You would have to manage:

Certificate generation
Certificate distribution
Private keys
Renewal
Expiration
Trust
Revocation
Rotation

That's one reason service meshes can be useful.


16. mTLS with Service Mesh

Conceptually:

Order Service
      |
   Sidecar/Proxy
      |
      | mTLS
      |
   Sidecar/Proxy
      |
Payment Service

The infrastructure layer can manage:

Certificate issuance
Certificate rotation
mTLS
Workload identity
Trust
Traffic policies

instead of each application manually implementing the entire certificate lifecycle.


17. TLS vs mTLS

Feature TLS mTLS
Encryption Yes Yes
Integrity Yes Yes
Server authenticated Yes Yes
Client authenticated by certificate No Yes
Client certificate Usually no Yes
Server certificate Yes Yes
Common public website usage Yes Less common
Internal service authentication Possible with another auth mechanism Strong option

The simplest distinction:

TLS
=
Client verifies Server


mTLS
=
Client verifies Server
+
Server verifies Client

18. mTLS vs OAuth 2.0

This is an important interview comparison.

mTLS OAuth 2.0
Certificate-based Token-based framework
Operates at TLS/transport layer Primarily application-layer authorization
Strong workload authentication Access-token-based API access
Requires certificate lifecycle Requires token/identity infrastructure
No scopes inherently Supports scopes/permissions
Excellent for service identity Excellent for API authorization

OAuth might say:

Caller:
Order Service

Permission:
payments.process

mTLS establishes:

Connection peer:
Trusted Order Service certificate

19. Can OAuth and mTLS Be Used Together?

Yes.

For security-sensitive environments:

Order Service
     |
     | mTLS
     |
     | Authorization:
     | Bearer <access_token>
     v
Payment Service

Now you have:

mTLS
   |
   +--> Secure encrypted connection
   |
   +--> Certificate-based peer identity


OAuth
   |
   +--> Access Token
   |
   +--> Application permissions

Then:

Connection Authentication
          +
Application Authorization

provides defense in depth.


20. mTLS vs JWT

These are different technologies.

mTLS
=
Secure mutually authenticated connection


JWT
=
Token format

A JWT may contain:

{
  "sub": "order-service",
  "aud": "payment-api",
  "roles": [
    "payments.process"
  ]
}

mTLS instead establishes identity through certificate possession and trust during the TLS handshake.

They can be used together.


21. mTLS vs API Key

API Key:

Order Service
     |
     | X-API-Key: abc123
     v
Payment Service

mTLS:

Order Service
     |
     | Client Certificate
     v
Payment Service

An API key is a shared secret/credential.

mTLS uses public-key cryptography and certificates, so the private key itself does not need to be transmitted to the server.


22. Certificate Rotation

Certificates expire.

For example:

Order Certificate

Valid From:
01-Jan

Valid Until:
01-Apr

Before expiry:

Old Certificate
       |
       v
New Certificate
       |
       v
Update / rotate trust

At scale, manual rotation is operationally difficult.

Therefore automation is important.

Platforms/service meshes can automate much of the lifecycle.


23. Certificate Revocation

If a private key is compromised, the certificate may need to be revoked or otherwise removed from trust.

Certificate ecosystems can use mechanisms such as:

CRL
Certificate Revocation List

OCSP
Online Certificate Status Protocol

Actual revocation behavior depends heavily on the PKI and TLS architecture.

Short-lived workload certificates are another common strategy because they reduce the useful lifetime of compromised credentials.


24. Advantages of mTLS

Strong mutual authentication

Both client and server authenticate each other.

Encryption

All communication is encrypted.

Integrity

Traffic modification in transit is detectable.

No shared password

Private keys aren't transmitted like shared passwords.

Strong microservice identity

Useful for:

Service A
    ↓
Service B

Zero-Trust friendly

Network location alone isn't enough.

Infrastructure automation

Service meshes can automate certificates and mTLS.


25. Disadvantages

Certificate management

You must handle:

Issuance
Distribution
Trust
Renewal
Rotation
Revocation

Operational complexity

Manual mTLS across hundreds of services can become difficult.

Debugging

Certificate/trust failures can be harder to diagnose.

Expiration

Expired certificates can break communication.

Authorization still needed

mTLS answering:

Who is calling?

does not automatically answer:

What is that service allowed to do?

26. Best Practices

  1. Use a trusted private/public CA appropriate to your architecture.
  2. Never share private keys between services.
  3. Give each workload its own identity.
  4. Protect private keys securely.
  5. Automate certificate issuance.
  6. Automate certificate rotation.
  7. Monitor certificate expiration.
  8. Use short-lived workload certificates where appropriate.
  9. Validate the certificate trust chain.
  10. Validate the expected service identity.
  11. Use TLS 1.2+ according to platform/security requirements.
  12. Combine mTLS with authorization policies.
  13. Don't assume private networking replaces authentication.
  14. Consider service-mesh-managed mTLS at Kubernetes scale.
  15. Don't hard-code certificate passwords in source code.

27. When Should You Use mTLS?

mTLS is a good choice when:

✓ Strong service identity is required

✓ Microservices communicate internally

✓ Zero-Trust architecture is required

✓ B2B APIs require client certificates

✓ Kubernetes/service mesh manages certificates

✓ Sensitive financial/security operations exist

✓ Both endpoints must authenticate each other

You may not need to manually implement mTLS when:

Small/simple system
       +
OAuth/workload identity already meets requirements
       +
No regulatory/security requirement
       +
Certificate lifecycle would add unnecessary complexity

Security architecture should match the actual threat model.


28. Microservices Example

Consider:

Internet
   |
   v
API Gateway
   |
   v
Order Service
   |
   | mTLS
   |
   | OAuth Access Token
   v
Payment Service

Payment Service performs:

Step 1
TLS handshake
     |
     v
Validate Order Service certificate


Step 2
Validate OAuth Access Token
     |
     v
Caller identity established


Step 3
Authorization
     |
     v
Does caller have payments.process?
     |
     +---- Yes ---> Process
     |
     +---- No ----> 403

This is a strong defense-in-depth architecture.


29. Key Points

For interviews, remember:

  1. mTLS = Mutual Transport Layer Security.
  2. Normal TLS authenticates the server to the client.
  3. mTLS additionally authenticates the client using a certificate.
  4. Both sides use certificates/private keys.
  5. mTLS provides encryption and integrity.
  6. It provides strong machine/workload authentication.
  7. It is commonly used for internal microservice communication.
  8. It is common in Zero-Trust environments.
  9. Kubernetes service meshes can automate mTLS.
  10. mTLS does not replace fine-grained authorization.
  11. OAuth and mTLS can be combined.
  12. mTLS is not the same as JWT.
  13. Certificate lifecycle management is the main operational challenge.
  14. Private keys must be strongly protected.
  15. Certificate issuance and rotation should be automated at scale.

30. Interview Questions and Answers

Q1. What is mTLS?

Answer:

mTLS, or Mutual TLS, is an extension of normal TLS where both the client and server authenticate each other using certificates. It provides encrypted communication, integrity, and mutual authentication.


Q2. TLS vs mTLS?

Answer:

TLS:
Client verifies Server


mTLS:
Client verifies Server
+
Server verifies Client

Q3. Why use mTLS between Microservices?

To establish strong workload identities and prevent a service from being trusted merely because it can access the internal network.


Q4. Does mTLS encrypt communication?

Yes.

It uses TLS, so the connection receives TLS encryption and integrity protection in addition to mutual certificate authentication.


Q5. Does mTLS replace OAuth?

Not necessarily.

mTLS can authenticate the connection/workload, while OAuth access tokens can provide application-level authorization information such as permissions.

They can be used together:

mTLS
+
OAuth

Q6. Does mTLS replace authorization?

No.

mTLS may establish:

Caller = Order Service

You still need to determine:

Can Order Service process payments?

Q7. Where is mTLS commonly used?

Examples include:

  • microservice-to-microservice communication
  • Kubernetes
  • service meshes
  • Zero-Trust networks
  • B2B APIs
  • security-sensitive internal systems

Q8. What is the biggest challenge with mTLS?

Certificate lifecycle management.

You must manage:

Issuance
Distribution
Private keys
Expiration
Rotation
Revocation/trust

Q9. How is mTLS managed in Kubernetes?

A service mesh such as Istio or Linkerd can automate much of the workload certificate issuance, rotation and mutual TLS configuration.


Q10. What happens if the client certificate is invalid?

The TLS connection can be rejected before the HTTP request reaches the normal application endpoint.

Conceptually:

Client
   |
Invalid Certificate
   |
   v
TLS Handshake
   |
   X
Connection Rejected

Short Interview Answer

mTLS, or Mutual TLS, is a TLS configuration where both the client and server authenticate each other using digital certificates. Normal HTTPS generally authenticates the server to the client, whereas mTLS additionally requires the client to prove its identity with a certificate. In microservices, mTLS is used for strong service-to-service authentication, particularly in Zero-Trust, Kubernetes, service-mesh, B2B, and security-sensitive environments. It provides encrypted communication, integrity, and workload authentication, but fine-grained authorization is still required. OAuth access tokens and mTLS can also be combined.

The easiest diagram to remember:

             Normal TLS

Order Service
     |
     | Verify server
     v
Payment Service
     |
Server Certificate


                mTLS

Order Service  <================> Payment Service
     |                                |
Client Certificate              Server Certificate
     |                                |
     +---- Payment verifies Order     |
                                      |
     +---- Order verifies Payment ----+

                 +
          Encrypted Channel
                 +
          Authorization

TLS = server authentication + secure channel.
mTLS = secure channel + authentication of both sides.