GNU/Linux >> Belajar Linux >  >> Debian

Siapkan Otentikasi Sertifikat di OpenConnect VPN Server (ocserv)

Tutorial ini akan menunjukkan cara mengatur otentikasi sertifikat di server OpenConnect VPN (ocserv) di Debian/Ubuntu/CentOS/RHEL. OpenConnect (ocserv) adalah implementasi sumber terbuka dari protokol VPN Cisco AnyConnect.

Pada artikel sebelumnya, saya menjelaskan langkah-langkah untuk mengatur server OpenConnect VPN dengan sertifikat server Let's Encrypt TLS. Let's Encrypt tidak mengeluarkan sertifikat klien, jadi dalam artikel itu, kami menggunakan otentikasi kata sandi. Memasukkan nama pengguna dan kata sandi setiap saat bisa merepotkan, terutama jika perangkat lunak klien, seperti aplikasi Cisco AnyConnect di iOS, tidak menawarkan opsi untuk mengingat kata sandi. Banyak perangkat lunak klien OpenConnect dapat mengimpor sertifikat pengguna, yang akan membebaskan pengguna dari memasukkan nama pengguna dan kata sandi. Otentikasi sertifikat juga lebih aman daripada otentikasi kata sandi.

Persyaratan

Untuk mengikuti tutorial ini, diasumsikan bahwa Anda telah menyiapkan server OpenConnect VPN dengan sertifikat server Let's Encrypt TLS. Jika tidak, ikuti salah satu tutorial berikut.

  • Siapkan OpenConnect VPN Server (ocserv) di Ubuntu 20.04 dengan Let's Encrypt
  • Mengatur OpenConnect VPN Server (ocserv) di Debian 11 Bullseye dengan Let's Encrypt
  • Siapkan OpenConnect VPN Server (ocserv) di CentOS 8/RHEL 8 dengan Let's Encrypt

Kami akan menyiapkan CA (Certificate Authority) kami sendiri untuk menandatangani sertifikat klien. ocserv daemon harus terus menggunakan sertifikat server TLS yang dikeluarkan oleh Let's Encrypt, sehingga perangkat lunak klien tidak akan menampilkan peringatan keamanan.

Menyiapkan CA Anda Sendiri (Otoritas Sertifikat)

Kami ingin menggunakan otentikasi sertifikat, tetapi Let's Encrypt tidak mengeluarkan sertifikat klien, jadi kami perlu membuat CA kami sendiri. Anda dapat menggunakan openssl untuk melakukan pekerjaan itu, tetapi ocserv merekomendasikan GnuTLS, jadi saya akan menunjukkan cara menggunakan GnuTLS.

Instal gnutls-bin paket di server Debian/Ubuntu.

sudo apt install gnutls-bin

Instal gnutls-utils paket di CentOS/RHEL.

sudo dnf install gnutls-utils

Buat sub-direktori di /etc/ocserv/ untuk memegang kunci dan sertifikat pribadi.

sudo mkdir /etc/ocserv/ssl/

Ubah direktori kerja Anda.

cd /etc/ocserv/ssl/

Buat kunci pribadi untuk CA dengan certtool perintah, yang disediakan oleh gnutls-bin atau gnutls-utils kemasan. Secara default, ini menghasilkan kunci RSA 3072 bit, yang sudah cukup.

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

Sebelum membuat sertifikat CA, mari buat file template sertifikat CA. Format file template dapat ditemukan di certtool manual (man certtool ).

sudo nano ca-cert.cfg

Tambahkan baris berikut ke file. Ganti placeholder dengan nilai yang sesuai.

# X.509 Opsi sertifikat# Organisasi subjek.organisasi ="vpn.example.com"# Nama umum pemilik sertifikat.cn ="Contoh CA"# Nomor seri sertifikat.serial =001# Dalam berapa hari, terhitung mulai hari ini, sertifikat ini akan kedaluwarsa. Gunakan -1 jika tidak ada tanggal kedaluwarsa.expiration_days =-1# Apakah ini sertifikat CA atau bukanca# Apakah sertifikat ini akan digunakan untuk menandatangani datasigning_key# Apakah kunci ini akan digunakan untuk menandatangani sertifikat lain.cert_signing_key# Apakah kunci ini akan digunakan untuk menandatangani CRLs.crl_signing_key

Simpan dan tutup file. Sekarang buat sertifikat CA menggunakan konfigurasi dari file template.

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

Sekarang kita memiliki file sertifikat CA (ca-cert.pem ).

Membuat Sertifikat Klien

Sekarang jalankan perintah berikut untuk menghasilkan kunci pribadi klien.

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

Buat file template sertifikat klien.

sudo nano client-cert.cfg

Tambahkan baris berikut ke dalam file. Uid harus berupa nama pengguna di /etc/ocserv/ocpasswd berkas.

# X.509 Opsi sertifikat# Organisasi subjek.organisasi ="vpn.example.com"# Nama umum pemilik sertifikat.cn ="John Doe"# ID pengguna pemilik sertifikat.uid ="nama pengguna"# Dalam berapa hari, terhitung mulai hari ini, sertifikat ini akan kedaluwarsa. Gunakan -1 jika tidak ada tanggal kedaluwarsa.expiration_days =3650# Apakah sertifikat ini akan digunakan untuk server TLStls_www_client# Apakah sertifikat ini akan digunakan untuk menandatangani datasigning_key# Apakah sertifikat ini akan digunakan untuk mengenkripsi data (diperlukan# di TLS RSA ciphersuite). Perhatikan bahwa lebih disukai menggunakan# kunci yang berbeda untuk enkripsi dan penandatanganan.encryption_key

Simpan dan tutup file. Kemudian jalankan perintah berikut untuk menghasilkan sertifikat klien, yang akan ditandatangani oleh kunci pribadi 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

Gabungkan kunci pribadi klien dan sertifikat dalam file PKCS #12 yang dilindungi oleh PIN.

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

Sekarang kami memiliki kunci pribadi klien dan sertifikat yang digabungkan menjadi satu file client.p12 .

Perhatikan bahwa aplikasi Ciso AnyConnect di iOS tidak mendukung sandi AES-256. Itu akan menolak untuk mengimpor sertifikat klien. Jika pengguna menggunakan perangkat iOS, maka Anda dapat memilih 3des-pkcs12 sandi.

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

Kunci pribadi klien dan sertifikat digabungkan menjadi satu file ios-client.p12 .

Permintaan Penandatanganan Sertifikat

Langkah ini hanya diperlukan jika ada beberapa pengguna VPN, dan pengguna ingin menggunakan kunci pribadinya sendiri.

Untuk menjaga kerahasiaan kunci pribadi pengguna akhir, pengguna dapat membuat permintaan penandatanganan sertifikat (CSR) dengan kunci pribadi mereka sendiri, lalu mengirim permintaan sertifikat ke admin, yang kemudian menerbitkan sertifikat klien kepada pengguna. Pertama, mereka harus membuat kunci pribadi dan template sertifikat klien menggunakan perintah yang disebutkan di atas. Kemudian buat CSR dengan perintah berikut. request.pem file ditandatangani oleh kunci pribadi pengguna.

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

Selanjutnya, pengguna mengirimkan request.pem dan client-cert.cfg file ke admin, yang menjalankan perintah berikut untuk menghasilkan sertifikat klien.

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

Setelah itu admin mengirimkan client-cert.pem file sertifikat kepada pengguna.

Mengaktifkan Otentikasi Sertifikat di ocserv Daemon

Edit file konfigurasi ocserv.

sudo nano /etc/ocserv/ocserv.conf

Pada tutorial sebelumnya, kami menambahkan baris berikut untuk mengaktifkan otentikasi kata sandi.

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

Untuk mengaktifkan otentikasi sertifikat, batalkan komentar pada baris berikut.

auth ="sertifikat"

Jika dua baris di atas tidak diberi komentar, itu berarti pengguna harus melewati otentikasi kata sandi dan otentikasi sertifikat. Jadi, jika otentikasi sertifikat cukup untuk membuktikan identitas, maka beri komentar di baris pertama.

Jika Anda mengizinkan pengguna untuk memilih autentikasi sertifikat atau autentikasi kata sandi, maka Anda harus memiliki baris berikut sebagai gantinya.

enable-auth ="plain[passwd=/etc/ocserv/ocpasswd]"auth ="certificate"

Sekarang temukan parameter ca-cert. Di Debian/Ubuntu, disetel ke

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

Pada CentOS 8/RHEL 8, disetel ke

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

Kami perlu menggunakan sertifikat CA kami sendiri untuk memverifikasi sertifikat klien, jadi ubah baris ini menjadi

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

Selanjutnya, cari baris berikut.

cert-user-oid =0.9.2342.19200300.100.1.1

Anda tidak perlu mengubahnya. Saya hanya ingin memberi tahu Anda bahwa 0.9.2342.19200300.100.1.1 mewakili UID yang diajukan dalam sertifikat klien. Baris di atas memberitahu ocserv daemon untuk menemukan nama pengguna dari bidang UID sertifikat klien. Jika sertifikat klien berhasil diverifikasi oleh sertifikat CA dan ocserv daemon dapat menemukan nama pengguna yang cocok di /etc/ocserv/ocpasswd file, maka klien dapat login.

Simpan dan tutup file. Kemudian restart ocserv.

sudo systemctl restart ocserv

Menggunakan Otentikasi Sertifikat di Debian/Ubuntu/CentOS/RHEL Desktop

Gunakan scp perintah untuk mengunduh client.p12 file ke desktop Debian/Ubuntu/CentOS/RHEL Anda.

scp [dilindungi email]:/etc/ocserv/ssl/client.p12 ~

Kemudian instal openconnect perangkat lunak klien.

Debian/Ubuntu:

sudo apt install openconnect

CentOS/RHEL:

sudo dnf install epel-releasesudo dnf install openconnect

Untuk menggunakan autentikasi sertifikat, jalankan

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

Anda akan diminta untuk membuka kunci pribadi klien dengan frasa sandi yang telah Anda atur sebelumnya dalam tutorial ini.

Jika frasa sandi dimasukkan dengan benar, Anda sekarang harus terhubung ke server VPN.

Menggunakan Otentikasi Sertifikat di Desktop Windows dan MacOS

Unduh klien OpenConnect GUI untuk Window atau MacOS dari OpenConnect GUI Github Page. Kemudian buat profil koneksi VPN baru dan impor file PKCS #12 ke bidang sertifikat pengguna. Klik tombol Simpan. Anda harus memasukkan PIN untuk membuka kunci pribadi. Setelah diimpor, Anda tidak perlu lagi memasukkan nama pengguna dan sandi.

Menggunakan Autentikasi Sertifikat di Perangkat iOS

Pengguna iOS dapat menggunakan aplikasi Cisco AnyConnect. Untuk mengimpor sertifikat klien di aplikasi AnyConnect, Anda dapat mengirim file PKCS #12 terlebih dahulu ke alamat email Anda dalam lampiran. Kemudian buka aplikasi email di iOS. Ketuk lampiran beberapa detik dan bagikan dengan AnyConnect. Kemudian masukkan PIN untuk mengimpor file.

Setelah diimpor, edit koneksi VPN Anda di AnyConnect. Buka Advanced -> Certificate dan pilih sertifikat klien. Simpan setelan Anda.

Sekarang Anda tidak perlu lagi memasukkan nama pengguna dan kata sandi di perangkat iOS Anda. Aplikasi Cisco AnyConnect tidak mengingat nama pengguna dan kata sandi, jadi dalam mode otentikasi kata sandi, koneksi VPN akan terputus saat telepon tidak digunakan. Dalam mode autentikasi sertifikat, aplikasi akan secara otomatis terhubung kembali ke server VPN jika koneksi terputus.

Masalah dengan Klien AnyConnect di iOS

Versi terbaru klien AnyConnect di iOS mengalami masalah saat menggunakan autentikasi sertifikat dalam protokol TLS 1.3. Jika Anda melihat kesalahan berikut di log ocserv (sudo journalctl -eu ocserv ), Anda memiliki masalah yang sama.

Kesalahan GnuTLS (di worker-vpn.c:795):Peringatan fatal TLS telah diterima.

Entah Anda perlu menggunakan otentikasi kata sandi di klien AnyConnect iOS atau menonaktifkan TLS 1.3 di file konfigurasi ocserv. Untuk menonaktifkan TLS1.3, temukan tls-priorities parameter di /etc/ocserv/ocserv.conf file, dan tambahkan :-VERS-TLS1.3 di akhir untuk menonaktifkan TLS 1.3.

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

Simpan dan tutup file. Kemudian restart ocserv.

sudo systemctl restart ocserv

Catatan :Jika Anda melihat SSL 3.3 frase di log ocserv, jangan panik. SSL 3.3 adalah kata lain dari TLS 1.2. Anda menggunakan koneksi TLS yang aman.


Debian
  1. Cara Mengatur VPN WireGuard di Ubuntu (Panduan Langkah-demi-Langkah)

  2. Cara Mengatur dan Mengonfigurasi Otoritas Sertifikat Di Ubuntu 22.04

  3. Mengatur Otentikasi Multi-Faktor untuk SSH di Ubuntu 20.04

  1. Siapkan server VPN di PC Linux Anda

  2. Server VPN PPTP

  3. Cara mengatur server SFTP di Server Debian 11

  1. Cara Mengatur VPN WireGuard di Debian 10

  2. Cara Mengatur Server OpenVPN di Debian 9

  3. Siapkan Server VPN Linux menggunakan OpenVPN – Panduan Langkah-demi-Langkah