การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย
В หนึ่งในบทความก่อนหน้าของเรา เราได้พูดคุยเกี่ยวกับความสำคัญของการรับรองความถูกต้องด้วยสองปัจจัยบนพอร์ทัลองค์กรของบริษัทต่างๆ ครั้งล่าสุดที่เราสาธิตวิธีตั้งค่าการรับรองความถูกต้องที่ปลอดภัยบนเว็บเซิร์ฟเวอร์ IIS

ในความคิดเห็น เราถูกขอให้เขียนคำแนะนำสำหรับเว็บเซิร์ฟเวอร์ทั่วไปสำหรับ Linux - nginx และ Apache

คุณถาม - เราเขียน

คุณต้องเริ่มต้นอะไรบ้าง?

  • การกระจาย Linux สมัยใหม่ ฉันได้ทำการทดสอบการตั้งค่าบน MX Linux 18.2_x64 แน่นอนว่านี่ไม่ใช่การแจกจ่ายเซิร์ฟเวอร์ แต่ Debian ไม่น่าจะมีความแตกต่างใดๆ สำหรับการแจกแจงแบบอื่น เส้นทางไปยังไลบรารีการกำหนดค่าอาจแตกต่างกันเล็กน้อย
  • โทเค็น เรายังใช้โมเดลนี้ต่อไป รูโทเคน EDS PKIซึ่งเหมาะอย่างยิ่งในแง่ของลักษณะความเร็วสำหรับการใช้งานในองค์กร
  • หากต้องการทำงานกับโทเค็นใน Linux คุณต้องติดตั้งแพ็คเกจต่อไปนี้:
    libccid libpcsclite1 pcscd pcsc-เครื่องมือ opensc

การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

การออกใบรับรอง

ในบทความก่อนหน้านี้ เราอาศัยความจริงที่ว่าใบรับรองเซิร์ฟเวอร์และไคลเอ็นต์จะออกโดยใช้ Microsoft CA แต่เนื่องจากเรากำลังตั้งค่าทุกอย่างใน Linux เราจะแจ้งให้คุณทราบเกี่ยวกับทางเลือกอื่นในการออกใบรับรองเหล่านี้ - โดยไม่ต้องออกจาก Linux
เราจะใช้ XCA เป็น CA (https://hohnstaedt.de/xca/) ซึ่งมีอยู่ในการแจกจ่าย Linux สมัยใหม่ การดำเนินการทั้งหมดที่เราจะดำเนินการใน XCA สามารถทำได้ในโหมดบรรทัดคำสั่งโดยใช้ยูทิลิตี้ OpenSSL และ pkcs11-tool แต่เพื่อความเรียบง่ายและชัดเจนยิ่งขึ้น เราจะไม่นำเสนอในบทความนี้

เริ่มต้นใช้งาน

  1. ติดตั้ง:
    $ apt-get install xca
  2. และเราก็วิ่ง:
    $ xca
  3. เราสร้างฐานข้อมูลของเราสำหรับ CA - /root/CA.xdb
    เราขอแนะนำให้จัดเก็บฐานข้อมูลผู้ออกใบรับรองในโฟลเดอร์ที่ผู้ดูแลระบบเท่านั้นที่สามารถเข้าถึงได้ นี่เป็นสิ่งสำคัญในการปกป้องคีย์ส่วนตัวของใบรับรองหลัก ซึ่งใช้ในการลงนามใบรับรองอื่นๆ ทั้งหมด

สร้างคีย์และใบรับรอง CA รูท

โครงสร้างพื้นฐานคีย์สาธารณะ (PKI) ขึ้นอยู่กับระบบแบบลำดับชั้น สิ่งสำคัญในระบบนี้คือผู้ออกใบรับรองรูทหรือ CA รูท ต้องสร้างใบรับรองก่อน

  1. เราสร้างคีย์ส่วนตัว RSA-2048 สำหรับ CA เมื่อต้องการทำเช่นนี้บนแท็บ คีย์ส่วนตัว นาจิมาเม่ คีย์ใหม่ และเลือกประเภทที่เหมาะสม
  2. ตั้งชื่อคู่คีย์ใหม่ ฉันเรียกมันว่าคีย์ CA
  3. เราออกใบรับรอง CA เองโดยใช้คู่คีย์ที่สร้างขึ้น โดยไปที่แท็บ ใบรับรอง และคลิก ใบรับรองใหม่.
  4. อย่าลืมเลือก SHA-256เนื่องจากการใช้ SHA-1 ไม่ถือว่าปลอดภัยอีกต่อไป
  5. อย่าลืมเลือกเป็นเทมเพลต [ค่าเริ่มต้น] แคลิฟอร์เนีย. อย่าลืมคลิกดูนะครับ สมัครทั้งหมดมิฉะนั้นจะไม่ใช้เทมเพลต
  6. ในแท็บ หัวข้อ เลือกคู่กุญแจของเรา คุณสามารถกรอกข้อมูลในฟิลด์หลักทั้งหมดของใบรับรองได้ที่นั่น

การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

สร้างคีย์และใบรับรองเซิร์ฟเวอร์ https

  1. ในทำนองเดียวกัน เราสร้างคีย์ส่วนตัว RSA-2048 สำหรับเซิร์ฟเวอร์ ฉันเรียกมันว่าคีย์เซิร์ฟเวอร์
  2. เมื่อสร้างใบรับรอง เราเลือกว่าใบรับรองเซิร์ฟเวอร์จะต้องลงนามด้วยใบรับรอง CA
  3. อย่าลืมเลือก SHA-256.
  4. เราเลือกเป็นแม่แบบ [ค่าเริ่มต้น] HTTPS_server. คลิกที่ สมัครทั้งหมด.
  5. จากนั้นบนแท็บ หัวข้อ เลือกรหัสของเราและกรอกข้อมูลในช่องที่จำเป็น

การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

สร้างคีย์และใบรับรองสำหรับผู้ใช้

  1. รหัสส่วนตัวของผู้ใช้จะถูกเก็บไว้ในโทเค็นของเรา หากต้องการใช้งาน คุณต้องติดตั้งไลบรารี PKCS#11 จากเว็บไซต์ของเรา สำหรับการแจกแจงยอดนิยมเราแจกแพ็คเกจสำเร็จรูปซึ่งอยู่ที่นี่ - https://www.rutoken.ru/support/download/pkcs/. นอกจากนี้เรายังมีส่วนประกอบสำหรับ arm64, armv7el, armv7hf, e2k, mipso32el ซึ่งสามารถดาวน์โหลดได้จาก SDK ของเรา - https://www.rutoken.ru/developers/sdk/. นอกจากแอสเซมบลีสำหรับ Linux แล้ว ยังมีแอสเซมบลีสำหรับ macOS, freebsd และ android อีกด้วย
  2. การเพิ่มผู้ให้บริการ PKCS#11 ใหม่ให้กับ XCA โดยไปที่เมนู Options ไปที่แท็บ ผู้ให้บริการ PKCS#11.
  3. เรากด เพิ่ม และเลือกเส้นทางไปยังไลบรารี PKCS#11 ในกรณีของฉันคือ usrliblibrtpkcs11ecp.so
  4. เราจะต้องมีโทเค็น Rutoken EDS PKI ที่จัดรูปแบบแล้ว ดาวน์โหลดยูทิลิตี้ rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. เราดำเนินการ
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. เราเลือกคีย์ RSA-2048 สำหรับ Rutoken EDS PKI เป็นประเภทคีย์ ฉันเรียกคีย์นี้ว่าคีย์ไคลเอ็นต์

    การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

  7. ป้อนรหัส PIN และเรารอให้การสร้างฮาร์ดแวร์ของคู่คีย์เสร็จสิ้น

    การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

  8. เราสร้างใบรับรองสำหรับผู้ใช้โดยการเปรียบเทียบกับใบรับรองเซิร์ฟเวอร์ คราวนี้เราเลือกเทมเพลต [ค่าเริ่มต้น] HTTPS_client และอย่าลืมคลิก สมัครทั้งหมด.
  9. ในแท็บ หัวข้อ ป้อนข้อมูลเกี่ยวกับผู้ใช้ เราตอบเพื่อยืนยันคำขอบันทึกใบรับรองสำหรับโทเค็น

ส่งผลให้บนแท็บ การรับรอง ใน XCA คุณควรได้รับสิ่งนี้

การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย
ชุดคีย์และใบรับรองขั้นต่ำนี้เพียงพอที่จะเริ่มการตั้งค่าเซิร์ฟเวอร์ด้วยตนเอง

ในการกำหนดค่า เราจำเป็นต้องส่งออกใบรับรอง CA ใบรับรองเซิร์ฟเวอร์ และคีย์ส่วนตัวของเซิร์ฟเวอร์

ในการดำเนินการนี้ ให้เลือกรายการที่ต้องการบนแท็บที่เกี่ยวข้องใน XCA แล้วคลิก ส่งออก.

Nginx

ฉันจะไม่เขียนวิธีติดตั้งและใช้งานเซิร์ฟเวอร์ nginx - มีบทความเพียงพอในหัวข้อนี้บนอินเทอร์เน็ตไม่ต้องพูดถึงเอกสารอย่างเป็นทางการ มาเริ่มตั้งค่า HTTPS และการตรวจสอบสิทธิ์แบบสองปัจจัยโดยใช้โทเค็นกันดีกว่า

เพิ่มบรรทัดต่อไปนี้ในส่วนเซิร์ฟเวอร์ใน 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;
}

คำอธิบายโดยละเอียดของพารามิเตอร์ทั้งหมดที่เกี่ยวข้องกับการกำหนดค่า SSL ใน nginx สามารถพบได้ที่นี่ - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

ฉันจะอธิบายสั้น ๆ เกี่ยวกับสิ่งที่ฉันถามตัวเอง:

  • ssl_verify_client - ระบุว่าต้องมีการตรวจสอบห่วงโซ่ความน่าเชื่อถือสำหรับใบรับรอง
  • ssl_verify_deep - กำหนดความลึกในการค้นหาใบรับรองหลักที่เชื่อถือได้ในห่วงโซ่ เนื่องจากใบรับรองไคลเอ็นต์ของเราได้รับการลงนามในใบรับรองหลักทันที ความลึกจึงถูกตั้งค่าเป็น 1 หากใบรับรองผู้ใช้ลงนามใน CA ระดับกลาง จะต้องระบุ 2 ในพารามิเตอร์นี้ และต่อๆ ไป
  • ssl_client_certificate - ระบุเส้นทางไปยังใบรับรองหลักที่เชื่อถือได้ ซึ่งใช้ในการตรวจสอบความน่าเชื่อถือในใบรับรองของผู้ใช้
  • ssl_certificate/ssl_certificate_key - ระบุเส้นทางไปยังใบรับรองเซิร์ฟเวอร์/คีย์ส่วนตัว

อย่าลืมเรียกใช้ nginx -t เพื่อตรวจสอบว่าไม่มีการพิมพ์ผิดในการกำหนดค่า และไฟล์ทั้งหมดอยู่ในตำแหน่งที่ถูกต้อง และอื่นๆ

และนั่นคือทั้งหมด! อย่างที่คุณเห็นการตั้งค่านั้นง่ายมาก

ตรวจสอบว่ามันใช้งานได้ใน Firefox

เนื่องจากเราทำทุกอย่างบน Linux อย่างสมบูรณ์ เราจะถือว่าผู้ใช้ของเราทำงานใน Linux เช่นกัน (หากพวกเขามี Windows ดูคำแนะนำในการตั้งค่าเบราว์เซอร์ในบทความก่อนหน้า.

  1. มาเปิดตัว Firefox กันเถอะ
  2. เรามาลองเข้าสู่ระบบโดยไม่มีโทเค็นกันก่อน เราได้รับภาพนี้:

    การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

  3. เราไปกันต่อ about: preferences # ความเป็นส่วนตัวและเราไปที่ อุปกรณ์รักษาความปลอดภัย…
  4. เรากด โหลดเพื่อเพิ่มไดรเวอร์อุปกรณ์ PKCS#11 ใหม่และระบุเส้นทางไปยัง librtpkcs11ecp.so ของเรา
  5. หากต้องการตรวจสอบว่ามองเห็นใบรับรองได้หรือไม่ ให้ไปที่ ผู้จัดการฝ่ายการรับรอง. คุณจะได้รับแจ้งให้ป้อน PIN ของคุณ หลังจากป้อนข้อมูลที่ถูกต้องแล้ว คุณจะสามารถตรวจสอบสิ่งที่อยู่บนแท็บได้ ใบรับรองของคุณ ใบรับรองของเราจากโทเค็นปรากฏขึ้น
  6. ตอนนี้เรามาดูโทเค็นกันดีกว่า Firefox แจ้งให้คุณเลือกใบรับรองที่จะถูกเลือกสำหรับเซิร์ฟเวอร์ เลือกใบรับรองของเรา

    การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

  7. กำไร!

    การตรวจสอบสิทธิ์แบบสองปัจจัยบนไซต์โดยใช้โทเค็น USB ตอนนี้สำหรับ Linux ด้วย

การตั้งค่าเสร็จสิ้นเพียงครั้งเดียว และดังที่คุณเห็นในหน้าต่างคำขอใบรับรอง เราสามารถบันทึกการเลือกของเราได้ หลังจากนี้ ทุกครั้งที่เราเข้าสู่พอร์ทัล เราจะต้องใส่โทเค็นและป้อนรหัส PIN ของผู้ใช้ที่ระบุไว้ระหว่างการจัดรูปแบบเท่านั้น หลังจากการรับรองความถูกต้องดังกล่าว เซิร์ฟเวอร์จะรู้อยู่แล้วว่าผู้ใช้รายใดเข้าสู่ระบบ และคุณไม่สามารถสร้างหน้าต่างเพิ่มเติมสำหรับการตรวจสอบได้อีกต่อไป แต่จะอนุญาตให้ผู้ใช้เข้าสู่บัญชีส่วนตัวของเขาทันที

อาปาเช่

เช่นเดียวกับ nginx ไม่มีใครควรมีปัญหาในการติดตั้ง apache หากคุณไม่ทราบวิธีการติดตั้งเว็บเซิร์ฟเวอร์นี้ เพียงใช้เอกสารอย่างเป็นทางการ

และเราเริ่มตั้งค่า HTTPS และการตรวจสอบสิทธิ์แบบสองปัจจัย:

  1. ก่อนอื่นคุณต้องเปิดใช้งาน mod_ssl:
    $ a2enmod ssl
  2. จากนั้นเปิดใช้งานการตั้งค่า HTTPS เริ่มต้นของไซต์:
    $ a2ensite default-ssl
  3. ตอนนี้เราแก้ไขไฟล์การกำหนดค่า: /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

    อย่างที่คุณเห็นชื่อของพารามิเตอร์นั้นเกือบจะตรงกับชื่อของพารามิเตอร์ใน nginx ดังนั้นฉันจะไม่อธิบายพวกมัน ขอย้ำอีกครั้งว่าใครก็ตามที่สนใจในรายละเอียดสามารถเข้าสู่เอกสารประกอบได้
    ตอนนี้เรารีสตาร์ทเซิร์ฟเวอร์ของเรา:

    $ service apache2 reload
    $ service apache2 restart

  4. อย่างที่คุณเห็น การตั้งค่าการตรวจสอบสิทธิ์แบบสองปัจจัยบนเว็บเซิร์ฟเวอร์ใดๆ ไม่ว่าจะบน Windows หรือ Linux ใช้เวลาสูงสุดหนึ่งชั่วโมง และการตั้งค่าเบราว์เซอร์ใช้เวลาประมาณ 5 นาที หลายๆ คนคิดว่าการตั้งค่าและการทำงานกับการตรวจสอบสิทธิ์แบบสองปัจจัยเป็นเรื่องยากและไม่ชัดเจน ฉันหวังว่าบทความของเราจะหักล้างตำนานนี้อย่างน้อยก็นิดหน่อย

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

คุณต้องการคำแนะนำในการตั้งค่า TLS ด้วยใบรับรองตาม GOST 34.10-2012 หรือไม่:

  • ใช่ TLS-GOST จำเป็นมาก

  • ไม่ การปรับแต่งด้วยอัลกอริธึม GOST นั้นไม่น่าสนใจ

ผู้ใช้ 44 คนโหวต ผู้ใช้ 9 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น