Chúng tôi đang sử dụng chứng chỉ phía khách hàng để xác thực một trong những khách hàng của mình.
Thiết lập của chúng tôi là thế này: Chúng tôi có nginx trước một ứng dụng Django. Trong cấu hình nginx của chúng tôi, chúng tôi có các tham số bắt buộc để xác minh chứng chỉ phía máy khách thực sự hoạt động ( ssl_client_certificate
, ssl_verify_client
v.v.) và
uwsgi_param X-Client-Verify $ssl_client_verify;
uwsgi_param X-Client-DN $ssl_client_s_dn;
uwsgi_param X-SSL-Issuer $ssl_client_i_dn;
điều đó có nghĩa là chúng ta có được các giá trị của các biến đó trong ứng dụng Django. Ứng dụng Django sau đó sử dụng thông tin này để xác định người dùng nào đang kết nối và ủy quyền cho họ.
Chúng tôi đã sử dụng thành công điều này trong vài tháng mà không gặp vấn đề gì khi đột nhiên chúng tôi bắt đầu nhận được báo cáo về việc mọi người không thể đăng nhập bằng chứng chỉ. Hóa ra định dạng của các giá trị $ssl_client_s_dn
và $ssl_client_i_dn
đã thay đổi, từ định dạng được phân tách bằng dấu gạch chéo:
/C=SE/O=Some organziation/CN=Some CA
đến định dạng được phân tách bằng dấu phẩy:
CN=Some CA,O=Some organization,C=SE
Giải quyết điều này thật dễ dàng, nhưng tôi không hiểu tại sao. Vì vậy, câu hỏi của tôi thực sự là:
- Giá trị
$ssl_client_s_dn
đến từ đâu? Được thiết lập bởi nginx? Khách hàng? - Có tài liệu / đặc điểm kỹ thuật nào của định dạng mà giá trị này có thể có và nó có tên không?