Dalam
salah satu artikel kami sebelumnya, kami berbicara tentang pentingnya otentikasi dua faktor di portal perusahaan perusahaan. Terakhir kali, kami mendemonstrasikan cara mengkonfigurasi otentikasi aman di server web IIS.
Dalam komentar, kami diminta untuk menulis instruksi untuk server web yang paling umum untuk Linux - nginx dan Apache.
Anda bertanya - kami menulis.
Apa yang Anda butuhkan untuk memulai?
- Setiap distribusi Linux modern. Saya melakukan pengaturan pengujian pada MX Linux 18.2_x64. Ini jelas bukan distribusi server, tetapi hampir tidak ada perbedaan untuk Debian. Untuk distribusi lain, jalur ke perpustakaan / konfigurasi mungkin sedikit berbeda.
- Token. Kami terus menggunakan model PKI Rutoken EDS , yang ideal untuk kinerja kecepatan tinggi untuk aplikasi perusahaan.
- Untuk bekerja dengan token di Linux, Anda perlu menginstal paket berikut:
libccid libpcsclite1 pcscd pcsc-tools opensc
Penulisan sertifikat
Pada artikel sebelumnya, kami mengandalkan fakta bahwa sertifikat server dan klien akan dikeluarkan menggunakan Microsoft CA. Tetapi karena kita mengkonfigurasi semuanya di Linux, pada saat yang sama kita akan berbicara tentang cara alternatif untuk mengeluarkan sertifikat ini - tanpa meninggalkan Linux.
Kami akan menggunakan XCA sebagai CA (
https://hohnstaedt.de/xca/ ), yang tersedia di setiap distribusi Linux modern. Semua tindakan yang akan kami lakukan dalam XCA juga dapat dilakukan dalam mode baris perintah menggunakan utilitas alat OpenSSL dan pkcs11, tetapi demi kesederhanaan dan kejelasan, kami tidak akan memberikannya dalam artikel ini.
Memulai
- Pasang:
$ apt-get install xca
- Dan jalankan:
$ xca
- Kami membuat basis data kami untuk CA - /root/CA.xdb
Kami menyarankan Anda menyimpan database Otoritas Sertifikat dalam folder di mana hanya administrator yang memiliki akses. Ini penting untuk melindungi kunci pribadi dari sertifikat root, yang digunakan untuk menandatangani semua sertifikat lainnya.
Buat kunci dan root sertifikat CA
Infrastruktur kunci publik (PKI) didasarkan pada sistem hierarkis. Pusat dari sistem ini adalah otoritas sertifikasi root atau root CA. Sertifikatnya harus dibuat terlebih dahulu.
- Kami membuat kunci pribadi RSA-2048 untuk CA. Untuk melakukan ini, pada tab Kunci Pribadi , klik Kunci Baru dan pilih jenis yang sesuai.
- Tetapkan nama untuk pasangan kunci baru. Saya menyebutnya - CA Key.
- Kami menulis sertifikat CA sendiri, menggunakan pasangan kunci yang dibuat. Untuk melakukan ini, buka tab Sertifikat dan klik Sertifikat Baru .
- Pastikan untuk memilih SHA-256 , karena menggunakan SHA-1 tidak lagi dapat dianggap aman.
- Sebagai templat, pastikan untuk memilih CA [default]. Jangan lupa klik Apply all , kalau tidak templat tidak berlaku.
- Pada tab Subjek , pilih pasangan kunci kami. Di sana Anda dapat mengisi semua bidang utama sertifikat.
Buat kunci dan https sertifikat server
- Demikian pula, kami membuat kunci pribadi RSA-2048 untuk server, saya menyebutnya - Server Key.
- Saat membuat sertifikat, kami memilih bahwa sertifikat server harus ditandatangani pada sertifikat CA.
- Jangan lupa untuk memilih SHA-256 .
- Sebagai templat, pilih [default] HTTPS_server . Klik Terapkan semua .
- Kemudian, pada tab Subjek , pilih kunci kami dan isi bidang yang diperlukan.

Kami membuat kunci dan sertifikat untuk pengguna
- Kunci pribadi pengguna akan disimpan di token kami. Untuk mengatasinya, Anda perlu menginstal pustaka PKCS # 11 dari situs kami. Untuk distribusi populer, kami mendistribusikan paket siap pakai yang ada di sini - https://www.rutoken.ru/support/download/pkcs/ . Kami juga memiliki build untuk arm64, armv7el, armv7hf, e2k, mipso32el, yang dapat diambil di SDK kami - https://www.rutoken.ru/developers/sdk/ . Selain rakitan untuk linux, ada juga rakitan untuk macOS, freebsd dan android.
- Tambahkan Penyedia PKCS # 11 baru ke XCA. Untuk melakukan ini, buka menu Opsi pada tab Penyedia PKCS # 11 .
- Klik Tambah dan pilih jalur ke perpustakaan PKCS # 11. Dalam kasus saya ini adalah \ usr \ lib \ librtpkcs11ecp.so.
- Kita membutuhkan token yang diformat Rutoken EDS PKI. Unduh utilitas rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
- Kami melakukan
$ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN- >
- Sebagai jenis kunci yang kami pilih - kunci RSA-2048 pada PKI Rutoken EDS. Saya menamai kunci ini Kunci Klien.
- Masukkan kode PIN. Dan kami sedang menunggu selesainya pembuatan perangkat keras dari pasangan kunci
- Kami membuat sertifikat untuk pengguna dengan analogi dengan sertifikat server. Kali ini pilih template [default] HTTPS_client dan jangan lupa klik Terapkan semua .
- Pada tab Subjek , masukkan informasi pengguna. Kami menjawab secara afirmatif pada permintaan untuk menyimpan sertifikat untuk token tersebut.
Akibatnya, pada tab
Sertifikat di XCA, Anda harus mendapatkan sesuatu seperti ini.
Set kunci dan sertifikat minimum ini sudah cukup untuk mulai mengatur server secara langsung.
Untuk mengkonfigurasi, kita perlu mengekspor sertifikat CA, sertifikat server dan kunci privat server.
Untuk melakukan ini, pilih entri yang diinginkan pada tab yang sesuai di XCA dan klik
Ekspor .
Nginx
Cara menginstal dan menjalankan server nginx, saya tidak akan menulis - ada cukup artikel di Internet tentang hal ini, belum lagi dokumentasi resmi. Mari kita mulai menyiapkan HTTPS dan otentikasi token dua faktor.
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 terperinci dari 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_certificateSaya hanya akan menjelaskan secara singkat pertanyaan yang saya sendiri tanyakan:
- ssl_verify_client - Menunjukkan bahwa rantai kepercayaan sertifikat perlu diverifikasi.
- ssl_verify_depth - Menentukan kedalaman pencarian sertifikat akar tepercaya dalam rantai. Karena sertifikat klien kami segera ditandatangani pada sertifikat root, kedalamannya diatur 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 root tepercaya, yang digunakan untuk memverifikasi kepercayaan pada sertifikat pengguna.
- ssl_certificate / ssl_certificate_key - menunjukkan jalur ke sertifikat server / kunci pribadi.
Jangan lupa untuk menjalankan nginx -t untuk memeriksa bahwa tidak ada kesalahan ketik dalam konfigurasi, dan bahwa semua file diperlukan dan seterusnya.
Dan sebenarnya semuanya! Seperti yang Anda lihat, pengaturannya sangat sederhana.
Memeriksa pekerjaan di Firefox
Karena kami melakukan semuanya sepenuhnya di Linux, kami akan menganggap bahwa pengguna kami juga bekerja di Linux (jika mereka memiliki Windows, kemudian
lihat instruksi untuk mengatur browser di artikel sebelumnya .
- Kami memulai Firefox.
- Ayo coba masuk tanpa token di awal. Kami mendapatkan gambar berikut:
- Buka tentang: preferensi # privasi , dan buka Perangkat Keamanan ...
- Klik Load untuk menambahkan Driver Perangkat PKCS # 11 yang baru dan tentukan path ke librtpkcs11ecp.so kami.
- Untuk memverifikasi bahwa sertifikat terlihat, Anda dapat pergi ke Manajer Sertifikat . Anda diminta kode PIN. Setelah entri yang benar, Anda dapat memverifikasi bahwa pada tab Sertifikat Anda sertifikat kami dengan token telah muncul.
- Sekarang kita pergi dengan token. Firefox menyarankan untuk memilih sertifikat yang akan dipilih di server. Pilih sertifikat kami.
- KEUNTUNGAN!
Pengaturan dilakukan sekali, dan seperti yang Anda lihat di jendela permintaan sertifikat, kami dapat menyimpan pilihan kami. Setelah itu, setiap kali Anda memasuki portal, kita hanya perlu menyisipkan token dan memasukkan kode PIN pengguna yang ditetapkan saat memformat. Setelah otentikasi seperti itu, server sudah tahu pengguna mana yang telah masuk ke dalamnya dan Anda tidak dapat lagi membuat jendela tambahan untuk verifikasi, tetapi segera membiarkan pengguna ke akun pribadinya.
Apache
Seperti halnya nginx, tidak ada yang harus memiliki masalah menginstal apache. Jika Anda tidak tahu cara memasang server web ini, cukup gunakan dokumentasi resmi.
Dan kami mulai mengonfigurasi HTTPS dan otentikasi dua faktor kami:
- Pertama, Anda perlu mengaktifkan mod_ssl:
$ a2enmod ssl
- Dan kemudian aktifkan pengaturan situs HTTPS default:
$ a2ensite default-ssl
- Sekarang 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-nama parameter hampir bersamaan dengan nama-nama parameter di nginx, jadi saya tidak akan menjelaskannya. Sekali lagi, siapa pun yang tertarik dengan detailnya - selamat datang di dokumentasi.
Sekarang restart server kami:
$ service apache2 reload $ service apache2 restart
Seperti yang dapat Anda lihat, konfigurasikan otentikasi dua faktor di server web mana pun, di Windows, di Linux yang dibutuhkan maksimal satu jam. Dan pengaturan browser membutuhkan waktu sekitar 5 menit. Banyak orang berpikir bahwa pengaturan dan kerja dengan otentikasi dua faktor sulit dan tidak bisa dipahami. Saya harap artikel kami setidaknya sedikit, tetapi menyanggah mitos ini.