Якщо ви обробляєте повноцінні сертифікати ланцюга (тобто ті, що генеруються 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 images), ви можете використовувати маніпуляції з рядком bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----": з кінця вмісту FULLCHAIN повертайте найдовший збіг підрядків, а потім конматуйте, -----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