Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux
Π’ salah satu artikel kami sebelumnya kami berbicara tentang pentingnya otentikasi dua faktor di portal perusahaan. Terakhir kali kami mendemonstrasikan cara mengatur otentikasi aman di server web IIS.

Di komentar, kami diminta untuk menulis instruksi untuk server web paling umum untuk Linux - nginx dan Apache.

Anda bertanya - kami menulis.

Apa yang Anda perlukan untuk memulai?

  • Distribusi Linux modern apa pun. Saya melakukan pengaturan pengujian pada MX Linux 18.2_x64. Ini tentu saja bukan distribusi server, tapi sepertinya tidak akan ada perbedaan untuk Debian. Untuk distribusi lain, jalur ke perpustakaan konfigurasi mungkin sedikit berbeda.
  • Token. Kami terus menggunakan model tersebut Rutoken EDS PKI, yang ideal dalam hal karakteristik kecepatan untuk penggunaan korporat.
  • Untuk bekerja dengan token di Linux, Anda perlu menginstal paket berikut:
    libccid libpcsclite1 pcscd pcsc-tools terbukac

Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

Penerbitan sertifikat

Pada artikel sebelumnya, kami mengandalkan fakta bahwa sertifikat server dan klien akan diterbitkan menggunakan Microsoft CA. Namun karena kami menyiapkan semuanya di Linux, kami juga akan memberi tahu Anda tentang cara alternatif untuk menerbitkan sertifikat ini - tanpa meninggalkan Linux.
Kami akan menggunakan XCA sebagai CA (https://hohnstaedt.de/xca/), yang tersedia di semua distribusi Linux modern. Semua tindakan yang akan kami lakukan di XCA dapat dilakukan dalam mode baris perintah menggunakan utilitas alat OpenSSL dan pkcs11, tetapi untuk kesederhanaan dan kejelasan yang lebih baik, kami tidak akan menyajikannya dalam artikel ini.

Memulai

  1. Install:
    $ apt-get install xca
  2. Dan kami menjalankan:
    $ xca
  3. Kami membuat database kami untuk CA - /root/CA.xdb
    Kami menyarankan untuk menyimpan database Certificate Authority dalam folder yang hanya dapat diakses oleh administrator. Hal ini penting untuk melindungi kunci privat dari sertifikat akar, yang digunakan untuk menandatangani semua sertifikat lainnya.

Buat kunci dan sertifikat root CA

Infrastruktur kunci publik (PKI) didasarkan pada sistem hierarki. Hal utama dalam sistem ini adalah otoritas sertifikasi root atau root CA. Sertifikatnya harus dibuat terlebih dahulu.

  1. Kami membuat kunci pribadi RSA-2048 untuk CA. Untuk melakukan ini, di tab Kunci Pribadi Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ New Key dan pilih jenis yang sesuai.
  2. Tetapkan nama untuk pasangan kunci baru. Saya menyebutnya Kunci CA.
  3. Kami menerbitkan sertifikat CA itu sendiri, menggunakan pasangan kunci yang dibuat. Untuk melakukan ini, buka tab sertifikat dan dorong Sertifikat Baru.
  4. Pastikan untuk memilih SHA-256, karena penggunaan SHA-1 tidak lagi dianggap aman.
  5. Pastikan untuk memilih sebagai template [standar] CA. Jangan lupa klik Terapkan semua, jika tidak, templat tidak akan diterapkan.
  6. Di tab Subjek pilih pasangan kunci kami. Di sana Anda dapat mengisi semua kolom utama sertifikat.

Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

Membuat kunci dan sertifikat server https

  1. Dengan cara yang sama, kami membuat kunci pribadi RSA-2048 untuk server, saya menyebutnya Kunci Server.
  2. Saat membuat sertifikat, kami memilih bahwa sertifikat server harus ditandatangani dengan sertifikat CA.
  3. Jangan lupa untuk memilih SHA-256.
  4. Kami memilih sebagai template [standar] HTTPS_server. Klik Terapkan semua.
  5. Kemudian di tab Subjek pilih kunci kami dan isi kolom yang diperlukan.

Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

Buat kunci dan sertifikat untuk pengguna

  1. Kunci pribadi pengguna akan disimpan di token kami. Untuk menggunakannya, Anda perlu menginstal perpustakaan PKCS#11 dari situs web kami. Untuk distribusi populer, kami mendistribusikan paket siap pakai, yang berlokasi di sini - https://www.rutoken.ru/support/download/pkcs/. Kami juga memiliki rakitan untuk arm64, armv7el, armv7hf, e2k, mipso32el, yang dapat diunduh dari SDK kami - https://www.rutoken.ru/developers/sdk/. Selain rakitan untuk Linux, ada juga rakitan untuk macOS, freebsd, dan android.
  2. Menambahkan Penyedia PKCS#11 baru ke XCA. Untuk melakukan ini, buka menu Opsi ke tab Penyedia PKCS#11.
  3. Kami menekan Add dan pilih jalur ke perpustakaan PKCS#11. Dalam kasus saya ini adalah usrliblibrtpkcs11ecp.so.
  4. Kami memerlukan token Rutoken EDS PKI yang diformat. Unduh utilitas rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Kami melaksanakan
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>
  6. Kami memilih kunci RSA-2048 untuk Rutoken EDS PKI sebagai jenis kunci. Saya menyebut kunci ini Kunci Klien.

    Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

  7. Masukkan kode PIN. Dan kami menunggu selesainya pembuatan perangkat keras dari pasangan kunci

    Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

  8. Kami membuat sertifikat untuk pengguna dengan analogi dengan sertifikat server. Kali ini kita memilih template [default] HTTPS_client dan jangan lupa klik Terapkan semua.
  9. Di tab Subjek memasukkan informasi tentang pengguna. Kami menjawab setuju atas permintaan untuk menyimpan sertifikat untuk token.

Hasilnya, di tab Sertifikat di XCA Anda harus mendapatkan sesuatu seperti ini.

Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux
Kumpulan kunci dan sertifikat minimum ini cukup untuk mulai menyiapkan server itu sendiri.

Untuk mengonfigurasi, kita perlu mengekspor sertifikat CA, sertifikat server, dan kunci pribadi server.

Untuk melakukan ini, pilih entri yang diinginkan pada tab yang sesuai di XCA dan klik Ekspor.

Nginx

Saya tidak akan menulis cara menginstal dan menjalankan server nginx - ada cukup banyak artikel tentang topik ini di Internet, belum lagi dokumentasi resmi. Mari langsung menyiapkan HTTPS dan autentikasi dua faktor menggunakan token.

Tambahkan baris berikut ke bagian server di nginx.conf:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

Penjelasan rinci tentang semua parameter yang terkait dengan konfigurasi ssl di nginx dapat ditemukan di sini - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Saya hanya akan menjelaskan secara singkat pertanyaan-pertanyaan yang saya tanyakan pada diri saya sendiri:

  • ssl_verify_client - menentukan bahwa rantai kepercayaan untuk sertifikat perlu diverifikasi.
  • ssl_verify_ depth - Mendefinisikan kedalaman pencarian untuk sertifikat akar tepercaya dalam rantai. Karena sertifikat klien kami langsung ditandatangani pada sertifikat akar, kedalamannya disetel ke 1. Jika sertifikat pengguna ditandatangani pada CA perantara, maka 2 harus ditentukan dalam parameter ini, dan seterusnya.
  • ssl_client_certificate - menentukan jalur ke sertifikat akar tepercaya, yang digunakan saat memeriksa kepercayaan pada sertifikat pengguna.
  • ssl_certificate/ssl_certificate_key - menunjukkan jalur ke sertifikat server/kunci pribadi.

Jangan lupa jalankan nginx -t untuk memastikan tidak ada kesalahan ketik pada konfigurasi, dan semua file berada di tempat yang benar, dan seterusnya.

Dan itu saja! Seperti yang Anda lihat, pengaturannya sangat sederhana.

Memeriksa itu berfungsi di Firefox

Karena kami melakukan semuanya sepenuhnya di Linux, kami akan berasumsi bahwa pengguna kami juga bekerja di Linux (jika mereka memiliki Windows, maka lihat petunjuk pengaturan browser di artikel sebelumnya.

  1. Mari luncurkan Firefox.
  2. Mari kita coba login tanpa token terlebih dahulu. Kami mendapatkan gambar ini:

    Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

  3. Kita lanjutkan tentang: preferensi # privasi, dan kami pergi ke Perangkat Keamanan…
  4. Kami menekan Bebanuntuk menambahkan Driver Perangkat PKCS#11 baru dan menentukan jalur ke librtpkcs11ecp.so kami.
  5. Untuk memeriksa apakah sertifikat terlihat, Anda dapat mengunjungi Sertifikat Manajer. Anda akan diminta memasukkan PIN Anda. Setelah input yang benar, Anda dapat memeriksa apa yang ada di tab Sertifikat Anda sertifikat kami dari token muncul.
  6. Sekarang mari kita gunakan tokennya. Firefox meminta Anda untuk memilih sertifikat yang akan dipilih untuk server. Pilih sertifikat kami.

    Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

  7. LABA!

    Otentikasi dua faktor di situs menggunakan token USB. Sekarang juga untuk Linux

Penyiapan selesai satu kali, dan seperti yang Anda lihat di jendela permintaan sertifikat, kita dapat menyimpan pilihan kita. Setelah ini, setiap kali kita masuk ke portal, kita hanya perlu memasukkan token dan memasukkan kode PIN pengguna yang ditentukan saat pemformatan. Setelah otentikasi tersebut, server sudah mengetahui pengguna mana yang telah masuk dan Anda tidak dapat lagi membuat jendela tambahan untuk verifikasi, tetapi segera mengizinkan pengguna tersebut masuk ke akun pribadinya.

Apache

Sama seperti nginx, tidak seorang pun akan mengalami masalah saat menginstal Apache. Jika Anda tidak tahu cara menginstal server web ini, gunakan saja dokumentasi resminya.

Dan kami mulai menyiapkan HTTPS dan otentikasi dua faktor:

  1. Pertama, Anda perlu mengaktifkan mod_ssl:
    $ a2enmod ssl
  2. Lalu aktifkan pengaturan HTTPS default situs:
    $ a2ensite default-ssl
  3. Sekarang kita edit file konfigurasi: /etc/apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    Seperti yang Anda lihat, nama parameter praktis sama dengan nama parameter di nginx, jadi saya tidak akan menjelaskannya. Sekali lagi, siapa pun yang tertarik dengan detailnya dipersilakan untuk melihat dokumentasinya.
    Sekarang kami me-restart server kami:

    $ service apache2 reload
    $ service apache2 restart

  4. Seperti yang Anda lihat, menyiapkan autentikasi dua faktor di server web mana pun, baik di Windows atau Linux, memerlukan waktu maksimal satu jam. Dan pengaturan browser membutuhkan waktu sekitar 5 menit. Banyak orang berpikir bahwa menyiapkan dan bekerja dengan otentikasi dua faktor itu sulit dan tidak jelas. Saya harap artikel kami menghilangkan prasangka mitos ini, setidaknya sedikit.

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Apakah Anda memerlukan instruksi untuk menyiapkan TLS dengan sertifikat sesuai dengan Gost 34.10-2012:

  • Ya, TLS-GOST sangat diperlukan

  • Tidak, penyetelan dengan algoritma Gost tidak menarik

44 pengguna memilih. 9 pengguna abstain.

Sumber: www.habr.com

Tambah komentar