Prohoster > Blog > quản lý > Xác thực hai yếu tố trên trang web bằng mã thông báo USB. Bây giờ cũng dành cho Linux
Xác thực hai yếu tố trên trang web bằng mã thông báo USB. Bây giờ cũng dành cho Linux
В một trong những bài viết trước của chúng tôi chúng tôi đã nói về tầm quan trọng của xác thực hai yếu tố trên cổng thông tin doanh nghiệp của các công ty. Lần trước chúng tôi đã trình bày cách thiết lập xác thực an toàn trong máy chủ web IIS.
Trong phần nhận xét, chúng tôi được yêu cầu viết hướng dẫn cho các máy chủ web phổ biến nhất dành cho Linux - nginx và Apache.
Bạn đã hỏi - chúng tôi đã viết.
Bạn cần gì để bắt đầu?
Bất kỳ bản phân phối Linux hiện đại nào. Tôi đã thiết lập thử nghiệm trên MX Linux 18.2_x64. Tất nhiên đây không phải là bản phân phối máy chủ, nhưng chắc chắn sẽ không có bất kỳ sự khác biệt nào đối với Debian. Đối với các bản phân phối khác, đường dẫn đến thư viện cấu hình có thể thay đổi một chút.
Mã thông báo. Chúng tôi tiếp tục sử dụng mô hình Rutoken EDS PKI, lý tưởng về đặc tính tốc độ để sử dụng cho doanh nghiệp.
Để làm việc với mã thông báo trong Linux, bạn cần cài đặt các gói sau:
libccid libpcsclite1pcscdpcsc-công cụ opensc
Cấp giấy chứng nhận
Trong các bài viết trước, chúng tôi đã dựa vào thực tế là các chứng chỉ máy chủ và máy khách sẽ được cấp bằng Microsoft CA. Nhưng vì chúng tôi đang thiết lập mọi thứ trong Linux nên chúng tôi cũng sẽ cho bạn biết về một cách khác để cấp các chứng chỉ này - mà không cần rời khỏi Linux.
Chúng tôi sẽ sử dụng XCA làm CA (https://hohnstaedt.de/xca/), có sẵn trên mọi bản phân phối Linux hiện đại. Tất cả các hành động mà chúng tôi sẽ thực hiện trong XCA có thể được thực hiện ở chế độ dòng lệnh bằng cách sử dụng các tiện ích công cụ OpenSSL và pkcs11, nhưng để đơn giản và rõ ràng hơn, chúng tôi sẽ không trình bày chúng trong bài viết này.
Bắt đầu
Cài đặt:
$ apt-get install xca
Và chúng tôi chạy:
$ xca
Chúng tôi tạo cơ sở dữ liệu cho CA - /root/CA.xdb
Chúng tôi khuyên bạn nên lưu trữ cơ sở dữ liệu của Tổ chức phát hành chứng chỉ trong thư mục mà chỉ quản trị viên mới có quyền truy cập. Điều này rất quan trọng để bảo vệ khóa riêng của chứng chỉ gốc, được sử dụng để ký tất cả các chứng chỉ khác.
Tạo khóa và chứng chỉ CA gốc
Cơ sở hạ tầng khóa công khai (PKI) dựa trên hệ thống phân cấp. Điều chính trong hệ thống này là cơ quan chứng nhận gốc hoặc CA gốc. Chứng chỉ của nó phải được tạo trước tiên.
Chúng tôi tạo khóa riêng RSA-2048 cho CA. Để thực hiện việc này, trên tab Khóa riêng xô Mới chính và chọn loại thích hợp.
Đặt tên cho cặp khóa mới. Tôi gọi nó là CA Key.
Chúng tôi tự cấp chứng chỉ CA bằng cách sử dụng cặp khóa đã tạo. Để thực hiện việc này, hãy chuyển đến tab Giấy chứng nhận và đẩy Giấy chứng nhận mới.
Hãy chắc chắn để lựa chọn SHA-256, vì việc sử dụng SHA-1 không còn được coi là an toàn nữa.
Hãy chắc chắn để chọn làm mẫu [mặc định]CA. Đừng quên bấm vào Áp dụng tất cả, nếu không thì mẫu sẽ không được áp dụng.
Trong tab Tiêu Đề chọn cặp khóa của chúng tôi. Ở đó bạn có thể điền vào tất cả các trường chính của chứng chỉ.
Tạo khóa và chứng chỉ máy chủ https
Theo cách tương tự, chúng tôi tạo khóa riêng RSA-2048 cho máy chủ, tôi gọi nó là Khóa máy chủ.
Khi tạo chứng chỉ, chúng tôi chọn chứng chỉ máy chủ phải được ký bằng chứng chỉ CA.
Đừng quên chọn SHA-256.
Chúng tôi chọn làm mẫu [mặc định] HTTPS_server. Bấm vào Áp dụng tất cả.
Sau đó trên tab Tiêu Đề chọn khóa của chúng tôi và điền vào các trường bắt buộc.
Tạo khóa và chứng chỉ cho người dùng
Khóa riêng của người dùng sẽ được lưu trữ trên mã thông báo của chúng tôi. Để làm việc với nó, bạn cần cài đặt thư viện PKCS#11 từ trang web của chúng tôi. Đối với các bản phân phối phổ biến, chúng tôi phân phối các gói làm sẵn, có tại đây - https://www.rutoken.ru/support/download/pkcs/. Chúng tôi cũng có các tập hợp cho arm64, armv7el, armv7hf, e2k, mipso32el, có thể tải xuống từ SDK của chúng tôi - https://www.rutoken.ru/developers/sdk/. Ngoài các tập hợp dành cho Linux, còn có các tập hợp dành cho macOS, freebsd và android.
Thêm Nhà cung cấp PKCS#11 mới vào XCA. Để thực hiện việc này, hãy vào menu Các lựa chọn đến tab Nhà cung cấp PKCS#11.
Chúng tôi nhấn Thêm và chọn đường dẫn đến thư viện PKCS#11. Trong trường hợp của tôi, đó là usrliblibrtpkcs11ecp.so.
Chúng tôi chọn khóa RSA-2048 cho Rutoken EDS PKI làm loại khóa. Tôi gọi khóa này là Khóa khách hàng.
Nhập mã PIN. Và chúng ta chờ đợi quá trình tạo phần cứng của cặp khóa hoàn tất
Chúng tôi tạo chứng chỉ cho người dùng bằng cách tương tự với chứng chỉ máy chủ. Lần này chúng tôi chọn một mẫu [mặc định] HTTPS_client và đừng quên nhấp vào Áp dụng tất cả.
Trong tab Tiêu Đề nhập thông tin về người dùng. Chúng tôi trả lời khẳng định yêu cầu lưu chứng chỉ cho mã thông báo.
Kết quả là, trên tab Giấy chứng nhận trong XCA bạn sẽ nhận được thứ gì đó như thế này.
Bộ khóa và chứng chỉ tối thiểu này đủ để bắt đầu tự thiết lập máy chủ.
Để định cấu hình, chúng ta cần xuất chứng chỉ CA, chứng chỉ máy chủ và khóa riêng của máy chủ.
Để thực hiện việc này, hãy chọn mục nhập mong muốn trên tab tương ứng trong XCA và nhấp vào Xuất khẩu.
Nginx
Tôi sẽ không viết về cách cài đặt và chạy máy chủ nginx - có đủ bài viết về chủ đề này trên Internet, chưa kể tài liệu chính thức. Hãy bắt tay ngay vào việc thiết lập HTTPS và xác thực hai yếu tố bằng mã thông báo.
Thêm các dòng sau vào phần máy chủ trong nginx.conf:
Tôi sẽ chỉ mô tả ngắn gọn những điều mà tôi đã tự hỏi:
ssl_verify_client - chỉ định rằng chuỗi tin cậy cho chứng chỉ cần được xác minh.
ssl_verify_deep - Xác định độ sâu tìm kiếm cho chứng chỉ gốc đáng tin cậy trong chuỗi. Vì chứng chỉ ứng dụng khách của chúng tôi được ký ngay trên chứng chỉ gốc nên độ sâu được đặt thành 1. Nếu chứng chỉ người dùng được ký trên CA trung gian thì 2 phải được chỉ định trong tham số này, v.v.
ssl_client_certificate - chỉ định đường dẫn đến chứng chỉ gốc đáng tin cậy, được sử dụng khi kiểm tra độ tin cậy đối với chứng chỉ của người dùng.
ssl_certificate/ssl_certificate_key - chỉ ra đường dẫn đến chứng chỉ máy chủ/khóa riêng.
Đừng quên chạy nginx -t để kiểm tra xem không có lỗi chính tả nào trong cấu hình và tất cả các tệp đều ở đúng vị trí, v.v.
Và đó là tất cả! Như bạn có thể thấy, việc thiết lập rất đơn giản.
Kiểm tra xem nó có hoạt động trong Firefox không
Vì chúng tôi thực hiện mọi thứ hoàn toàn trong Linux nên chúng tôi sẽ giả định rằng người dùng của chúng tôi cũng làm việc trong Linux (nếu họ có Windows thì xem hướng dẫn thiết lập trình duyệt ở bài viết trước.
Hãy khởi chạy Firefox.
Trước tiên hãy thử đăng nhập mà không cần mã thông báo. Chúng tôi nhận được hình ảnh này:
Chúng ta tiếp tục về: sở thích # riêng tư, và chúng ta đi tới Thiết bị an ninh…
Chúng tôi nhấn Phụ tảiđể thêm Trình điều khiển thiết bị PKCS#11 mới và chỉ định đường dẫn đến librtpkcs11ecp.so của chúng tôi.
Để kiểm tra xem chứng chỉ có hiển thị hay không, bạn có thể truy cập Giấy chứng nhận quản lý. Bạn sẽ được nhắc nhập mã PIN của mình. Sau khi nhập đúng, bạn có thể kiểm tra nội dung trên tab Giấy chứng nhận của bạn chứng chỉ của chúng tôi từ mã thông báo đã xuất hiện.
Bây giờ chúng ta hãy đi với mã thông báo. Firefox nhắc bạn chọn chứng chỉ sẽ được chọn cho máy chủ. Chọn chứng chỉ của chúng tôi.
LỢI NHUẬN!
Quá trình thiết lập được thực hiện một lần và như bạn có thể thấy trong cửa sổ yêu cầu chứng chỉ, chúng tôi có thể lưu lựa chọn của mình. Sau này, mỗi lần đăng nhập vào cổng, chúng tôi sẽ chỉ cần chèn mã thông báo và nhập mã PIN người dùng đã được chỉ định trong quá trình định dạng. Sau khi xác thực như vậy, máy chủ đã biết người dùng nào đã đăng nhập và bạn không thể tạo bất kỳ cửa sổ bổ sung nào để xác minh mà ngay lập tức cho phép người dùng vào tài khoản cá nhân của mình.
Apache
Cũng giống như với nginx, không ai sẽ gặp bất kỳ vấn đề gì khi cài đặt Apache. Nếu bạn không biết cách cài đặt máy chủ web này, chỉ cần sử dụng tài liệu chính thức.
Và chúng tôi bắt đầu thiết lập HTTPS và xác thực hai yếu tố:
Đầu tiên bạn cần kích hoạt mod_ssl:
$ a2enmod ssl
Và sau đó kích hoạt cài đặt HTTPS mặc định của trang web:
$ a2ensite default-ssl
Bây giờ chúng ta chỉnh sửa tệp cấu hình: /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
Như bạn có thể thấy, tên của các tham số thực tế trùng với tên của các tham số trong nginx, vì vậy tôi sẽ không giải thích chúng. Một lần nữa, bất kỳ ai quan tâm đến chi tiết đều có thể xem tài liệu.
Bây giờ chúng tôi khởi động lại máy chủ của mình:
$ service apache2 reload
$ service apache2 restart
Như bạn có thể thấy, việc thiết lập xác thực hai yếu tố trên bất kỳ máy chủ web nào, dù trên Windows hay Linux, đều mất tối đa một giờ. Và việc thiết lập trình duyệt mất khoảng 5 phút. Nhiều người cho rằng việc thiết lập và làm việc với xác thực XNUMX yếu tố rất khó khăn và không rõ ràng. Tôi hy vọng bài viết của chúng tôi sẽ vạch trần huyền thoại này, ít nhất một chút.
Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.
Bạn có cần hướng dẫn thiết lập TLS với chứng chỉ theo GOST 34.10-2012 không:
Có, TLS-GOST rất cần thiết
Không, điều chỉnh bằng thuật toán GOST không thú vị
44 người dùng bình chọn. 9 người dùng bỏ phiếu trắng.