Если вы обрабатываете сертификаты с полной цепочкой (т. Е. Сгенерированные letsencrypt / certbot и т. Д.), Которые являются объединением сертификата и цепочки центра сертификации, вы можете использовать манипуляцию строк bash.
Например:
# content of /path/to/fullchain.pem
-----BEGIN CERTIFICATE-----
some long base64 string containing
the certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
another base64 string
containing the first certificate
in the authority chain
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
another base64 string
containing the second certificate
in the authority chain
(there might be more...)
-----END CERTIFICATE-----
Чтобы извлечь сертификат и цепочку центра сертификации в переменные:
# load the certificate into a variable
FULLCHAIN=$(</path/to/fullchain.pem)
CERTIFICATE="${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
CHAIN=$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
Объяснение:
Вместо использования awk или openssl (которые являются мощными инструментами, но не всегда доступны, например, в изображениях Docker Alpine), вы можете использовать манипуляции со строками bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: от конца содержимого FULLCHAIN, вернуть самое длинное совпадение подстроки, затем concat, -----END CERTIFICATE-----
когда оно будет удалено. Соответствует *
всем персонажам после -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: с начала содержимого FULLCHAIN, верните самое короткое совпадение подстроки, затем удалите начальные строки. Аналогично, *
соответствует всем персонажам раньше -----END CERTIFICATE-----
.
Для быстрого ознакомления (хотя вы можете узнать больше о работе со строками в bash здесь ):
${VAR#substring}
= самая короткая подстрока от начала содержимого VAR
${VAR%substring}
= самая короткая подстрока из конца содержимого VAR
${VAR##substring}
= самая длинная подстрока от начала содержимого VAR
${VAR%%substring}
= самая длинная подстрока из конца содержимого VAR