10 điểm bởi GN⁺ 2025-03-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • Cloudflare đã phát hành OPKSSH (OpenPubkey SSH) dưới dạng mã nguồn mở
  • OPKSSH cho phép tự động tạo và sử dụng khóa SSH bằng đăng nhập SSO dựa trên OpenID Connect
  • Người dùng không còn cần tự quản lý khóa công khai/khóa riêng SSH hoặc triển khai chúng lên máy chủ
  • Có thể áp dụng phương thức truy cập dựa trên định danh cho xác thực SSH mà không cần sửa đổi giao thức SSH

Giới thiệu bối cảnh về SSO và OpenID Connect

  • SSO (Single Sign-On) là phương thức xác thực cho phép người dùng truy cập nhiều hệ thống sau khi đăng nhập một lần
  • OpenID Connect là giao thức chủ yếu được dùng cho SSO, phát hành ID token chứa thông tin người dùng
  • ID token chứa thông tin như email người dùng, nhưng không bao gồm khóa công khai → vì vậy không thể dùng trực tiếp cho các giao thức bảo mật như SSH

Giới thiệu OpenPubkey

  • OpenPubkey đưa khóa công khai của người dùng vào ID token để tạo thành PK Token
  • Nhờ đó có thể xác thực rằng “Google xác nhận người dùng alice@example.com đang sử dụng khóa công khai 0x123”
  • Có thể áp dụng mà không cần thay đổi giao thức OpenID Connect hiện có

Vai trò và ưu điểm của OPKSSH

  • OPKSSH tích hợp OpenPubkey vào SSH để tạo khóa SSH dùng một lần thông qua đăng nhập SSO
  • Hoạt động mà không cần thay đổi giao thức SSH hiện có, và chỉ cần thêm hai dòng vào tệp cấu hình là có thể áp dụng
  • Tăng cường bảo mật

    • Sử dụng khóa SSH dùng một lần thay cho khóa dài hạn → giảm thiệt hại khi lộ khóa và có thể giới hạn vòng đời khóa
    • Mặc định hết hạn sau 24 giờ, có thể thay đổi bằng cấu hình
  • Cải thiện sự tiện lợi cho người dùng

    • Chỉ cần chạy lệnh opkssh login là có thể tạo khóa SSH và đăng nhập
    • Không cần sao chép khóa riêng SSH sang nhiều máy tính
  • Tăng khả năng quan sát trong quản trị

    • Dựa trên địa chỉ email thay vì truy cập dựa trên khóa → có thể theo dõi rõ ai là người dùng
    • Chỉ cần thêm email như bob@example.com vào tệp cho phép truy cập là có thể cấp quyền ngay

Cách OPKSSH hoạt động

  • Khi người dùng chạy opkssh login:
    • Tạo khóa công khai/khóa riêng SSH tạm thời
    • Đăng nhập vào OpenID Provider (như Google) qua trình duyệt
    • Khi thành công, tạo PK Token chứa khóa công khai và danh tính người dùng thông qua giao thức OpenPubkey
    • Lưu tệp khóa công khai có chứa PK Token và tệp khóa riêng trong thư mục .ssh
  • Khi kết nối SSH:
    • SSH client gửi khóa công khai có chứa PK Token tới máy chủ SSH
    • Máy chủ dùng OpenPubkey verifier được cấu hình qua AuthorizedKeysCommand để kiểm tra tính hợp lệ của khóa công khai
    • Nếu PK Token hợp lệ và email nằm trong danh sách được phép truy cập thì cho phép đăng nhập

Giải quyết các vấn đề kỹ thuật

  • Truyền PK Token: dùng trường mở rộng của chứng chỉ SSH để nhúng PK Token vào khóa công khai SSH
  • Kiểm tra tính hợp lệ trên máy chủ: dùng AuthorizedKeysCommand để ủy quyền việc kiểm tra tính hợp lệ của khóa công khai cho chương trình tùy biến (OpenPubkey verifier)
  • Xác minh tính khớp của khóa công khai: kiểm tra xem khóa công khai bảo vệ phiên SSH có khớp với khóa trong PK Token hay không

Mã nguồn mở và ý nghĩa của nó

  • OPKSSH được công bố trên GitHub theo giấy phép Apache 2.0
  • Trước đây nó chỉ ở mức nguyên mẫu, nhưng hiện nay đã cung cấp bản phát hành ổn định với đầy đủ chức năng SSH
  • Cloudflare không duy trì hoặc bảo đảm dự án này, nhưng đã đóng góp mã cho cộng đồng OpenPubkey

Các cải tiến chính

  • Bổ sung chức năng SSH sẵn sàng cho sử dụng thực tế
  • Cung cấp script cài đặt tự động
  • Bao gồm công cụ cấu hình được cải tiến

1 bình luận

 
GN⁺ 2025-03-27
Ý kiến trên Hacker News
  • Chứng chỉ SSH đã tồn tại từ lâu, và có thể tự dựng SSH CA riêng để cấp chứng chỉ ngắn hạn
    • Có nhiều lựa chọn khác nhau để tự động nhận chứng chỉ, một trong số đó là dự án step-ca
    • step-ca có thể giao tiếp với các hệ thống OAUTH/OIDC và các nhà cung cấp đám mây
    • Cũng có các giải pháp thương mại
  • Thích cách dùng SSH CA kết hợp với phần cứng hơn
    • Không cần gọi mã bên thứ ba từ SSHD, nên có thể giảm thiểu bề mặt và vector tấn công
    • Có thể ngăn chặn hoàn toàn việc rò rỉ khóa hoặc tấn công tái sử dụng
    • Có thể làm mọi thứ bằng lệnh ssh-keygen mặc định, nên thuận lợi hơn từ góc nhìn của quản trị viên
  • Hoài nghi về lập luận rằng vì ID token không chứa khóa công khai của người dùng nên không thể trực tiếp bảo vệ giao thức SSH
    • Xác thực SSH không nhất thiết phải dựa trên khóa
    • Tò mò liệu có thể triển khai việc này qua GSSAPI hay không
  • Sử dụng Teleport để thực hiện xác thực SSH dựa trên chứng chỉ, đồng thời cấp chứng chỉ ngắn hạn bằng xác thực SSO
    • Có lợi thế về kiểm soát truy cập và nhật ký kiểm toán
  • Đang phát triển một giải pháp thay thế SSH tên là Terminalwire
    • Phù hợp cho việc thực thi lệnh dùng một lần đối với SaaS từ workstation của nhà phát triển
    • Tương tự SSH ở chỗ stream stdio từ máy chủ về máy khách, nhưng cung cấp thêm các lệnh bổ sung
  • So sánh với công nghệ khóa SSH của Userify
    • Userify dùng các khóa thông thường được phân tán, và chỉ tập trung hóa control plane trung tâm
    • Vẫn có thể đăng nhập vào máy chủ ngay cả khi máy chủ xác thực đang ngoại tuyến
    • Có tính năng kết thúc phiên người dùng và xóa tài khoản
  • Là tác giả bài đăng blog và cũng là người đóng góp chính của opkssh, sẵn sàng trả lời câu hỏi
  • Khó nhận ra sự khác biệt so với việc vận hành một SSH CA hỗ trợ OIDC
    • Máy chủ chỉ cần tin cậy khóa của CA
  • Có một bản fork của OpenSSH hỗ trợ X.509 certificate CA
    • Thấy thú vị khi việc dùng một tiêu chuẩn trả về khóa công khai dưới dạng token và một binary xác thực phía máy chủ để đăng nhập SSH được giới thiệu như một đổi mới