entfernt
Goto Top

Strongswan Zertifikate

Hallo zusammen,

ich schon wieder face-smile

Ich habe einen Jumphost mit strongswan erstellt nach dieser Anleitung von aqui: Jumphost-Anleitung

Jetzt ist es ja so, dass in dieser Anleitung erklärt wird wie man das mit den Zertifikaten macht, also die werden im Zuge der Anleitung erstellt und eins von denen muss dann auf das Endgerät eingefügt werden usw.
Kann man das ganze auch mit letsencrypt Zertifikaten machen, also damit man das Zertifikat nicht extra auf jedem Endgerät händisch hinzufügen muss ? Und wenn ja wie genau mache ich das ?
Ich hatte einfach mal ein gültiges SSL Zertifikat mit letsencrypt erstellt für die domain die in der ikev2.conf unter "id = fqdn:" steht und das in den Ordner /swanctl/x509 gepackt. Dann in der ikev2.conf unter "certs =" den Namen des Zertifikats angegeben und den strongwan neu gestartet.
Das klappte dann leider nicht. Das Zertifikat ist im .pem Format aber ich glaube das Problem ist, bzw ist unter anderem, dass ich auch keine .key Datei für das Zertifikat habe.
Erstellt wurde das Zertifikat auf einem kemp Loadmaster und als Download bekomme ich dann allerdings nur eine .pem Datei.

Vielleicht kann mir jemand genau erklären ob und wie das ganze funktioniert.

VG

Content-Key: 74017478011

Url: https://administrator.de/contentid/74017478011

Printed on: April 27, 2024 at 22:04 o'clock

Mitglied: 10138557388
10138557388 Jan 11, 2024 updated at 17:31:29 (UTC)
Goto Top
Zitat von @entfernt:
Kann man das ganze auch mit letsencrypt Zertifikaten machen, also damit man das Zertifikat nicht extra auf jedem Endgerät händisch hinzufügen muss ? Und wenn ja wie genau mache ich das ?
Kann man wenn man will, die Zertifikate haben die Zertifikatsextension für Client-Authentication.
Aufwand ist es aber der selbe, du lässt das Cert halt bei LetsEncrypt erstellen statt mit deiner eigenen CA.
Bei LE musst du halt alle 3 Monate erneuern, bei deiner eigenen CA bestimmst du das selbst.
Ich hatte einfach mal ein gültiges SSL Zertifikat mit letsencrypt erstellt für die domain die in der ikev2.conf unter "id = fqdn:" steht und das in den Ordner /swanctl/x509 gepackt. Dann in der ikev2.conf unter "certs =" den Namen des Zertifikats angegeben und den strongwan neu gestartet.
Das reicht nicht, du musst dir die Let's Encrypt CA Zertifkate und das Intermediate Zertifikat (R3) herunterladen und in den "x509ca" Ordner auf dem strongswan Server speichern, sonst wird der CA in strongswan nicht vertraut und den ausgestellten Zertfikaten ebenso nicht vertraut.

Das klappte dann leider nicht. Das Zertifikat ist im .pem Format aber ich glaube das Problem ist, bzw ist unter anderem, dass ich auch keine .key Datei für das Zertifikat habe.
Erstellt wurde das Zertifikat auf einem kemp Loadmaster und als Download bekomme ich dann allerdings nur eine .pem Datei.

Bei Lets Encrypt erstellt man sich selbst den private Key und lässt sich dann über den CSR das Zertifikat (public key) von Lets Encrypt ausstellen. Beide Teile bilden eine Einheit und werden für die Einwahl benötigt.

Mach die Datei mal mit eine Editor auf und schau rein. Manchmal sind private Key als auch public Key in einem PEM vereint hinterlegt. Das kann man dann auftrennen und in separate Dateien für private und public Key speichern.
Denn auf dem Client brauchst du sowohl den private als auch den public key, ohne private Key keine Einwahl ...

Lets' Encrypt macht aber auch nur Sinn wenn man einen FQDN also eine Domain auf der Client-Seite verwendet, denn E-Mail bzw. Client-/Key-ID supported LE ja nicht.


Habe ich gerade mal im Lab mit LE Certs erfolgreich getestet, wie erwartet lüppt, hier der Log vom Server (strongswan)
04[ENC] parsed IKE_AUTH request 1 [ IDi AUTH CERT IDr N(INIT_CONTACT) SA TSi TSr ]
04[IKE] received end entity cert "CN=domain.de"  
04[CFG] looking for peer configs matching 5.6.7.8[client.domain.de]...1.2.3.4[server.domain.de]
04[CFG] selected peer config 'IKEv2-LetsEncrypt'  
04[CFG]   using trusted certificate "CN=server.domain.de"  
04[CFG]   using trusted intermediate ca certificate "C=US, O=Let's Encrypt, CN=R3"  
04[CFG]   using trusted ca certificate "C=US, O=Internet Security Research Group, CN=ISRG Root X1"  
04[CFG]   reached self-signed root ca with a path length of 1
04[CFG] checking certificate status of "CN=client.domain.de"  
04[CFG]   ocsp response is valid: until Jan 17 20:08:58 2024
04[CFG]   using cached ocsp response
04[CFG] certificate status is good
04[CFG] checking certificate status of "C=US, O=Let's Encrypt, CN=R3"  
04[CFG]   fetching crl from 'http://x1.c.lencr.org/' ...  
04[CFG]   using trusted certificate "C=US, O=Internet Security Research Group, CN=ISRG Root X1"  
04[CFG]   crl correctly signed by "C=US, O=Internet Security Research Group, CN=ISRG Root X1"  
04[CFG]   crl is valid: until Mar 12 00:59:59 2024
04[CFG] certificate status is good
04[IKE] authentication of 'client.domain.de' with ECDSA-256 signature successful  
04[IKE] authentication of 'server.domain.de' (myself) with ECDSA-256 signature successful  
04[IKE] sending end entity cert "CN=server.domain.de"  
04[IKE] sending issuer cert "C=US, O=Let's Encrypt, CN=R3"  
04[IKE] IKE_SA IKEv2-LetsEncrypt[5] established between 5.6.7.8[domain.de]...1.2.3.4[domain.de]
04[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/NO_EXT_SEQ
04[IKE] CHILD_SA net{2} established with SPIs ccc0c3ea_i 0fba6f24_o and TS 192.168.20.0/24 === 192.168.100.0/24
04[ENC] generating IKE_AUTH response 1 [ IDr CERT CERT AUTH SA TSi TSr ]
04[ENC] splitting IKE message (2640 bytes) into 3 fragments
04[ENC] generating IKE_AUTH response 1 [ EF(1/3) ]
04[ENC] generating IKE_AUTH response 1 [ EF(2/3) ]
04[ENC] generating IKE_AUTH response 1 [ EF(3/3) ]

Hier meine Test-Strongswan Config am Server
connections {
	IKEv2-LetsEncrypt {
		local_addrs = 5.6.7.8
                remote_addrs = 1.2.3.4
		
                local {
			auth = pubkey
			id = server.domain.de
		}

		remote {
			auth = pubkey
			id = client.domain.de
		}

		children {
			net {
				local_ts = 192.168.20.0/24
				remote_ts = 192.168.100.0/24
				esp_proposals = aes256-aes128-sha256-sha1-modp2048-modp1024
				rekey_time = 1h
			}
		}
		rekey_time = 4h
		version = 2
		send_cert = always
		unique = replace
		dpd_delay = 300
		proposals = aes256-aes128-sha256-sha1-modp2048-modp1024
	}
}

Certs

Private Key Server

screenshot

Public Key Server

screenshot

CA Certs Letsencrypt

screenshot


Danach noch ein swanctl -q zum reload sämtlicher Connections und Zertifikaten.

pj
Member: entfernt
entfernt Jan 11, 2024 at 22:56:26 (UTC)
Goto Top
Zitat von @10138557388:

Zitat von @entfernt:
Kann man das ganze auch mit letsencrypt Zertifikaten machen, also damit man das Zertifikat nicht extra auf jedem Endgerät händisch hinzufügen muss ? Und wenn ja wie genau mache ich das ?
Kann man wenn man will, die Zertifikate haben die Zertifikatsextension für Client-Authentication.
Aufwand ist es aber der selbe, du lässt das Cert halt bei LetsEncrypt erstellen statt mit deiner eigenen CA.
Bei LE musst du halt alle 3 Monate erneuern, bei deiner eigenen CA bestimmst du das selbst.

Nur nochmal kurz für das Verständnis bevor ich jetzt teste.
Ich muss das Zertifikat zwar alle 3 Monate erneuern (wobei ich hier dann gucken will dass ich das alles automatisiere) aber am Ende fällt dadurch weg das ich auf dem Endgerät das Zertifikat vorher in den Zertifikatsspeicher einspielen muss, richtig ?

VG & Danke für Deine detaillierte Antwort!
Mitglied: 10138557388
10138557388 Jan 12, 2024 updated at 07:47:42 (UTC)
Goto Top
Zitat von @entfernt:
Nur nochmal kurz für das Verständnis bevor ich jetzt teste.
Ich muss das Zertifikat zwar alle 3 Monate erneuern (wobei ich hier dann gucken will dass ich das alles automatisiere) aber am Ende fällt dadurch weg das ich auf dem Endgerät das Zertifikat vorher in den Zertifikatsspeicher einspielen muss, richtig ?

Nein, bei beiden muss es in den Speicher, egal ob LE oder selbst signiert. Bei Window/Linux entfällt nur der Import der CA. Ansonsten bleibt der Aufwand gleich. Da man meist eh ein PFX verteilt in dem auch das CA Cert enthalten ist ist der Aufwand dann eher höher weil du mit LE alle 3 Monate ran musst statt bei self signed in einem Zeitraum den du selbst wählen kannst ...