Se si gestiscono certificati a catena completa (ovvero quelli generati da letsencrypt / certbot ecc.), Che sono una concatenazione del certificato e della catena dell'autorità di certificazione, è possibile utilizzare la manipolazione della stringa bash.
Per esempio:
# 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-----
Per estrarre il certificato e la catena dell'autorità di certificazione in variabili:
# 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')
Spiegazione:
Invece di usare awk o openssl (che sono strumenti potenti ma non sempre disponibili, ad esempio nelle immagini Docker Alpine), puoi usare la manipolazione della stringa bash.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: dalla fine del contenuto di FULLCHAIN, restituisce la corrispondenza di sottostringa più lunga, quindi concatola -----END CERTIFICATE-----
mentre viene rimossa. Le *
partite di tutti i caratteri dopo -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: dall'inizio del contenuto di FULLCHAIN, restituisce la corrispondenza di sottostringa più corta, quindi elimina le nuove linee iniziali. Allo stesso modo, *
corrisponde a tutti i personaggi precedenti -----END CERTIFICATE-----
.
Per un rapido riferimento (mentre puoi trovare ulteriori informazioni sulla manipolazione delle stringhe in bash qui ):
${VAR#substring}
= la sottostringa più corta dall'inizio del contenuto di VAR
${VAR%substring}
= la sottostringa più corta dalla fine del contenuto di VAR
${VAR##substring}
= la sottostringa più lunga dall'inizio del contenuto di VAR
${VAR%%substring}
= la sottostringa più lunga dalla fine del contenuto di VAR