Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux
Π’ isa sa aming mga nakaraang artikulo napag-usapan namin ang kahalagahan ng two-factor authentication sa mga corporate portal ng mga kumpanya. Huling beses naming ipinakita kung paano mag-set up ng secure na pagpapatotoo sa IIS web server.

Sa mga komento, hiniling sa amin na magsulat ng mga tagubilin para sa pinakakaraniwang mga web server para sa Linux - nginx at Apache.

Nagtanong ka - nagsulat kami.

Ano ang kailangan mo para makapagsimula?

  • Anumang modernong pamamahagi ng Linux. Gumawa ako ng test setup sa MX Linux 18.2_x64. Siyempre, hindi ito isang pamamahagi ng server, ngunit malamang na walang anumang mga pagkakaiba para sa Debian. Para sa iba pang mga distribusyon, ang mga path sa mga config library ay maaaring bahagyang naiiba.
  • Token. Patuloy naming ginagamit ang modelo Rutoken EDS PKI, na perpekto sa mga tuntunin ng mga katangian ng bilis para sa corporate na paggamit.
  • Upang gumana sa isang token sa Linux, kailangan mong i-install ang mga sumusunod na pakete:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

Pagbibigay ng mga sertipiko

Sa mga nakaraang artikulo, umasa kami sa katotohanan na ang mga sertipiko ng server at kliyente ay ibibigay gamit ang Microsoft CA. Ngunit dahil sine-set up namin ang lahat sa Linux, sasabihin din namin sa iyo ang tungkol sa isang alternatibong paraan upang maibigay ang mga certificate na ito - nang hindi umaalis sa Linux.
Gagamitin namin ang XCA bilang CA (https://hohnstaedt.de/xca/), na magagamit sa anumang modernong pamamahagi ng Linux. Ang lahat ng mga aksyon na aming gagawin sa XCA ay maaaring gawin sa command line mode gamit ang OpenSSL at pkcs11-tool utility, ngunit para sa higit na pagiging simple at kalinawan, hindi namin ipapakita ang mga ito sa artikulong ito.

Pagsisimula

  1. I-install:
    $ apt-get install xca
  2. At tumakbo kami:
    $ xca
  3. Lumilikha kami ng aming database para sa CA - /root/CA.xdb
    Inirerekomenda namin ang pag-imbak ng database ng Certificate Authority sa isang folder kung saan ang administrator lang ang may access. Mahalaga ito upang maprotektahan ang mga pribadong key ng mga root certificate, na ginagamit para lagdaan ang lahat ng iba pang certificate.

Gumawa ng mga key at root CA certificate

Nakabatay ang isang public key infrastructure (PKI) sa isang hierarchical system. Ang pangunahing bagay sa sistemang ito ay ang root certification authority o root CA. Kailangang malikha muna ang sertipiko nito.

  1. Gumagawa kami ng RSA-2048 private key para sa CA. Upang gawin ito, sa tab Mga Pribadong Susi itulak Bagong susi at piliin ang naaangkop na uri.
  2. Magtakda ng pangalan para sa bagong key pair. Tinawag ko itong CA Key.
  3. Nag-isyu kami ng CA certificate mismo, gamit ang ginawang key pair. Upang gawin ito, pumunta sa tab Certificates at i-click Bagong Sertipiko.
  4. Tiyaking pumili SHA-256, dahil ang paggamit ng SHA-1 ay hindi na maituturing na ligtas.
  5. Tiyaking pumili bilang isang template [default]CA. Huwag kalimutang mag-click sa Ilapat ang lahat, kung hindi ay hindi inilapat ang template.
  6. Sa tab paksa piliin ang aming key pair. Doon maaari mong punan ang lahat ng mga pangunahing patlang ng sertipiko.

Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

Paglikha ng mga susi at isang sertipiko ng https server

  1. Sa katulad na paraan, gumawa kami ng RSA-2048 private key para sa server, tinawag ko itong Server Key.
  2. Kapag lumilikha ng isang sertipiko, pinili namin na ang sertipiko ng server ay dapat na nilagdaan ng isang sertipiko ng CA.
  3. Huwag kalimutang pumili SHA-256.
  4. Pinipili namin bilang isang template [default] HTTPS_server. Mag-click sa Ilapat ang lahat.
  5. Pagkatapos ay sa tab paksa piliin ang aming susi at punan ang mga kinakailangang field.

Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

Lumikha ng mga susi at sertipiko para sa user

  1. Ang pribadong key ng user ay maiimbak sa aming token. Upang magawa ito, kailangan mong i-install ang library ng PKCS#11 mula sa aming website. Para sa mga sikat na pamamahagi, namamahagi kami ng mga handa na pakete, na matatagpuan dito - https://www.rutoken.ru/support/download/pkcs/. Mayroon din kaming mga assemblies para sa arm64, armv7el, armv7hf, e2k, mipso32el, na maaaring i-download mula sa aming SDK - https://www.rutoken.ru/developers/sdk/. Bilang karagdagan sa mga assemblies para sa Linux, mayroon ding mga assemblies para sa macOS, freebsd at android.
  2. Magdagdag ng bagong PKCS#11 Provider sa XCA. Upang gawin ito, pumunta sa menu Options sa tab Provider ng PKCS#11.
  3. Pinindot namin Idagdag at piliin ang landas patungo sa PKCS#11 library. Sa aking kaso ito ay usrliblibrtpkcs11ecp.so.
  4. Kakailanganin namin ang isang naka-format na Rutoken EDS PKI token. I-download ang rtAdmin utility - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Isinasagawa namin
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>
  6. Pinipili namin ang RSA-2048 key para sa Rutoken EDS PKI bilang uri ng key. Tinawag ko itong key na Client Key.

    Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

  7. Ilagay ang PIN code. At hinihintay namin ang pagkumpleto ng pagbuo ng hardware ng key pair

    Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

  8. Lumilikha kami ng isang sertipiko para sa gumagamit sa pamamagitan ng pagkakatulad sa sertipiko ng server. Sa pagkakataong ito pumili kami ng template [default] HTTPS_client at huwag kalimutang i-click Ilapat ang lahat.
  9. Sa tab paksa magpasok ng impormasyon tungkol sa gumagamit. Sumasagot kami ng sang-ayon sa kahilingang i-save ang certificate para sa token.

Bilang resulta, sa tab Mga Certificate sa XCA dapat kang makakuha ng ganito.

Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux
Ang pinakamababang hanay ng mga key at certificate na ito ay sapat na upang simulan ang pag-set up ng mga server mismo.

Upang i-configure, kailangan naming i-export ang CA certificate, server certificate at server private key.

Upang gawin ito, piliin ang nais na entry sa kaukulang tab sa XCA at i-click I-export.

Nginx

Hindi ako magsusulat kung paano mag-install at magpatakbo ng isang nginx server - may sapat na mga artikulo sa paksang ito sa Internet, hindi banggitin ang opisyal na dokumentasyon. Diretso tayo sa pagse-set up ng HTTPS at two-factor authentication gamit ang isang token.

Idagdag ang mga sumusunod na linya sa seksyon ng server sa 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;
}

Ang isang detalyadong paglalarawan ng lahat ng mga parameter na nauugnay sa pag-configure ng ssl sa nginx ay matatagpuan dito - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Sa madaling sabi ay ilalarawan ko ang mga itinanong ko sa aking sarili:

  • ssl_verify_client - tumutukoy na ang chain of trust para sa certificate ay kailangang ma-verify.
  • ssl_verify_depth - Tinutukoy ang lalim ng paghahanap para sa pinagkakatiwalaang root certificate sa chain. Dahil ang aming client certificate ay agad na nilagdaan sa root certificate, ang lalim ay nakatakda sa 1. Kung ang user certificate ay nilagdaan sa isang intermediate CA, 2 ay dapat na tukuyin sa parameter na ito, at iba pa.
  • ssl_client_certificate - tumutukoy sa landas patungo sa pinagkakatiwalaang root certificate, na ginagamit kapag sinusuri ang tiwala sa certificate ng user.
  • ssl_certificate/ssl_certificate_key - ipahiwatig ang landas patungo sa sertipiko ng server/pribadong key.

Huwag kalimutang patakbuhin ang nginx -t upang suriin na walang mga typo sa config, at ang lahat ng mga file ay nasa tamang lugar, at iba pa.

At iyon lang! Tulad ng nakikita mo, ang pag-setup ay napaka-simple.

Sinusuri kung gumagana ito sa Firefox

Dahil ganap naming ginagawa ang lahat sa Linux, ipagpalagay namin na gumagana din ang aming mga user sa Linux (kung mayroon silang Windows, kung gayon tingnan ang mga tagubilin para sa pag-set up ng mga browser sa nakaraang artikulo.

  1. Ilunsad natin ang Firefox.
  2. Subukan muna nating mag-log in nang walang token. Nakuha namin ang larawang ito:

    Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

  3. Pumunta tayo sa tungkol sa: kagustuhan # privacy, at pumunta kami sa Mga Security Device…
  4. Pinindot namin Loadupang magdagdag ng bagong PKCS#11 Device Driver at tukuyin ang path sa aming librtpkcs11ecp.so.
  5. Upang tingnan kung nakikita ang certificate, maaari kang pumunta sa Tagapamahala ng Sertipiko. Ipo-prompt kang ipasok ang iyong PIN. Pagkatapos ng tamang input, maaari mong tingnan kung ano ang nasa tab Iyong mga Sertipiko lumabas ang aming certificate mula sa token.
  6. Ngayon pumunta tayo sa token. Sinenyasan ka ng Firefox na pumili ng isang sertipiko na pipiliin para sa server. Piliin ang aming sertipiko.

    Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

  7. KITA!

    Dalawang-factor na pagpapatotoo sa site gamit ang isang USB token. Ngayon din para sa Linux

Ang setup ay tapos na nang isang beses, at gaya ng makikita mo sa window ng paghiling ng certificate, maaari naming i-save ang aming napili. Pagkatapos nito, sa bawat oras na mag-log in kami sa portal, kakailanganin lang naming magpasok ng isang token at ilagay ang user PIN code na tinukoy sa pag-format. Pagkatapos ng naturang pagpapatunay, alam na ng server kung aling user ang naka-log in at hindi ka na makakagawa ng anumang karagdagang mga window para sa pag-verify, ngunit agad na ipasok ang user sa kanyang personal na account.

Apache

Tulad ng sa nginx, walang sinuman ang dapat magkaroon ng anumang mga problema sa pag-install ng apache. Kung hindi mo alam kung paano i-install ang web server na ito, gamitin lamang ang opisyal na dokumentasyon.

At sinimulan naming i-set up ang aming HTTPS at two-factor authentication:

  1. Una kailangan mong i-activate ang mod_ssl:
    $ a2enmod ssl
  2. At pagkatapos ay paganahin ang default na mga setting ng HTTPS ng site:
    $ a2ensite default-ssl
  3. Ngayon i-edit namin ang configuration file: /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

    Tulad ng nakikita mo, ang mga pangalan ng mga parameter ay halos nag-tutugma sa mga pangalan ng mga parameter sa nginx, kaya hindi ko ipapaliwanag ang mga ito. Muli, sinumang interesado sa mga detalye ay malugod na tinatanggap sa dokumentasyon.
    Ngayon ay i-restart namin ang aming server:

    $ service apache2 reload
    $ service apache2 restart

  4. Gaya ng nakikita mo, ang pagse-set up ng two-factor authentication sa anumang web server, sa Windows man o Linux, ay tumatagal ng isang oras na maximum. At ang pagse-set up ng mga browser ay tumatagal ng humigit-kumulang 5 minuto. Maraming tao ang nag-iisip na ang pagse-set up at pagtatrabaho sa two-factor authentication ay mahirap at hindi malinaw. Umaasa ako na i-debunks ng aming artikulo ang alamat na ito, kahit kaunti.

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Kailangan mo ba ng mga tagubilin para sa pag-set up ng TLS na may mga sertipiko ayon sa GOST 34.10-2012:

  • Oo, ang TLS-GOST ay lubhang kailangan

  • Hindi, ang pag-tune sa mga algorithm ng GOST ay hindi kawili-wili

44 na user ang bumoto. 9 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento