Проверка отзыва OCSP перед завершением рукопожатия TLS - PullRequest
0 голосов
/ 11 апреля 2019

Я должен, используя Go, в качестве клиента выполнить проверку отзыва сертификата OCSP сертификата сервера перед завершением рукопожатия TLS, т.е. [инициировать рукопожатие -> получить сертификат сервера -> проверить состояние отзыва -> если отзыв отменен], а не [инициировать рукопожатие -> завершить рукопожатие -> проверить статус отзыва]

При использовании стандартной библиотеки TLS Go это не представляется возможным, так как tls.Dial, похоже, не выполняет никакой проверки OCSP. Другой возможный обходной путь - получение сертификата сервера без выполнения квитирования, затем проверка статуса отзыва, и если статус в порядке, повторите квитирование с помощью tls.Dial, но я не смог найти способ сделать это в Go.

Любые предложения о том, как решить эту конкретную проблему?

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете установить VerifyPeerCertificate в объекте tls.Config и заставить указанную функцию возвращать ненулевую ошибку, если проверка отзыва не удалась и вы хотите прервать квитирование.

Из документов :

// VerifyPeerCertificate, if not nil, is called after normal
// certificate verification by either a TLS client or server. It
// receives the raw ASN.1 certificates provided by the peer and also
// any verified chains that normal processing found. If it returns a
// non-nil error, the handshake is aborted and that error results.
//
// If normal verification fails then the handshake will abort before
// considering this callback. If normal verification is disabled by
// setting InsecureSkipVerify, or (for a server) when ClientAuth is
// RequestClientCert or RequireAnyClientCert, then this callback will
// be considered but the verifiedChains argument will always be nil.
VerifyPeerCertificate func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error // Go 1.8
...