2014-01-02 3 views
6

Я пытаюсь проверить аутентификацию клиента TLS с помощью go. Он работал хорошо, когда я создал простой самозаверяющий сертификат клиента с ExtKeyUsageClientAuth набором, но когда клиент пытается соединиться с более длинной цепью сертификата:TLS clientAuth требует, чтобы ExtKeyUsageClientAuth через целую цепочку сертификатов

CA -> промежуточной -> клиент

я получаю следующее сообщение об ошибке : x509: certificate specifies an incompatible key usage

соответствующие вызовы

handshake_server.go:processCertsFromClient()

и, если я читаю код правильно, похоже, что каждый отдельный сертификат в моей цепочке должен иметь расширенный набор ключей клиента.

Я не эксперт по x509, но это кажется странным требованием, я никогда не видел CA или промежуточный сертификат, который был установлен клиентом. Я не вижу, как можно ожидать, что вы настроите долгоживущий ЦС для обработки всех возможных будущих использования ключа.

Итак, где ошибка?

Я могу думать о нескольких возможностях

  1. Я не понимаю TLS (вероятно)
  2. моего предположения, что клиент аутентификация работает как сервер AUTH неправильно
  3. Я читаю код неправильно
  4. мой сервер TLS неправильно
  5. реализация TLS клиент аутентификации golang ошибочна
+0

Я изучил это немного, так как я написал некоторые из этого кода. Сначала я думал, что вы ошибались, но начал соглашаться с вами после прочтения verify.go. Я думаю, вы на самом деле в лучшем положении, чтобы ответить на это. Используйте существующий тестовый пример и добавьте кучу println в файле verify.go, и вы сможете убедить себя, что это ошибка, которую вы должны записать. –

+0

Я тоже попал в эту проблему и отправил отчет об ошибке: [issue 7423] (https://code.google.com/p/go/issues/detail?id=7423) –

ответ

3

Обсуждение на http://golang.org/issue/7423 предполагает, что это работает по назначению. В комментариях объясняется, как создавать правильные сертификаты.

+0

Другая проблема была создана из этого и убрали требование: https://github.com/golang/go/issues/11087 –

Смежные вопросы