Разница между SSLCertificateFile и SSLCertificateChainFile?

35

Обычно с виртуальным хостом ssl настраивается со следующими директивами:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

От: Для включения SSL для одного домена на сервере с несколькими vhosts, будет ли работать эта конфигурация?

В чем разница между SSLCertificateFileи SSLCertificateChainFile? Клиент приобрел ключ CA у GoDaddy. Похоже, что GoDaddy предоставляет только SSLCertificateFile(файл .crt) и SSLCertificateKeyFile (файл .key), а не at SSLCertificateChainFile.

Будет ли мой SSL работать без указания SSLCertificateChainFileпути?

Кроме того, есть ли канонический путь, где эти файлы должны быть размещены?

chrisjlee
источник
1
Наиболее часто ставит я вижу людей , кладя файлы CERT находится в /etc/ssl, /usr/local/etc/sslили в sslподкаталоге , специфичного для веб - сайта (например , /home/www/example.com/dataимеет веб - сайт , то home/www/example.com/sslимеет сертификаты).
Крис С

Ответы:

49

Строго говоря, вам никогда не понадобится цепочка для работы SSL.

То, что вам всегда нужно , это SSLCertificateFileналичие SSLCertificateKeyFileправильного ключа для этого сертификата.

Проблема в том, что если все, что вы даете Apache, это сертификат, то все, что он должен дать подключающимся клиентам, - это сертификат, который не рассказывает всей истории об этом SSL-сертификате. Он говорит: «Я подписан кем-то, но я не собираюсь рассказывать вам о них».

Обычно это работает нормально, так как большинство клиентских систем имеют большое хранилище сертификатов CA (как корневых, так и промежуточных), которые могут проверяться на предмет наличия соответствующих отношений подписи для установления доверия. Однако иногда это не работает; чаще всего вы сталкиваетесь с тем, что клиент не имеет сертификата для промежуточного центра сертификации, подписавшего ваш сертификат.

Вот где цепь вступает; это позволяет Apache точно показать клиенту, как выглядят доверительные отношения, что может помочь клиенту заполнить пробелы между вашим сертификатом, корнем, которому они доверяют, и промежуточным звеном, о котором они не знают. Цепочка может быть включена в вашу конфигурацию одним из двух способов:

  • Встраивается в тот же файл, который вы установили для себя SSLCertificateFile, в новых строках после сертификата сервера по порядку (корень должен быть внизу). Если вы настроите его так, вам нужно SSLCertificateChainFileуказать тот же файл, что и SSLCertificateFile.
  • В отдельном файле, настроенном в SSLCertificateChainFileдирективе; сертификат CA, выдавший сертификат сервера, должен быть первым в файле, а затем все остальные в корне.

Проверьте файл сертификата, который у вас есть сейчас - держу пари, что в него не включены данные цепочки. Который обычно работает нормально, но в конечном итоге вызовет проблемы с тем или иным браузером.

Шейн Мэдден
источник
2
Я думаю, что "обычно работает нормально" больше не относится к сертификатам GoDaddy, если промежуточный продукт не включен. Я даже не уверен, применимо ли это больше к парням, таким как Verisign и Thawte, на самом деле, поскольку они перешли, чтобы сделать сертификаты сайта более отдаленными от базовых, которые включены в браузер. Я полагаю, что это облегчает отзыв, поскольку убить промежуточные звенья проще.
cjc
«Внедрено в SSLCertificateFile»: мне бы хотелось, чтобы это работало, но, похоже, не упоминается и не упоминается в документации. Ваша цепь должна быть вставлена SSLCertificateChainFile.
Стив Келет
@ SteveKehlet Вы правы, что это не задокументировано, но я успешно работал в прошлом - как вы форматировали файл all-in-one?
Шейн Мэдден
1
@ SteveKehlet На самом деле, вы правы, я вспомнил неправильно; То, как я настроил его для одного файла, заключалось в том, чтобы иметь оба SSLCertificateFileи SSLCertificateChainFileуказывать на один и тот же объединенный файл, который работает - отредактировал мой ответ, чтобы исправить это.
Шейн Мэдден
@ShaneMadden Красиво! Оно работает! Большое спасибо за выяснение этого.
Стив Кехлет
4

На самом деле, GoDaddy дает вам промежуточную цепочку:

http://support.godaddy.com/help/5238

Вот еще немного обсуждения.

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

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

С точки зрения того, что произойдет, если вы не включите правильную директиву SSLCertificateChainFile: вы увидите большое красное предупреждение в вашем браузере, потому что ваш сайт SSL не будет проверяться в браузерах, так как они не могут следовать цепочке сертификатов от вашего сайта. cert к одному, принадлежащему центру сертификации, о котором знает браузер.

CJC
источник
2

Я хотел бы добавить к предыдущим хорошим ответам о SSLCertificateChainFile, что также важен порядок сертификатов в этом файле. Клиенты на основе OpenSSL сами разберутся в порядке, но клиенты на основе gnutls потерпят неудачу в цепочке с неправильным порядком.

Проверьте порядок с gnutls-cli, как

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

где /etc/ssl/certs/ca-certificates.crt - это место, где ваш дистрибутив помещает комбинированные сертификаты.

Коос ван ден Хаут
источник