Si vous gérez des certificats de chaîne complète (c'est-à-dire ceux générés par letsencrypt / certbot, etc.), qui sont une concaténation du certificat et de la chaîne d'autorité de certification, vous pouvez utiliser la manipulation de chaîne bash.
Par exemple:
# 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-----
Pour extraire le certificat et la chaîne d'autorités de certification 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')
Explication:
Au lieu d'utiliser awk ou openssl (outils puissants mais pas toujours disponibles, par exemple dans les images Docker Alpine), vous pouvez utiliser la manipulation de chaîne bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: à partir de la fin du contenu de FULLCHAIN, retourne la correspondance de sous-chaîne la plus longue, puis concatte à -----END CERTIFICATE-----
mesure qu'elle est supprimée. Le *
correspond à tous les caractères après -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: depuis le début du contenu de FULLCHAIN, renvoie la correspondance de sous-chaîne la plus courte, puis supprime les nouvelles lignes principales. De même, le *
correspond à tous les caractères avant -----END CERTIFICATE-----
.
Pour une référence rapide (pour en savoir plus sur la manipulation de chaîne dans bash, cliquez ici ):
${VAR#substring}
= la sous-chaîne la plus courte depuis le début du contenu de VAR
${VAR%substring}
= la sous-chaîne la plus courte de la fin du contenu de VAR
${VAR##substring}
= la plus longue sous-chaîne depuis le début du contenu de VAR
${VAR%%substring}
= la plus longue sous-chaîne à partir de la fin du contenu de VAR