Neue Root CA (Certification Authority) bzw. neues Stammzertifikat erstellen: mkdir "CA - ORGANIZATION" cd "CA - ORGANIZATION" cp /Bibliothek/openssl_Beispiel.cnf ORGANIZATION_openssl.cnf $EDITOR ORGANIZATION_openssl.cnf touch index.txt echo 01 > serial echo 01 > crlnumber mkdir newcerts certs crl openssl req -config ORGANIZATION_openssl.cnf -newkey rsa -x509 -days 3650 -keyout ORGANIZATION_CAKey.pem -out ORGANIZATION_CACert.pem cp ORGANIZATION_CACert.pem ORGANIZATION_CACert.pem.crt openssl x509 -in ORGANIZATION_CACert.pem -outform DER -out ORGANIZATION_CACert.der.crt openssl ca -config ORGANIZATION_openssl.cnf -gencrl -crldays 3650 -out ORGANIZATION_CACrl.pem (Besser wäre es, ein Zwischenzertifikat zu erstellen und das Stammzertifikat offline zu nehmen.) ------------------------------------------------------------------------------- Root CA in Systemstammspeicher legen: Linux (Ist glaub ich nicht mehr universell gültig. Besser jeweilige Distribution konsolidieren): cp ORGANIZATION_CACert.pem.crt /etc/ssl/certs/ c_rehash /etc/ssl/certs OpenBSD: cp /etc/ssl/cert.pem /etc/ssl/cert.pem-original openssl x509 -text -fingerprint -sha256 -in ORGANIZATION_CACert.pem >> /etc/ssl/cert.pem Windows: Doppelklick auf ORGANIZATION_CACert.pem.crt > Zertifikat installieren... Alle Zertifikate in folgendem Speicher speichern: Vertrauenswürdige Stammzertifizierungsstellen oder CMD: certutil -addstore Root ORGANIZATION_CACert.pem.crt Android: Einstellungen > Bildschirmsperre & Sicherheit > Zertifikat installieren: ORGANIZATION_CACert.der.crt auswählen Einstellungen > Bildschirmsperre & Sicherheit > Vertrauensw. Anmeldedaten > Benutzer: Prüfen ob CA importiert wurde (Kann dazu führen, dass dauerhaft die Meldung "Das Netzwerk wird möglicherweise überwacht" eingeblendet wird!) ------------------------------------------------------------------------------- Server-Zertifikat erstellen: Schlüssel und Certificate Signing Request erzeugen: cp "/pfad/CA - Name/ORGANIZATION_openssl.cnf" FQDN_openssl.cnf $EDITOR FQDN_openssl.cnf HOSTNAME auf passenden FQDN setzten. Evtl. EMAIL, DNS.2, IP.1, etc. anpassen. openssl req -config FQDN_openssl.cnf -reqexts server -new -nodes -out /tmp/FQDN_CertRequest.pem cp /tmp/FQDN_CertRequest.pem /pfad/CA - Name/ rm /tmp/FQDN_CertRequest.pem Zertifikat erstellen / Request signieren: openssl ca -config ORGANIZATION_openssl.cnf -in FQDN_CertRequest.pem -out FQDN_Cert.pem rm FQDN_CertRequest.pem cp FQDN_Cert.pem /pfad/Server/ ------------------------------------------------------------------------------- Metadaten eines Certificat Signing Request ausgeben: openssl req -noout -text -in FQDN_CertRequest.pem ------------------------------------------------------------------------------- Metadaten eines Zertifikats ausgeben: openssl x509 -text -noout -in Cert.pem openssl x509 -dates -subject -serial -issuer -noout -in Cert.pem openssl x509 -fingerprint -sha256 -noout -in Cert.pem ------------------------------------------------------------------------------- Zertifikat zurückziehen: openssl ca -config ORGANIZATION_openssl.cnf -revoke newcerts/Cert.pem openssl ca -config ORGANIZATION_openssl.cnf -gencrl -out ORGANIZATION_CACrl.pem Zurückgezogene Zertifikate ausgeben: openssl crl -text -noout -in ORGANIZATION_CACrl.pem ------------------------------------------------------------------------------- Zertifikate einer Zertifikatskette ausgeben: openssl pkcs7 -print_certs -in file ------------------------------------------------------------------------------- Nur einen Schlüssel erzeugen: openssl genrsa -out Key.pem -aes256 4096 Für Daemons obigen Befehl ohne -aes256 oder das Passwort wieder entfernen: openssl rsa -in Key.pem -out Key.pem Passwort ändern: openssl rsa -in Key.pem -out Key.pem -aes256 ------------------------------------------------------------------------------- Datei verschlüsseln: openssl smime -encrypt -des -outform DER -in Nachricht.txt -out Nachricht_verschluesselt.txt HansDampf.crt Und diese wieder entschlüsseln: openssl smime -decrypt -inform DER -in Nachricht_verschluesselt.txt -out Nachricht.txt -inkey DAK.key ------------------------------------------------------------------------------- LANCOM LCOS (Router) - https: Zunächst lokal ein Server-Zertifikat erstellen. Danach: Webinterface: Extras > Dateimanagement > Zertifikat oder Datei hochladen: oder LANconfig: Konfigurations-Verwaltung > Zertifikat oder Datei hochladen...: SSL - Root-CA-Zertifikat (*.pem, *.crt. *.cer [BASE64]): ORGANIZATION_CACert.pem SSL - Privater-Schlüssel (*.key [BASE64 unverschlüsselt]): FQDN_Key.pem SSL - Zertifikat (*.pem, *.crt. *.cer [BASE64]): FQDN_Cert.pem ------------------------------------------------------------------------------- LANCOM LCOS (Router) - IPSec/IKEv2 - Android mit strongSwan: Zunächst lokal (für den Router) ein VPN-Server-Zertifikat erstellen: cp ORGANIZATION_openssl.cnf FQDN_openssl.cnf $EDITOR FQDN_openssl.cnf openssl req -config FQDN_openssl.cnf -reqexts ipsecserver -new -nodes -out FQDN_CertRequest.pem Zertifikat erstellen / Request signieren: openssl ca -config FQDN_openssl.cnf -in FQDN_CertRequest.pem -out FQDN_Cert.pem del FQDN_CertRequest.pem Zertifikatspaket für Route: openssl pkcs12 -export -in FQDN_Cert.pem -inkey FQDN_Key.pem -name "FQDN" -certfile CACert.pem -caname "CA Name" -out FQDN_Cert_with_Key_and_CACert_for_Router.p12 Es muss ein Passwort vergeben werden. Webinterface: Extras > Dateimanagement > Zertifikat oder Datei hochladen: oder LANconfig: Konfigurations-Verwaltung > Zertifikat oder Datei hochladen...: VPN - Container (VPNx) als PKCS#12-Datei (*.pfx, *.p12): FQDN_Cert_with_Key_and_CACert_for_Router.p12 ✔ Vorhandene CA Zertifikate ersetzten Überprüfung der Importe per Webinterface > Extras > Show Befehl ausführen: vpn ca vpn cert oder Konsole: show vpn ca show vpn cert (Falls man die Keys und CAs wieder löschen möchte: cd /Status/File-System/Contents/ del vpn_rootcert del vpn_devcert del vpn_devprivkey ) Client-Zertifikat erstellen: Schlüssel und Certificate Signing Request erzeugen: cp ORGANIZATION_openssl.cnf ClientXYZ-FQDN_openssl.cnf #ClientXYZ-FQDN: android123.example.local. Der Hostname muss #nicht echt sein, muss aber konsequent durchgezogen werden. $EDITOR ClientXYZ-FQDN_openssl.cnf openssl req -config ClientXYZ-FQDN_openssl.cnf -reqexts ipsecclient -new -nodes -out ClientXYZ-FQDN_CertRequest.pem Zertifikat erstellen / Request signieren: openssl ca -config ORGANIZATION_openssl.cnf -in ClientXYZ-FQDN_CertRequest.pem -out ClientXYZ-FQDN_Cert.pem rm FQDN_CertRequest.pem Zertifikatcontainer für Android: (Bei OpenSSL für Windows von https://slproweb.com/products/Win32OpenSSL.html ist die nicht Light-Version nötig und diese Umgebugsvariable: SET OPENSSL_MODULES=C:\Program Files\OpenSSL-Win64\bin openssl pkcs12 -legacy -export -in ClientXYZ-FQDN_Cert.pem -inkey ClientXYZ-FQDN_Key.pem -name "HOSTNAME" -out ClientXYZ-FQDN_Cert_with_Key_for_strongSwan.p12 Ab OpenSSL >= 3 wird -legacy benötigt, da sonst das Zertifikat in Android nicht importiert werden kann. https://docs.strongswan.org/docs/5.9/pki/pkiQuickstart.html#_pkcs12_container Webinterface: Setup-Wizards > Einwahl-Zugang bereitstellen (RAS, VPN): oder LANconfig: Setup-Assistent > Einwahl-Zugang bereitstellen (RAS, VPN): Austausch-Modus: IKEv2 Name (VPN): ClientXYZ Fully Qualified Username: ClientXYZ-FQDN Fertigstellen VPN > IKEv2/IPSec > Authentifizierung > ClientXYZ Lokale Authentifizierung: Digital-Signature Lokales Dig.Signature-Prof.: DEFAULT-RSA-PKCS Lokaler Identitätstyp: ASN.1-Distinguished-Name Lokale Identität: CN=FQDN Entfernte Authentifizierung: Digital-Signature Entf. Dig. Signature-Profil: DEFAULT-RSA-PKCS Entfernter Identitätstyp: ASN.1-Distinguished-Name Entfernte Identität: CN=Client-FQDN Lokales Zertifikat: VPNx (Es empfiehlt sich auch dann ein IP-Pool, wenn man per Wizard/Routing-Tabelle eine feste Client-IP vorgibt, damit damit bestimmte DNS-Server vorgeschrieben werden können. Hat man mehrere Netze, kann es sonst passieren das der falsche Server per CFG gepusch wird.) (Nicht vergessen: Ist die Firewall zum blockieren von Traffic zwischen Netzen konfiguriert, muss der VPN-Client (aka. Gegenstelle) expliziet freigegeben werden!) Auf Handy ClientXYZ-FQDN_Cert_with_Key_for_strongSwan.p12 und ORGANIZATION_CACert.der.crt hochlade und https://play.google.com/store/apps/details?id=org.strongswan.android installieren. StrongSwan starten > PROFIL HINZUFÜGEN Server: FQDN VPN-Typ: IKEv2 Zertifikat BENUTZER-ZERTIFIKAT INSTALLIEREN (ClientXYZ-FQDN_Cert_with_Key_for_strongSwan.p12) CA-Zertifikat Automatisch wählen: Nein CA-Zertifikat auswählen > Importiert: Zertifikat importieren (ORGANIZATION_CACert.der.crt) Erweiterte Einstellungen anzeigen: Ja RSA/PSS Signaturen verwenden: Ja IPv6 Transport-Adressen verwenden: Ja SPEICHERN ------------------------------------------------------------------------------- LANCOM LCOS (Router) - IPSec/IKEv2 - Windows >= 22H2 Vorab: Der native VPN-Client von Windows hat gewisse Eigenarten, der ihn für Mehrbenutzersysteme ungünstig macht. Wurde Beispielsweise von Benutzer A eine VPN-Verbindung aufgebaut und Benutzer B startet eine Desktopsitzung, egal ob durch anmelden physisch am Rechner oder entfernt per RDP, wird die VPN-Verbindung getrennt! Das gilt auch für, beim Systemstart per Aufgaben- planung, vom Admin gestartete Verbindungen. Das ist ein von MS beabsichtigtes Verhalten und lässt sich nicht ändern! Das VPN-Router-Zertifikat muss zwingend zum Hostnamen(FQDN) passen. Denn es ist nicht möglich, dem Client eine erwartete Identität (CN) zu konfigurieren. Router: Siehe Android-Anleitung Client: CACert installieren. Siehe oben. Client-Zertifikat erstellen: Schlüssel und Certificate Signing Request erzeugen: copy ORGANIZATION_openssl.cnf ClientXYZ-FQDN_openssl.cnf notepad ClientXYZ-FQDN_openssl.cnf openssl req -config ClientXYZ-FQDN_openssl.cnf -reqexts ipsecclient -new -nodes -out ClientXYZ-FQDN_CertRequest.pem Zertifikat erstellen / Request signieren: openssl ca -config ORGANIZATION_openssl.cnf -in ClientXYZ-FQDN_CertRequest.pem -out ClientXYZ-FQDN_Cert.pem del FQDN_CertRequest.pem Zertifikatcontainer für Windows: (https://slproweb.com/products/Win32OpenSSL.html Die nicht Light-Version und diese Umgebugsvariable: SET OPENSSL_MODULES=C:\Program Files\OpenSSL-Win64\bin openssl pkcs12 -export -in ClientXYZ-FQDN_Cert.pem -inkey ClientXYZ-FQDN_Key.pem -name "ClientXYZ-FQDN" -out ClientXYZ-FQDN_Cert_with_Key_for_Windows_Personal_certlm.p12 Doppelklick auf ClientXYZ-FQDN_Cert_with_Key_for_Windows_Personal_certlm.p12 > Lokaler Computer > Alle Zertifikate in folgendem Speicher speichern: Eigene Zertifikate oder CMD: certutil -p PW_oder_-p_weglassen -importPFX ClientXYZ-FQDN_Cert_with_Key_for_Windows_Personal_certlm.p12 BTW: Das Zertifikat sieht man in certlm.msc, nicht in certmgr.msc! Router: Webinterface: Setup-Wizards > Einwahl-Zugang bereitstellen (RAS, VPN): oder LANconfig: Setup-Assistent > Einwahl-Zugang bereitstellen (RAS, VPN): Austausch-Modus: IKEv2 Name (VPN): ClientXYZ Fully Qualified Username: ClientXYZ-FQDN Fertigstellen VPN > IKEv2/IPSec > Authentifizierung > ClientXYZ Lokale Authentifizierung: Digital-Signature Lokales Dig.Signature-Prof.: DEFAULT-RSA-PKCS Lokaler Identitätstyp: ASN.1-Distinguished-Name Lokale Identität: CN=FQDN Entfernte Authentifizierung: Digital-Signature Entf. Dig. Signature-Profil: DEFAULT-RSA-PKCS Entfernter Identitätstyp: ASN.1-Distinguished-Name Entfernte Identität: CN=Client-FQDN Lokales Zertifikat: VPNx VPN Flexibler Identitätsvergleich aktiviert: Ein (Damit genügt bei der Identität "CN=Client-FQDN". Ist die Einstellung aus, muss immer der vollständige Subject angegeben werden. Muss jeder selber wissen. Ich sehe keine Sicherheitsreduktion.) (Nicht vergessen: Ist die Firewall zum blockieren von Traffic zwischen Netzen konfiguriert, muss der VPN-Client (aka. Gegenstelle) expliziet freigegeben werden!) Client: https://learn.microsoft.com/en-us/powershell/module/vpnclient/add-vpnconnection https://learn.microsoft.com/en-us/powershell/module/vpnclient/set-vpnconnectionipsecconfiguration https://learn.microsoft.com/en-us/powershell/module/vpnclient/add-vpnconnectionroute https://learn.microsoft.com/en-us/windows/security/identity-protection/vpn/vpn-auto-trigger-profile PowerShell: Add-VPNConnection -Name Bezeichnung -ServerAddress FQDN -TunnelType Ikev2 -AuthenticationMethod MachineCertificate -EncryptionLevel Required -IdleDisconnectSeconds 0 -SplitTunneling -AllUserConnection -PassThru Set-VpnConnectionIPsecConfiguration -ConnectionName Bezeichnung -AuthenticationTransformConstants GCMAES256 -CipherTransformConstants GCMAES256 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -PfsGroup PFS2048 -AllUserConnection -PassThru -Force Add-VpnConnectionRoute -ConnectionName Bezeichnung -DestinationPrefix 192.168.0.0/24 -AllUserConnection -PassThru Handelt es sich bei der Serveradresse um eine IPv6-Adresse bzw. löst der Name zu einer auf, ist folgender Schritt, aufgrund von Interoperabilitätsproblemen, zwingend notwendig: ncpa.cpl > Bezeichnung > Eigenschaften > Sicherheit > Erweiterte Einstellungen > IKEv2 > Mobilität: aus (Da dafür kein CLI-Befehl bekannt ist, muss diese Einstellung leider per GUI getätigt werden.) Mit dem Befehl "rasdial Bezeichnung" startet man die VPN-Verbindung. Oder manuell über das Netzwerk-Icon in der Taskleiste. "rasdial Bezeichnung /d" zum trennen. Achtung: Der Client kümmert sich nicht um eine Neuverbindung, sollte, aus beliebigen Gründen, die Verbindung getrennt werden. Man stößt häufig auf die Empfehlung, per Aufgabenplanung auf die RasClient-EventID 20226 oder NetzwerkProfile-EventID 10000 mit einem Reconnect zu reagieren. Das funktioniert, aber nur wenn Windows die VPN-Verbindung als getrennt meldet. Was meiner Erfahrung nach nicht immer zuverlässig funktioniert. Daher verwende ich nur noch folgendes Script, welches auch eingefrorene Verbindungen erkennt und mit längeren Netzausfällen zurecht kommt: https://aloof.de/f/stable-rasdial.bat Natürlich kann man auch beides machen: SCHTASKS /Create /TN "Bezeichnung 2 Neustarten VPN-Abbruch" /SC ONEVENT /EC Application /MO "*[System[Provider[@Name='RasClient'] and EventID=20226]]" /DELAY 0000:05 /TR "rasdial Bezeichnung" /NP /F SCHTASKS /Create /TN "Bezeichnung 3 Neustarten Neue Netzwerkverbindung" /SC ONEVENT /EC "Microsoft-Windows-NetworkProfile/Operational" /MO "*[System[Provider[@Name='Microsoft-Windows-NetworkProfile'] and EventID=10000]]" /DELAY 0000:05 /TR "rasdial Bezeichnung" /NP /F ------------------------------------------------------------------------------- LANCOM LCOS (Router) - IPSec/IKEv2 - OpenBSD https://aloof.de/2023-03-05%20IPSec%20VPN%20zwischen%20LANCOM-Router%20und%20OpenBSD/ ------------------------------------------------------------------------------- Brother Drucker - https: Siehe Server-Zertifikat erstellen. SET OPENSSL_MODULES=C:\Program Files\OpenSSL-Win64\bin openssl pkcs12 -legacy -export -in FQDN_Cert.pem -inkey FQDN_Key.pem -name "FQDN" -out FQDN_Cert_with_Key.p12 Es muss ein Passwort vergeben werden. Webinterface: Netzwerk > Sicherheit > CA-Zertifikat: CA-Zertifikat importieren>> ORGANIZATION_CACert.pem Netzwerk > Sicherheit > Zertifikat: Zertifikat und Private Key importieren>> FQDN_Cert_with_Key.p12 Netzwerk > Protokoll > HTTP-Servereinstellungen: Wählen Sie das Zertifikat: FQDN -------------------------------------------------------------------------------