1

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

Мы работаем над переходом с SSL-сертификатов StartCom на Let's Encrypt и пытаемся настроить его на автоматическую работу с macOS Server + Apache HTTPD. Из командной строки (security import) macOS Server не принимает прямые файлы .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 два раза, а затем сертификат Шифрование промежуточного ЦС Выпускаемое, за ними следует ненужному самоподписному 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