GNU/Linux >> Znalost Linux >  >> Debian

Nastavení ověřování certifikátů v OpenConnect VPN Server (ocserv)

Tento tutoriál vám ukáže, jak nastavit ověřování certifikátů na serveru OpenConnect VPN (ocserv) na Debian/Ubuntu/CentOS/RHEL. OpenConnect (ocserv) je open-source implementace protokolu Cisco AnyConnect VPN.

V předchozím článku jsem vysvětlil kroky k nastavení serveru OpenConnect VPN s certifikátem serveru Let's Encrypt TLS. Let’s Encrypt nevydává klientský certifikát, takže v tomto článku jsme použili ověřování heslem. Pokaždé zadávat uživatelské jméno a heslo může být obtížné, zvláště pokud klientský software, jako je aplikace Cisco AnyConnect pro iOS, nenabízí možnost zapamatovat si hesla. Mnoho klientského softwaru OpenConnect umí importovat uživatelské certifikáty, které uživatele osvobodí od zadávání uživatelského jména a hesla. Ověření certifikátem je také bezpečnější než ověřování heslem.

Požadavky

Chcete-li postupovat podle tohoto návodu, předpokládá se, že jste již nastavili server OpenConnect VPN s certifikátem serveru Let's Encrypt TLS. Pokud ne, postupujte podle jednoho z následujících výukových programů.

  • Nastavte OpenConnect VPN Server (ocserv) na Ubuntu 20.04 pomocí Let’s Encrypt
  • Nastavte OpenConnect VPN Server (ocserv) na Debian 11 Bullseye pomocí Let’s Encrypt
  • Nastavte OpenConnect VPN Server (ocserv) na CentOS 8/RHEL 8 pomocí Let’s Encrypt

Založíme vlastní CA (Certifikační autoritu) k podepisování klientského certifikátu. ocserv démon by měl nadále používat certifikát serveru TLS vydaný společností Let’s Encrypt, takže klientský software nebude zobrazovat bezpečnostní varování.

Nastavení vlastní CA (certifikační autority)

Chceme použít autentizaci certifikátem, ale Let’s Encrypt nevydává klientský certifikát, takže si musíme vytvořit vlastní CA. Můžete použít openssl aby to udělal, ale ocserv doporučuje GnuTLS, takže vám ukážu, jak GnuTLS používat.

Nainstalujte gnutls-bin balíček na serveru Debian/Ubuntu.

sudo apt install gnutls-bin

Nainstalujte gnutls-utils balíček na CentOS/RHEL.

instalace sudo dnf gnutls-utils

Vytvořte podadresář v /etc/ocserv/ k držení soukromých klíčů a certifikátů.

sudo mkdir /etc/ocserv/ssl/

Změňte svůj pracovní adresář.

cd /etc/ocserv/ssl/

Vygenerujte soukromý klíč pro CA pomocí certtool příkaz, který poskytuje gnutls-bin nebo gnutls-utils balík. Ve výchozím nastavení generuje 3072bitový klíč RSA, což je dostatečné.

sudo certtool --generate-privkey --outfile ca-privkey.pem

Před vygenerováním certifikátu CA vytvořte soubor šablony certifikátu CA. Formát souboru šablony lze nalézt v příručce certtool (man certtool ).

sudo nano ca-cert.cfg

Přidejte do souboru následující řádky. Nahraďte zástupné symboly příslušnými hodnotami.

# X.509 Certificate options# Organizace předmětu.organizace ="vpn.example.com"# Běžný název vlastníka certifikátu.cn ="Příklad CA"# Sériové číslo certificate.serial =001# Za kolik dní, počítáno ode dneška, vyprší platnost tohoto certifikátu. Použijte -1, pokud neexistuje datum vypršení platnosti.expiration_days =-1# Zda se jedná o certifikát CA nebo neca# Zda bude tento certifikát použit k podepsání datasigning_key# Zda bude tento klíč použit k podepsání dalších certifikátů.cert_signing_key# Zda tento klíč se použije k podepsání CRLs.crl_signing_key

Uložte a zavřete soubor. Nyní vygenerujte certifikát CA pomocí konfigurací ze souboru šablony.

sudo certtool --generate-self-signed --load-privkey ca-privkey.pem --template ca-cert.cfg --outfile ca-cert.pem

Nyní máme soubor certifikátu CA (ca-cert.pem ).

Generování klientského certifikátu

Nyní spusťte následující příkaz pro vygenerování soukromého klíče klienta.

sudo certtool --generate-privkey --outfile client-privkey.pem

Vytvořte soubor šablony klientského certifikátu.

sudo nano client-cert.cfg

Přidejte do souboru následující řádky. Uid musí být uživatelské jméno v /etc/ocserv/ocpasswd soubor.

# X.509 Certificate options# Organizace předmětu.organizace ="vpn.example.com"# Běžné jméno vlastníka certifikátu.cn ="John Doe"# ID uživatele vlastníka certifikátu.uid ="username"# Za kolik dní, počítáno ode dneška, vyprší platnost tohoto certifikátu. Použijte -1, pokud neexistuje datum vypršení platnosti.expiration_days =3650# Zda bude tento certifikát použit pro TLS servertls_www_client# Zda bude tento certifikát použit k podpisu datasigning_key# Zda bude tento certifikát použit k šifrování dat (potřebné# v TLS RSA šifrovací soupravy). Všimněte si, že je upřednostňováno používat různé # klíče pro šifrování a podepisování.encryption_key

Uložte a zavřete soubor. Poté spusťte následující příkaz pro vygenerování klientského certifikátu, který bude podepsán soukromým klíčem CA.

sudo certtool --generate-certificate --load-privkey client-privkey.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-privkey.pem --template client-cert .cfg --outfile client-cert.pem

Zkombinujte klientský soukromý klíč a certifikát v souboru PKCS #12, který je chráněn kódem PIN.

sudo certtool --to-p12 --load-privkey client-privkey.pem --load-certificate client-cert.pem --pkcs-cipher aes-256 --outfile client.p12 --outder

Nyní máme klientský soukromý klíč a certifikát sloučeny do jednoho souboru client.p12 .

Všimněte si, že aplikace Ciso AnyConnect na iOS nepodporuje šifru AES-256. Odmítne importovat klientský certifikát. Pokud uživatel používá zařízení iOS, můžete zvolit 3des-pkcs12 šifra.

sudo certtool --to-p12 --load-privkey client-privkey.pem --load-certificate client-cert.pem --pkcs-cipher 3des-pkcs12 --outfile ios-client.p12 --outder 

Soukromý klíč klienta a certifikát sloučeny do jednoho souboru ios-client.p12 .

Žádost o podpis certifikátu

Tento krok je potřeba pouze v případě, že existuje více uživatelů VPN a uživatel chce použít svůj vlastní soukromý klíč.

Aby byly soukromé klíče koncových uživatelů uchovány v tajnosti, mohou uživatelé generovat žádost o podepsání certifikátu (CSR) se svými vlastními soukromými klíči a poté odesílat žádosti o certifikát správci, který pak vydává klientské certifikáty uživatelům. Nejprve musí pomocí výše uvedených příkazů vygenerovat soukromý klíč a šablonu klientského certifikátu. Poté vygenerujte CSR pomocí následujícího příkazu. request.pem soubor je podepsán soukromým klíčem uživatele.

certtool --generate-request --load-privkey client-privkey.pem --template client-cert.cfg --outfile request.pem

Dále uživatel odešle request.pem a client-cert.cfg soubor adminovi, který spustí následující příkaz pro vygenerování klientského certifikátu.

sudo certtool --generate-certificate --load-ca-certificate ca-cert.pem --load-ca-privkey ca-privkey.pem --load-request request.pem --template client-cert.cfg --outfile client-cert.pem

Poté administrátor odešle client-cert.pem soubor certifikátu uživateli.

Povolení ověření certifikátu v démonu ocserv

Upravte konfigurační soubor ocserv.

sudo nano /etc/ocserv/ocserv.conf

V předchozím tutoriálu jsme přidali následující řádek pro povolení ověřování hesla.

auth ="plain[passwd=/etc/ocserv/ocpasswd]"

Chcete-li povolit ověřování certifikátem, zrušte komentář na následujícím řádku.

auth ="certifikát"

Pokud jsou oba výše uvedené řádky bez komentáře, znamená to, že uživatel musí projít autentizací heslem i autentizací certifikátem. Pokud tedy k prokázání identity stačí autentizace certifikátem, zakomentujte první řádek.

Pokud uživatelům umožníte, aby si vybrali buď ověření certifikátem, nebo ověření heslem, měli byste mít místo toho následující řádky.

enable-auth ="plain[passwd=/etc/ocserv/ocpasswd]"auth ="certifikát"

Nyní najděte parametr ca-cert. V Debianu/Ubuntu je nastavena na

ca-cert =/etc/ssl/certs/ssl-cert-snakeoil.pem

Na CentOS 8/RHEL 8 je nastavena na

ca-cert =/etc/ocserv/ca.pem

K ověření klientského certifikátu potřebujeme použít vlastní certifikát CA, proto změňte tento řádek na

ca-cert =/etc/ocserv/ssl/ca-cert.pem

Dále najděte následující řádek.

cert-user-oid =0.9.2342.19200300.100.1.1

nemusíte to měnit. Chci vám jen říct, že 0.9.2342.19200300.100.1.1 představuje UID uložené v klientském certifikátu. Výše uvedený řádek říká ocserv démona k nalezení uživatelského jména z pole UID klientského certifikátu. Pokud je klientský certifikát úspěšně ověřen certifikátem CA a ocserv démon může najít odpovídající uživatelské jméno v /etc/ocserv/ocpasswd soubor, pak se klient může přihlásit.

Uložte a zavřete soubor. Poté restartujte ocserv.

sudo systemctl restart ocserv

Použití ověřování certifikátem na ploše Debian/Ubuntu/CentOS/RHEL

Použijte scp příkaz ke stažení client.p12 soubor na plochu Debian/Ubuntu/CentOS/RHEL.

scp [e-mail chráněný]:/etc/ocserv/ssl/client.p12 ~

Poté nainstalujte openconnect klientský software.

Debian/Ubuntu:

sudo apt install openconnect

CentOS/RHEL:

instalace sudo dnf epel-releasesudo dnf instalace openconnect

Chcete-li použít ověřování certifikátem, spusťte

sudo openconnect -b vpn.example.com -c klient.p12

Budete požádáni o odemknutí soukromého klíče klienta pomocí přístupové fráze, kterou jste dříve nastavili v tomto tutoriálu.

Pokud je heslo zadáno správně, měli byste být nyní připojeni k serveru VPN.

Použití ověřování certifikátem na ploše Windows a MacOS

Stáhněte si OpenConnect GUI klienta pro Windows nebo MacOS ze stránky OpenConnect GUI Github. Poté vytvořte nový profil připojení VPN a importujte soubor PKCS #12 do pole uživatelského certifikátu. Klikněte na tlačítko Uložit. K odemknutí soukromého klíče budete muset zadat PIN. Po importu již nemusíte zadávat uživatelské jméno a heslo.

Použití ověření certifikátem na zařízení iOS

Uživatelé iOS mohou používat aplikaci Cisco AnyConnect. Chcete-li importovat klientský certifikát v aplikaci AnyConnect, můžete nejprve odeslat soubor PKCS #12 na svou e-mailovou adresu v příloze. Poté otevřete poštovní aplikaci na iOS. Klepněte na přílohu několik sekund a sdílejte ji s AnyConnect. Poté zadejte PIN pro import souboru.

Po importu upravte připojení VPN v AnyConnect. Přejděte na Advanced -> Certificate a vyberte klientský certifikát. Uložte nastavení.

Nyní již na svém iOS zařízení nemusíte zadávat uživatelské jméno a heslo. Aplikace Cisco AnyConnect si nepamatuje uživatelské jméno a heslo, takže v režimu ověřování heslem se připojení VPN přeruší, když se telefon nepoužívá. V režimu ověřování certifikátem se aplikace automaticky znovu připojí k serveru VPN, pokud je připojení přerušeno.

Problémy s klientem AnyConnect v systému iOS

Nejnovější verze klienta AnyConnect na iOS má problém při použití ověřování certifikátem v protokolu TLS 1.3. Pokud v protokolu ocserv uvidíte následující chybu (sudo journalctl -eu ocserv ), máte stejný problém.

Chyba GnuTLS (na adrese worker-vpn.c:795):Bylo přijato závažné upozornění TLS.

Buď musíte použít ověřování heslem v klientovi AnyConnect iOS nebo zakázat TLS 1.3 v konfiguračním souboru ocserv. Chcete-li zakázat TLS1.3, vyhledejte tls-priorities parametr v /etc/ocserv/ocserv.conf a přidejte :-VERS-TLS1.3 na konci zakázat TLS 1.3.

tls-priorities ="NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1:-VERS -TLS1.3 "
."

Uložte a zavřete soubor. Poté restartujte ocserv.

sudo systemctl restart ocserv

Poznámka :Pokud vidíte SSL 3.3 fráze v protokolech ocserv, nepropadejte panice. SSL 3.3 je jiné slovo pro TLS 1.2. Používáte zabezpečené připojení TLS.


Debian
  1. Server PPTP VPN

  2. Jak nastavit SFTP server na Debian 11 Server

  3. Nastavte vícefaktorové ověřování pro SSH na Ubuntu 20.04

  1. Nastavte VPN server na vašem počítači se systémem Linux

  2. Jak nastavit WireGuard VPN na Ubuntu (průvodce krok za krokem)

  3. Jak nastavit a nakonfigurovat certifikační úřad na Ubuntu 22.04

  1. Jak nastavit WireGuard VPN na Debianu 10

  2. Jak nastavit server OpenVPN na Debianu 9

  3. Nastavte linuxový VPN server pomocí OpenVPN – průvodce krok za krokem