Как получить сертификат x509 от http клиента в Go - PullRequest
0 голосов
/ 28 февраля 2019

Я перешел через документы на https://golang.org/pkg/, но не могу установить это соединение.

Я создаю клиента и запрос, подобный этому (обработка ошибок удалена):

client := http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}
req, reqErr := http.NewRequest(requestMethod, requestUrl, nil)
resp, clientErr := client.Do(req)

Мне нужно получить x509.Certificate для чтения подробностей о сертификате, возвращенном с сервера, но мне все еще нужен http.Repsonse.

Как мне получить экземпляр x509.Certificate иhttp.Response при выполнении только одного запроса?

1 Ответ

0 голосов
/ 28 февраля 2019

Ответ имеет поле TLS *tls.ConnectionState, которое, в свою очередь, имеет:

type ConnectionState struct {
    // other fields
    PeerCertificates []*x509.Certificate   // certificate chain presented by remote peer
}

, поэтому вы можете просто сделать:

resp, clientErr := client.Do(req)
if clientErr != nil {
    panic(clientErr)
}
if resp.TLS != nil {
    certificates := resp.TLS.PeerCertificates
    if len(certificates) > 0 {
        // you probably want certificates[0]
        cert := certificates[0] 
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...