
Инструмент с открытым исходным кодом, помогающий создать корректную цепочку SSL-сертификатов.
Описание • Как использовать • Параметры • Как это работает • Требования • Прочее • Лицензия
Это инструмент с открытым исходным кодом, который поможет вам собрать корректную цепочку SSL-сертификатов. Также он может помочь исправить неполную цепочку и загрузить все недостающие сертификаты центра сертификации. Вы также можете загрузить все сертификаты с удаленного сервера и получить правильную цепочку сертификатов.
Это просто:
# Clone this repository
git clone https://github.com/trimstray/mkchain
# Go into the repository
cd mkchain
# Install
./setup.sh install
# Run the app
mkchain -i /data/certs -o /data/chain.crt
- символическая ссылка на
bin/mkchainпомещается в/usr/local/bin- страница man помещается в
/usr/local/man/man8
Предоставляет следующие параметры:
Usage:
mkchain <option|long-option>
Examples:
mkchain --in Root.crt --in Intermediate1.crt --in Server.crt --out bundle_chain_certs.crt
mkchain --in /tmp/certs --out bundle_chain_certs.crt --with-root
mkchain -i Server.crt -o bundle_chain_certs.crt
mkchain -i https://incomplete-chain.badssl.com/ --with-root
Options:
--help show this message
--debug displays information on the screen (debug mode)
-i, --in add certificates to merge (file, multiple files, directory with ssl certificates
or remote domain)
-o, --out saves the result (chain) to a file
--with-root add root certificate to certificates chain
-o|--out- без этого параметраmkchainсохраняет выходную цепочку в каталогmkchain/chains/.
Прежде чем читать, пожалуйста, ознакомьтесь со статьей о цепочке SSL-сертификатов.
Начнем с цепочки сертификатов ssllabs. Они поставляются вместе с mkchain и находятся в каталоге example/ssllabs.com, который дополнительно содержит каталог all (содержащий все сертификаты, необходимые для сборки цепочки) и каталог server_certificate (содержащий только сертификат сервера).
Правильная цепочка для домена ssllabs.com (результат команды openssl):
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Qualys, Inc./CN=ssllabs.com
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
2 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/CPS is incorporated by reference/OU=(c) 2006 Entrust, Inc./CN=Entrust Root Certification Authority
Выше показана полная цепочка, состоящая из:
Сертификат личности (сертификат сервера)
выдан для ssllabs.com центром Entrust Certification Authority - L1K
Промежуточный сертификат
выдан для Entrust Certification Authority - L1K центром Entrust Root Certification Authority - G2
Промежуточный сертификат
выдан для Entrust Root Certification Authority - G2 центром Entrust Root Certification Authority
Корневой сертификат (самоподписанный сертификат)
выдан для Entrust Root Certification Authority центром Entrust Root Certification Authority
В этом сценарии мы объединим все поставленные сертификаты. Пример запуска инструмента:
В этом сценарии мы используем только сертификат сервера и используем его для получения остальных необходимых сертификатов. Затем, как указано выше, мы объединим все предоставленные сертификаты. Пример запуска инструмента:
Чтобы создать корректную цепочку, вы должны предоставить инструменту все необходимые сертификаты (если вы установили каталог для параметра -i|--in). Это будут:
Это очень важно, потому что без них вы не сможете определить начало и конец цепочки.
Если вы укажете только файл сертификата в качестве значения
-i|--in,mkchainавтоматически загрузит все необходимые сертификаты.
Однако, если вы заглянете внутрь сгенерированной цепочки после генерации с помощью mkchain, вы не найдете там корневого сертификата.
Почему? Потому что самоподписанные корневые сертификаты не нужно/не следует включать в конфигурацию веб-сервера. Они не приносят пользы (клиенты всегда будут их игнорировать) и вызывают небольшое снижение производительности (задержка), поскольку увеличивают размер SSL-рукопожатия.
Если вы хотите добавить корневой сертификат в цепочку сертификатов, вызовите утилиту с параметром --with-root.
mkchain позволяет использовать два пути сертификации:
При генерации цепочки сертификатов mkchain отображает комментарии с информацией о сертификатах, включая любые ошибки.
Вот список всех возможностей:
Сообщение отображается при отсутствии сертификата сервера, который является началом цепочки. Это уникальный случай, потому что в этой ситуации mkchain завершает свою работу, отображая только эту информацию. Сертификат сервера — единственный сертификат, необходимый для правильного создания цепочки. Без этого сертификата корректная цепочка не будет создана.
Обратная ситуация — сообщение отображается при обнаружении действительного сертификата сервера.
Это сообщение появляется, когда первый из двух промежуточных сертификатов не найден. Эта информация не указывает явно на отсутствие второго промежуточного сертификата, но, с другой стороны, позволяет определить, существует ли промежуточный сертификат, на который был подписан сертификат сервера. Кроме того, оно может отображаться, если второй промежуточный сертификат был предоставлен.
Аналогично предыдущему, но касается второго промежуточного сертификата. Однако возможно корректно создать цепочку, используя второй путь сертификации, например, используя первый промежуточный сертификат и заменяя второй основным сертификатом.
Это сообщение означает, что отсутствует один или все необходимые промежуточные сертификаты, и отображается при отсутствии корневого сертификата.
Это сообщение указывает количество действительных промежуточных сертификатов.
Отсутствие корневого сертификата рассматривается как предупреждение. Конечно, при настройке сертификатов на стороне сервера не рекомендуется прикреплять корневой сертификат, но если вы создаете его с помощью mkchain, цепочка считается неполной, и отображается информация о некорректном создании цепочки.
Это сообщение не информирует об ошибке, а об отсутствии поля CN, что может произойти с некоторыми сертификатами (посмотрите на example/google.com). Поле Common Name идентифицирует имя хоста, связанное с сертификатом. В RFC3280 нет требования, чтобы Issuer DN имел CN. Большинство центров сертификации включают CN в Issuer DN, но некоторые этого не делают, как, например, этот центр Equifax.
mkchain использует внешние утилиты, которые должны быть установлены перед запуском:
Этот инструмент работает с:
MacOS/FreeBSD:
pkg install getopt)greadlink из coreutils (устанавливается через homebrew)Смотрите это.
Смотрите это.
GPLv3 : http://www.gnu.org/licenses/
Свободное программное обеспечение, Ура!