Si está manejando certificados de cadena completa (es decir, los generados por letsencrypt / certbot, etc.), que son una concatenación del certificado y la cadena de autoridad de certificación, puede utilizar la manipulación de cadenas bash.
Por ejemplo:
# 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-----
Para extraer el certificado y la cadena de autoridad de certificación en variables:
# 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')
Explicación:
En lugar de usar awk o openssl (que son herramientas poderosas pero no siempre disponibles, es decir, en las imágenes de Docker Alpine), puede usar la manipulación de cadenas bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: desde el final del contenido de FULLCHAIN, devuelve la coincidencia de subcadena más larga, luego concat a -----END CERTIFICATE-----
medida que se elimina. El *
coincide con todos los personajes después -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: desde el comienzo del contenido de FULLCHAIN, devuelva la coincidencia de subcadena más corta y luego elimine las líneas nuevas. Del mismo modo, *
coincide con todos los personajes anteriores -----END CERTIFICATE-----
.
Para una referencia rápida (mientras puede encontrar más sobre manipulación de cadenas en bash aquí ):
${VAR#substring}
= la subcadena más corta desde el principio del contenido de VAR
${VAR%substring}
= la subcadena más corta desde el final del contenido de VAR
${VAR##substring}
= la subcadena más larga desde el comienzo del contenido de VAR
${VAR%%substring}
= la subcadena más larga desde el final del contenido de VAR