определить личность клиента на сервере mTLS gRPC

Я пишу сервер mTLS gRPC на Golang. Одноранговые узлы могут быть однозначно идентифицированы через Общее имя их сертификата. Мой вопрос: как я могу получить доступ к сертификату клиента, субъекту сертификата клиента или общему имени сертификата клиента в реализации интерфейса сообщений gRPC?

Подробнее о контексте:

Предположим, что есть только одна служба NameService и один метод с именем Add. Итак, мой файл .proto будет содержать следующее (используя синтаксис proto3):

service NameService {
    rpc Add(Name) returns (Empty) {}
}

message Name {
    string name = 1;
}

message Empty {
}

Затем мне нужно будет реализовать следующий интерфейс:

type NameServiceServer interface {
    Add(context.Context, *Name) (*Empty, error)
}

В реализации метода Add я хотел бы прочитать сертификат узла. Как я могу это сделать?

P.S. Я только начинаю работать с Golang, поэтому прошу прощения, если есть очевидный ответ, который я пропустил. Заранее спасибо!


person milaniez    schedule 18.07.2021    source источник
comment
Помогает ли этот ответ? (просто измените .Subject на .Subject.CommonName).   -  person Brits    schedule 18.07.2021
comment
Да, это так. Спасибо, @Британцы!   -  person milaniez    schedule 18.07.2021