Клиентский SSL с Самоподписанным CA не работает - PullRequest
8 голосов
/ 13 августа 2010

Я боролся с проблемой SSL более 1 месяца.

Мы использовали openssl для генерации наших собственных сертификатов CA, сервера и клиента.Мы также включили «SSLrequire» на веб-сервере Apache (в htaccess это может быть неправильно), что означает, что любой, кто пытается подключиться через https на сервере, должен предоставить действительный сертификат

.;

  • сгенерировать ключ CA
  • сгенерировать CA CSR
  • подписать CS CS с помощью ключа CA

, поэтому мы имеемнаш собственный центр сертификации, который используется для подписи сертификатов нашего сервера и клиента.

следующий шаг

  • создание ключа сервера
  • создание знака сервера CSR
  • CSR сервера с ключом CA

Итак, у нас есть сертификат и закрытый ключ сервера, который мы успешно установили на сервере

Далее мы

  • создаем клиентаключ
  • создать клиентскую CSR
  • подписать клиентскую CSR с помощью CA Key

Затем мы раздаем клиентский сертификат нашим пользователям вместе с сертификатом CA.Оба были установлены в своих браузерах.

При попытке подключения мы получили сообщение об ошибке «Узел не распознает и не доверяет центру сертификации, выдавшему ваш сертификат.».

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

Поэтому мы пошли на установку сертификата CA на сервере - панель управления Hsphere.

Мы взяли содержимое сертификата ca и скопировали его в текстовое поле «Certificate Authority File» на сервере, и сервер не будет принимать его каждый раз с жалобой «Не удалось обновить SSL Config Другой ключ и сертификат»

Сертификат CA был подписан сам по себе, так как сервер может сказать, что сертификат и ключ разные.

Мы также попытались скопировать содержимое файла сертификата CA и CAфайл ключа в текстовое поле «Certificate Authority File», но это также не сработает.

Как я уже говорил, мы боролись с этим уже более месяца.Если кто-то может помочь, это будет очень ценно.Если нам нужно оплатить услугу, пожалуйста, сообщите нам.

Заранее спасибо.

1 Ответ

13 голосов
/ 13 августа 2010

(Возможно, https://serverfault.com/ будет лучшим местом для этого вопроса.)

Вот несколько параметров, которые вы можете использовать в конфигурации Apache Httpd (я не уверен, как это отображается на вашей панели конфигурации).

SSLCertificateFile      /etc/ssl/certs/host.pem
SSLCertificateKeyFile   /etc/ssl/private/host.key
SSLCACertificatePath    /etc/ssl/certs/trusteddir
#SSLCACertificateFile   /etc/ssl/certs/trustedcert.pem
#SSLCADNRequestFile     /etc/ssl/certs/advertisedcas.pem

SSLCertificateFile и SSLCertificateKeyFile являются основными требованиями для включения SSL на вашем сервере.

Поскольку вам требуется аутентификация по сертификату клиента, вам необходимо настроить один из SSLCACertificatePath (для каталога) или SSLCACertificateFile (для файла), чтобы указать, каким ЦС вы хотите доверять, поэтому добавьте туда свой сертификат ЦС. Это должны быть файлы в формате PEM. Любой сертификат там будет считаться доверенным (хотя, возможно, он должен иметь базовое ограничение CA, я не помню, это вполне стандартно, если вы все равно сгенерировали сертификат корневого CA).

В дополнение к этому вы можете поместить сертификаты в SSLCADNRequestFile. В этом не должно быть необходимости, поскольку оно заполняется автоматически из директив сертификата SSLCACertificatePath или SSLCACertificateFile, но если вы хотите получить больший контроль в списке CA, то сервер объявляет, что может принять его, вот где это нужно сделать. Просто чтобы прояснить, это не то, что управляет доверием клиентских сертификатов, а то, что сервер может рекламировать, которому он может доверять, поэтому вам все еще нужно SSLCACertificatePath или SSLCACertificateFile. Возможно, вы "Файл центра сертификации" на своей панели конфигурации управляете этим, а не одним из двух других вариантов.

Один из способов отладки это сделать это из командной строки:

echo | openssl s_client -showcerts -connect www.your.host.example:443

Это должно перечислить цепочку сертификатов, которую вы представляете первой (было бы хорошо, чтобы она представляла всю цепочку до ЦС, поскольку некоторым клиентам, насколько я помню, иногда она нужна). Затем в нем должны быть перечислены CA, которые он готов принять для аутентификации по сертификату клиента, или Имена CA сертификатов клиентов не отправляются в противном случае (в этом случае возникает проблема с одной из упомянутых выше директив). Это даст вам, по крайней мере, представление о том, как были настроены SSLCADNRequestFile или SSLCACertificatePath / SSLCACertificateFile (хотя важны последние два).

...