LE chains via sed ersetzen?

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

LE chains via sed ersetzen?

Beitrag von fulltilt » 20.10.2021 16:25:26

ich möchte alle chains unter /etc/letsencrypt/archive mit neuen ersetzen, allerdings greift das vermutlich wg. der line breaks in den certs nicht ...

Code: Alles auswählen

find /etc/letsencrypt/archive -type f -exec sed -i 's|alter chain|neuer chain|g' {} \;
Ich habe da bereits mit einem

Code: Alles auswählen

/'\n'

Code: Alles auswählen

-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/]/'\n'MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT ... für alle Zeilen
anzuhängen, ist vieleicht nicht richtig escaped, jedenfalls ändert sich nichts ...
Wie müßte das aussehen damit es funktioniert?

der alte chain sieht folgendermaßen aus:

Code: Alles auswählen

-----BEGIN CERTIFICATE-----
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
-----END CERTIFICATE-----
Debian: Testing
Desktop: KDE Plasma 5

DeletedUserReAsG

Re: LE chains via sed ersetzen?

Beitrag von DeletedUserReAsG » 20.10.2021 18:00:05

Ich hab zwar keine Ahnung, wofür du den Ausdruck „chain“ in diesem Kontext benutzt (es gibt eine Chain im Kontext von Let’s Encrypt, doch das ist was Anderes), aber wenn es darum gehen sollte, einfach den Inhalt der Datei durch den Inhalt einer anderen Datei zu ersetzen, könntest du diesen einfach mittels > in die bestehende Datei schreiben, wobei der ursprüngliche Inhalt überschrieben würde.

Die klassische Methode wäre übrigens, die Dateien einfach zu kopieren.

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: LE chains via sed ersetzen?

Beitrag von fulltilt » 20.10.2021 18:06:14

niemand hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 18:00:05
Ich hab zwar keine Ahnung, wofür du den Ausdruck „chain“ in diesem Kontext benutzt (es gibt eine Chain im Kontext von Let’s Encrypt, doch das ist was Anderes), aber wenn es darum gehen sollte, einfach den Inhalt der Datei durch den Inhalt einer anderen Datei zu ersetzen, könntest du diesen einfach mittels > in die bestehende Datei schreiben, wobei der ursprüngliche Inhalt überschrieben würde.

Die klassische Methode wäre übrigens, die Dateien einfach zu kopieren.
das sind sehr viele die ersetzt bzw. aktualisiert werden sollen, deshalb habe ich versucht das mit find / sed umzusetzen ...
Debian: Testing
Desktop: KDE Plasma 5

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: LE chains via sed ersetzen?

Beitrag von Meillo » 20.10.2021 18:07:43

Vermutlich ist die Chain nur ein Teil in dem Block, aber das ist auch nur wild geraten.

@fulltilt: Poste und doch einmal wie die Datei davor aussieht, dann wie sie danach aussehen soll und zeige nochmal welcher Teil durch welchen ersetzt werden soll. Dann koennen auch Personen mithelfen, die sich zwar mit Textersetzung auskennen aber nicht mit Zertifikaten. ;-)
Use ed once in a while!

hec_tech
Beiträge: 1093
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: LE chains via sed ersetzen?

Beitrag von hec_tech » 20.10.2021 18:12:31

Warum willst du das überhaupt machen?

Du hast ja neue Zertifikate erstellt mit LE. Es wird ja ohnehin eines mit der Chain erstellt.

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: LE chains via sed ersetzen?

Beitrag von fulltilt » 20.10.2021 18:15:02

Meillo hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 18:07:43
Vermutlich ist die Chain nur ein Teil in dem Block, aber das ist auch nur wild geraten.

@fulltilt: Poste und doch einmal wie die Datei davor aussieht, dann wie sie danach aussehen soll und zeige nochmal welcher Teil durch welchen ersetzt werden soll. Dann koennen auch Personen mithelfen, die sich zwar mit Textersetzung auskennen aber nicht mit Zertifikaten. ;-)
die chain.pm ist im ersten Post vorhanden, der Inhalt ist bei allen gleich muss nur ersetzt werden, ausserdem gibt es noch die fullchain.pem (bundle cert) welche ebenfalls 3 certs beinhaltet, darunter auch der Inhalt der chain.pem - also Dateien erstezen alleine reicht nicht aus, bei der fullchain.pem muss der string gefunden werden und ebenfalls ersetzt werden wobei der restliche Inhalt bleiben soll.
ist etwas kiffelig :mrgreen:
Debian: Testing
Desktop: KDE Plasma 5

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: LE chains via sed ersetzen?

Beitrag von fulltilt » 20.10.2021 18:29:28

hec_tech hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 18:12:31
Warum willst du das überhaupt machen?

Du hast ja neue Zertifikate erstellt mit LE. Es wird ja ohnehin eines mit der Chain erstellt.

es geht um die LE certs die noch nicht erneuert wurden, das ist ein ganzer Haufen die in ca. 3 Monaten erst durch sind, falls es in dem Zeitraum zu einer Migration kommen solle (Hardware etc.) werden die alten chains eingelesen und die zugehörigen Certs dann als ungültig markiert
Debian: Testing
Desktop: KDE Plasma 5

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: LE chains via sed ersetzen?

Beitrag von eggy » 20.10.2021 18:48:47

Nimm awk, damit geht's in so einem Fall einfacher:
Grundsätzlich hast Du hier zwei Zustände, in denen das Script jeweils andere Dingen tun soll:
Z1: das was da steht ausgeben
Z2: das neue Zeug ausgeben bzw nichts tun
Der Wechsel der Zustände erfolgt an den Zertifikatsgrenzen

Also sieht "script.awk" ungefähr so aus:

Code: Alles auswählen

BEGIN{zustand="eins"}

# wechsel der zustände, und bei wechsel in z2 das neue ausgeben
/-----BEGIN CERTIFICATE-----/{print "-----BEGIN CERTIFICATE-----\nDAS NEUE CERT\n-----END CERTIFICATE-----"; zustand = "zwei"; next}
/-----END CERTIFICATE-----/{zustand = "eins"; next}

# sonst wenn in z1: ausgeben was da stand
zustand=="eins" { print $0}
awk -f script.awk certdatei
Ungetestet (Meillo repariert die Fehlerchen bestimmt gerne :mrgreen: )

Benutzeravatar
fulltilt
Beiträge: 1155
Registriert: 03.12.2006 20:10:57

Re: LE chains via sed ersetzen?

Beitrag von fulltilt » 20.10.2021 18:56:08

eggy hat geschrieben: ↑ zum Beitrag ↑
20.10.2021 18:48:47
Nimm awk, damit geht's in so einem Fall einfacher:
Grundsätzlich hast Du hier zwei Zustände, in denen das Script jeweils andere Dingen tun soll:
Z1: das was da steht ausgeben
Z2: das neue Zeug ausgeben bzw nichts tun
Der Wechsel der Zustände erfolgt an den Zertifikatsgrenzen

Also sieht "script.awk" ungefähr so aus:

Code: Alles auswählen

BEGIN{zustand="eins"}

# wechsel der zustände, und bei wechsel in z2 das neue ausgeben
/-----BEGIN CERTIFICATE-----/{print "-----BEGIN CERTIFICATE-----\nDAS NEUE CERT\n-----END CERTIFICATE-----"; zustand = "zwei"; next}
/-----END CERTIFICATE-----/{zustand = "eins"; next}

# sonst wenn in z1: ausgeben was da stand
zustand=="eins" { print $0}
awk -f script.awk certdatei
Ungetestet (Meillo repariert die Fehlerchen bestimmt gerne :mrgreen: )

cool, ist schon nah dran ... allerdings für das fullchain mit 3 certs kann ich nur den cert string verwenden:

Code: Alles auswählen

MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1owTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XCov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpLwYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+DLtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5ysR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZXmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBcSLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2qlPRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TNDTwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26ZtuMA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9Ohe8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFCDfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
Debian: Testing
Desktop: KDE Plasma 5

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: LE chains via sed ersetzen?

Beitrag von eggy » 20.10.2021 19:38:35

/bla/{...} trifft auf alle Zeilen zu, die irgendwo "bla" enthalten, aber zum Glück sind die Zertifikatsinhalte ja recht eindeutig, also /Zertifikatsinhaltanfang/{...}.
oder, wenn die Teile immer in der gleichen Reihenfolge sind, die "---- BEGIN ----"-Treffer mitzählen lassen und entsprechend erst beim x-ten Treffer handeln,
oder aus Z2 wieder nach Z1 gehen, falls nen Cert gefunden wurde, dass bleiben soll,
oder oder oder ...
Gibt ja unzählige Arten wie man sowas angehen kann, wichtig ist nur, erstmal das wiederkehrende Muster in den vorliegenden Dateien erkennen, der restliche Code schreibt sich dann praktisch von selbst.
Falls Du mehr Hilfe brauchst: "echte" Datei bringt immer mehr als Beschreibung. Also Problemdatei nach NoPaste legen, die persönlichen Sachen kannst ja durch pers1solldrinbleiben, pers2ersetzendurchA, mehrerezeilenpers3ersetzendurchB etc anpassen.

Antworten