fullstorydev / fullstorydev/grpcurl

[Feature Request] Support TLS certificate fingerprint pinning

Open
#585 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
12.8k
Forks
580
Avg merge
1h 8m
Merged PRs (30d)
5

Description

## Is your feature request related to a problem?

Yes.

`grpcurl` currently supports standard TLS certificate validation through
`-cacert`, as well as disabling verification with `-insecure`. However, it
does not provide a way to pin the server certificate or public key by its
SHA-256 fingerprint.

This is useful when:

- the client must connect only to a specific server certificate;
- the environment does not have a trusted public CA;
- the caller wants protection against an unexpected certificate or CA;
- grpcurl is used in automated scripts or diagnostic environments where
certificate pinning is required.

Using `-cacert` is not equivalent to fingerprint pinning because it validates
the certificate chain but does not require the peer certificate to match a
specific fingerprint.

## Proposed solution

Add an option that verifies the server certificate fingerprint after the TLS
connection is established.

For example:

```bash
grpcurl \\
-cert-fingerprint sha256:0123456789abcdef... \\
api.example.com:443 \\
list

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating where grpcurl defines the -cacert and -insecure TLS options, then trace how the connection is established. Decide how the proposed -cert-fingerprint value should represent certificate versus public-key pinning, and add coverage for matching and non-matching SHA-256 fingerprints. Done means the CLI accepts the option and rejects a server that does not match it.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
cli, security
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.