Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux
Π’ salah satu artikel kami sebelum ini kami bercakap tentang kepentingan pengesahan dua faktor pada portal korporat syarikat. Kali terakhir kami menunjukkan cara untuk menyediakan pengesahan selamat dalam pelayan web IIS.

Dalam ulasan, kami diminta untuk menulis arahan untuk pelayan web yang paling biasa untuk Linux - nginx dan Apache.

Anda bertanya - kami menulis.

Apa yang anda perlukan untuk bermula?

  • Sebarang pengedaran Linux moden. Saya melakukan persediaan ujian pada MX Linux 18.2_x64. Ini sudah tentu bukan pengedaran pelayan, tetapi tidak mungkin terdapat sebarang perbezaan untuk Debian. Untuk pengedaran lain, laluan ke perpustakaan konfigurasi mungkin berbeza sedikit.
  • Token. Kami terus menggunakan model tersebut Rutoken EDS PKI, yang sesuai dari segi ciri kelajuan untuk kegunaan korporat.
  • Untuk bekerja dengan token dalam Linux, anda perlu memasang pakej berikut:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

Mengeluarkan sijil

Dalam artikel sebelumnya, kami bergantung pada fakta bahawa sijil pelayan dan klien akan dikeluarkan menggunakan Microsoft CA. Tetapi memandangkan kami menyediakan segala-galanya dalam Linux, kami juga akan memberitahu anda tentang cara alternatif untuk mengeluarkan sijil ini - tanpa meninggalkan Linux.
Kami akan menggunakan XCA sebagai CA (https://hohnstaedt.de/xca/), yang tersedia pada mana-mana pengedaran Linux moden. Semua tindakan yang akan kami lakukan dalam XCA boleh dilakukan dalam mod baris arahan menggunakan utiliti alat OpenSSL dan pkcs11, tetapi untuk kesederhanaan dan kejelasan yang lebih besar, kami tidak akan membentangkannya dalam artikel ini.

Bermula

  1. Pasang:
    $ apt-get install xca
  2. Dan kami menjalankan:
    $ xca
  3. Kami mencipta pangkalan data kami untuk CA - /root/CA.xdb
    Kami mengesyorkan agar anda menyimpan pangkalan data Pihak Berkuasa Sijil dalam folder di mana hanya pentadbir mempunyai akses. Ini penting untuk melindungi kunci peribadi sijil akar, yang digunakan untuk menandatangani semua sijil lain.

Buat kunci dan sijil CA akar

Infrastruktur kunci awam (PKI) adalah berdasarkan sistem hierarki. Perkara utama dalam sistem ini ialah pihak berkuasa pensijilan akar atau akar CA. Sijilnya mesti dibuat terlebih dahulu.

  1. Kami mencipta kunci peribadi RSA-2048 untuk CA. Untuk melakukan ini, pada tab Kunci Peribadi menolak Kunci Baharu dan pilih jenis yang sesuai.
  2. Tetapkan nama untuk pasangan kunci baharu. Saya memanggilnya CA Key.
  3. Kami mengeluarkan sijil CA itu sendiri, menggunakan pasangan kunci yang dibuat. Untuk melakukan ini, pergi ke tab sijil dan klik Sijil Baru.
  4. Pastikan anda memilih SHA-256, kerana menggunakan SHA-1 tidak lagi boleh dianggap selamat.
  5. Pastikan anda memilih sebagai templat [lalai] CA. Jangan lupa klik pada Guna semua, jika tidak, templat tidak digunakan.
  6. Di tab Tajuk pilih pasangan kunci kami. Di sana anda boleh mengisi semua medan utama sijil.

Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

Mencipta kunci dan sijil pelayan https

  1. Dengan cara yang sama, kami mencipta kunci peribadi RSA-2048 untuk pelayan, saya memanggilnya Kunci Pelayan.
  2. Apabila membuat sijil, kami memilih bahawa sijil pelayan mesti ditandatangani dengan sijil CA.
  3. Jangan lupa pilih SHA-256.
  4. Kami pilih sebagai templat [lalai] HTTPS_server. Klik pada Guna semua.
  5. Kemudian pada tab Tajuk pilih kunci kami dan isikan medan yang diperlukan.

Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

Buat kunci dan sijil untuk pengguna

  1. Kunci peribadi pengguna akan disimpan pada token kami. Untuk mengendalikannya, anda perlu memasang perpustakaan PKCS#11 daripada tapak web kami. Untuk pengedaran popular, kami mengedarkan pakej siap sedia, yang terdapat di sini - https://www.rutoken.ru/support/download/pkcs/. Kami juga mempunyai pemasangan untuk arm64, armv7el, armv7hf, e2k, mipso32el, yang boleh dimuat turun dari SDK kami - https://www.rutoken.ru/developers/sdk/. Selain pemasangan untuk Linux, terdapat juga pemasangan untuk macOS, freebsd dan android.
  2. Menambah Penyedia PKCS#11 baharu pada XCA. Untuk melakukan ini, pergi ke menu Pilihan ke tab Pembekal PKCS#11.
  3. Kami tekan Tambah dan pilih laluan ke pustaka PKCS#11. Dalam kes saya ia adalah usrliblibrtpkcs11ecp.so.
  4. Kami memerlukan token Rutoken EDS PKI yang diformatkan. Muat turun utiliti rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Kami laksanakan
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>
  6. Kami memilih kunci RSA-2048 untuk Rutoken EDS PKI sebagai jenis kunci. Saya memanggil kunci Klien Kunci ini.

    Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

  7. Masukkan kod PIN. Dan kami menunggu penjanaan pasangan kunci perkakasan selesai

    Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

  8. Kami mencipta sijil untuk pengguna dengan analogi dengan sijil pelayan. Kali ini kami memilih templat [lalai] HTTPS_client dan jangan lupa klik Guna semua.
  9. Di tab Tajuk masukkan maklumat tentang pengguna. Kami menjawab secara afirmatif permintaan untuk menyimpan sijil untuk token.

Akibatnya, pada tab Sijil dalam XCA anda sepatutnya mendapat sesuatu seperti ini.

Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux
Set kunci dan sijil minimum ini cukup untuk mula menyediakan pelayan itu sendiri.

Untuk mengkonfigurasi, kita perlu mengeksport sijil CA, sijil pelayan dan kunci peribadi pelayan.

Untuk melakukan ini, pilih entri yang dikehendaki pada tab yang sepadan dalam XCA dan klik Eksport.

Nginx

Saya tidak akan menulis cara memasang dan menjalankan pelayan nginx - terdapat cukup artikel mengenai topik ini di Internet, apatah lagi dokumentasi rasmi. Mari kita terus ke menyediakan HTTPS dan pengesahan dua faktor menggunakan token.

Tambahkan baris berikut pada bahagian pelayan dalam 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;
}

Penerangan terperinci tentang semua parameter yang berkaitan dengan mengkonfigurasi ssl dalam nginx boleh didapati di sini - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Saya hanya akan menerangkan secara ringkas perkara yang saya tanya sendiri:

  • ssl_verify_client - menyatakan bahawa rantaian amanah untuk sijil perlu disahkan.
  • ssl_verify_depth - Mentakrifkan kedalaman carian untuk sijil akar yang dipercayai dalam rantaian. Memandangkan sijil pelanggan kami ditandatangani serta-merta pada sijil akar, kedalaman ditetapkan kepada 1. Jika sijil pengguna ditandatangani pada CA perantaraan, maka 2 mesti dinyatakan dalam parameter ini, dan seterusnya.
  • ssl_client_certificate - menentukan laluan ke sijil akar yang dipercayai, yang digunakan semasa menyemak kepercayaan dalam sijil pengguna.
  • ssl_certificate/ssl_certificate_key - tunjukkan laluan ke sijil pelayan/kunci peribadi.

Jangan lupa jalankan nginx -t untuk memastikan tiada kesilapan menaip dalam konfigurasi, dan semua fail berada di tempat yang betul, dan seterusnya.

Dan itu sahaja! Seperti yang anda lihat, persediaannya sangat mudah.

Menyemak ia berfungsi dalam Firefox

Memandangkan kami melakukan segala-galanya sepenuhnya di Linux, kami akan menganggap bahawa pengguna kami juga bekerja di Linux (jika mereka mempunyai Windows, maka lihat arahan untuk menyediakan penyemak imbas dalam artikel sebelumnya.

  1. Mari lancarkan Firefox.
  2. Mari cuba log masuk tanpa token terlebih dahulu. Kami mendapat gambar ini:

    Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

  3. Mari pergi ke mengenai: pilihan # privasi, dan kita pergi ke Peranti Keselamatan…
  4. Kami tekan Muatkanuntuk menambah Pemacu Peranti PKCS#11 baharu dan tentukan laluan ke librtpkcs11ecp.so kami.
  5. Untuk memastikan sijil kelihatan, anda boleh pergi ke Pengurus Sijil. Anda akan digesa untuk memasukkan PIN anda. Selepas input yang betul, anda boleh menyemak perkara yang terdapat pada tab Sijil anda sijil kami dari token muncul.
  6. Sekarang mari kita pergi dengan token. Firefox menggesa anda untuk memilih sijil yang akan dipilih untuk pelayan. Pilih sijil kami.

    Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

  7. KEUNTUNGAN!

    Pengesahan dua faktor di tapak menggunakan token USB. Kini juga untuk Linux

Persediaan dilakukan sekali, dan seperti yang anda lihat dalam tetingkap permintaan sijil, kami boleh menyimpan pilihan kami. Selepas ini, setiap kali kami log masuk ke portal, kami hanya perlu memasukkan token dan memasukkan kod PIN pengguna yang ditentukan semasa pemformatan. Selepas pengesahan sedemikian, pelayan sudah mengetahui pengguna mana yang telah log masuk dan anda tidak lagi boleh membuat sebarang tetingkap tambahan untuk pengesahan, tetapi segera membenarkan pengguna masuk ke akaun peribadinya.

Apache

Sama seperti nginx, tiada siapa yang sepatutnya menghadapi masalah memasang apache. Jika anda tidak tahu cara memasang pelayan web ini, gunakan sahaja dokumentasi rasmi.

Dan kami mula menyediakan HTTPS kami dan pengesahan dua faktor:

  1. Mula-mula anda perlu mengaktifkan mod_ssl:
    $ a2enmod ssl
  2. Dan kemudian dayakan tetapan HTTPS lalai tapak:
    $ a2ensite default-ssl
  3. Sekarang kita mengedit fail 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-nama parameter praktikal bertepatan dengan nama-nama parameter dalam nginx, jadi saya tidak akan menerangkannya. Sekali lagi, sesiapa yang berminat dengan butiran dialu-alukan ke dokumentasi.
    Sekarang kami memulakan semula pelayan kami:

    $ service apache2 reload
    $ service apache2 restart

  4. Seperti yang anda lihat, menyediakan pengesahan dua faktor pada mana-mana pelayan web, sama ada dalam Windows atau Linux, memerlukan masa maksimum satu jam. Dan menyediakan penyemak imbas mengambil masa kira-kira 5 minit. Ramai orang berpendapat bahawa menyediakan dan bekerja dengan pengesahan dua faktor adalah sukar dan tidak jelas. Saya harap artikel kami menafikan mitos ini, sekurang-kurangnya sedikit.

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Adakah anda memerlukan arahan untuk menyediakan TLS dengan sijil mengikut GOST 34.10-2012:

  • Ya, TLS-GOST sangat diperlukan

  • Tidak, penalaan dengan algoritma GOST tidak menarik

44 pengguna telah mengundi. 9 pengguna berpantang.

Sumber: www.habr.com

Tambah komen