Wenn Sie Vollkettenzertifikate (dh solche, die von letsencrypt / certbot usw. generiert wurden) verarbeiten, die eine Verkettung des Zertifikats und der Zertifizierungsstellenkette darstellen, können Sie die Bash-String-Manipulation verwenden.
Beispielsweise:
# 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-----
So extrahieren Sie das Zertifikat und die Zertifizierungsstellenkette in Variablen:
# 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')
Erläuterung:
Anstatt awk oder openssl (leistungsstarke Tools, die jedoch nicht immer verfügbar sind, z. B. in Docker Alpine-Bildern) zu verwenden, können Sie die Bash-String-Manipulation verwenden.
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: Am Ende des Inhalts von FULLCHAIN wird die längste Teilstring-Übereinstimmung zurückgegeben, und anschließend wird die Konkretisierung ausgeführt, sobald -----END CERTIFICATE-----
sie entfernt wird. Das *
stimmt mit allen Zeichen nach überein -----END CERTIFICATE-----
.
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: Geben Sie vom Anfang des Inhalts von FULLCHAIN die kürzeste Teilzeichenfolgenübereinstimmung zurück und entfernen Sie dann die führenden neuen Zeilen. Ebenso *
stimmt das mit allen Zeichen vorher überein -----END CERTIFICATE-----
.
Für eine schnelle Referenz (während Sie mehr über String - Manipulation in bash finden hier ):
${VAR#substring}
= der kürzeste Teilstring vom Anfang des Inhalts von VAR
${VAR%substring}
= der kürzeste Teilstring vom Ende des Inhalts von VAR
${VAR##substring}
= der längste Teilstring vom Anfang des Inhalts von VAR
${VAR%%substring}
= die längste Teilzeichenfolge vom Ende des Inhalts von VAR