Se você estiver manipulando certificados de cadeia completa (ou seja, os gerados pelo letsencrypt / certbot etc.), que são uma concatenação do certificado e da cadeia de autoridade de certificação, você pode usar a manipulação de string bash.
Por exemplo:
# 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 extrair o certificado e a cadeia de autoridade de certificação em variáveis:
# 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')
Explicação:
Em vez de usar o awk ou o openssl (que são ferramentas poderosas, mas nem sempre disponíveis, ou seja, nas imagens do Docker Alpine), você pode usar a manipulação do bash string.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: do final do conteúdo de FULLCHAIN, retorne a correspondência de substring mais longa e concorde à -----END CERTIFICATE-----
medida que for removida. As *
partidas todos os personagens depois-----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: desde o início do conteúdo de FULLCHAIN, retorne a menor correspondência de substring e retire novas linhas. Da mesma forma, *
corresponde a todos os caracteres anteriores-----END CERTIFICATE-----
.
Para uma referência rápida (enquanto você pode encontrar mais sobre manipulação de string no bash aqui ):
${VAR#substring}
= a substring mais curta desde o início do conteúdo do VAR
${VAR%substring}
= a substring mais curta do final do conteúdo do VAR
${VAR##substring}
= a substring mais longa desde o início do conteúdo do VAR
${VAR%%substring}
= a substring mais longa do final do conteúdo do VAR