Почему экспорт openssl pkcs12 добавляет дополнительный корневой сертификат привязки, дублирующий сертификат сервера в Mac OS X

[Первоначально опубликовано в Slack Overflow, но ветка комментариев жаловалась на неподходящее место.]

Мы работаем над переходом с SSL-сертификатов StartCom на Let's Encrypt и пытаемся настроить его на автоматическую работу с macOS Server + Apache HTTPD. Из инструмента командной строки (security import), сервер MacOS не принимает прямой .pem файлы - вы должны дать ему .p12 файл, из которого он извлекает .pem файлы для настройки в Apache. Раздражает и бессмысленно, но это то, с чем мы должны жить сейчас.

Для того, чтобы создать это .p12 файл, мы должны выполнить эту команду:

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/chain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

И вот где это становится странным. Выход example.com.p12 файл имеет example.com сертификат дважды, за которым следует промежуточный сертификат Let's Encrypt, за которым следует ненужный самозаверяющий сертификат привязки DST Root CA X3 (который по умолчанию установлен во всех браузерах) и, наконец, закрытый ключ. В результате рукопожатие Apache SSL включает в себя сертификат сервера дважды, а также промежуточный сертификат CA и корневой сертификат (который он не должен отправлять), что приводит к появлению предупреждений в тестере Qualys SSL Labs.

Мы заглянули внутрь cert.pem, и он содержит только сертификат сервера (и только один раз). chain.pem содержит только промежуточный сертификат CA (не корневой якорь или сертификат сервера). privkey.pem содержит только закрытый ключ. Так openssl pkcs12 -export дублирует сертификат сервера, а затем переходит к дополнительному этапу поиска корневого сертификата привязки и добавления его.

Если мы запустим эту же команду в openSUSE Linux, вывод .p12 Файл имеет только сертификат сервера (один раз), промежуточный сертификат CA и закрытый ключ. Нет корневого якоря.

Мы попробовали следующие варианты и не увидели никакой разницы в выходе:

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

Единственный способ, которым я могу продублировать некорректное поведение удвоенного сертификата сервера на компьютере с Linux, - это сделать следующее (но оно по-прежнему не включает в себя корневой якорь):

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

(Обратите внимание на использование fullchain.pem вместо chain.pem в сочетании с использованием cert.pem... вполне понятно, почему сертификат сервера будет дублирован, но это не та команда, которую мы используем в Mac OS X.)

Любая идея, как получить openssl pkcs12 -export сделать правильную вещь здесь?

0 ответов

Другие вопросы по тегам