# rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: tls: client didn't provide a certificate"

- **ID:** `go/grpc-missing-client-certificate`
- **Domain:** go
- **Category:** auth_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The gRPC server requires mutual TLS (mTLS) but the client did not present a client certificate during the TLS handshake.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.x | active | — | — |

## Workarounds

1. **** (90% success)
   ```
   cert, _ := tls.LoadX509KeyPair("client.crt", "client.key"); creds := credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}); conn, _ := grpc.Dial(address, grpc.WithTransportCredentials(creds))
   ```
2. **** (85% success)
   ```
   Use a proper CA-signed client certificate and configure the server's CA pool.
   ```

## Dead Ends

- **** — This weakens security and may not be possible in production environments. (60% fail)
- **** — Clients typically need a separate client certificate signed by a CA; using the server cert will still fail. (70% fail)
