Si vous manipulez des certificats à 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 de l'autorité de certification, vous pouvez utiliser la manipulation de chaînes de 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 de l'autorité de certification dans des 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 (qui sont des outils puissants mais pas toujours disponibles, par exemple dans les images Docker Alpine), vous pouvez utiliser la manipulation de chaînes de caractères bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
à partir de la fin du contenu de FULLCHAIN, retourner la plus longue correspondance de sous-chaîne, puis concaténer -----END CERTIFICATE-----
et qu'il est dépouillé. Les *
correspond à tous les caractères après -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: à partir du début du contenu de FULLCHAIN, renvoie la sous-chaîne la plus courte, puis supprime les nouvelles lignes qui la précèdent. De même, la fonction *
correspond à tous les caractères précédant -----END CERTIFICATE-----
.
Pour une référence rapide (bien que vous puissiez trouver plus d'informations sur la manipulation des chaînes de caractères dans bash) aquí ):
${VAR#substring}
= la chaîne la plus courte du début du contenu de VAR
${VAR%substring}
= la chaîne la plus courte à partir de la fin du contenu de VAR
${VAR##substring}
= la plus longue chaîne de caractères à partir du début du contenu de VAR
${VAR%%substring}
= la plus longue chaîne de caractères à partir de la fin du contenu de VAR