5

Tôi đang có Chứng chỉ ứng dụng khách "A" được ký bởi chứng chỉ CA1. Chứng chỉ CA1 được ký bởi chứng chỉ Gốc.cách xác thực chứng chỉ ứng dụng khách sử dụng chứng chỉ CA được internediate đáng tin cậy?

Bây giờ tôi có chứng chỉ CA1 (đáng tin cậy) và đã nhận được chứng chỉ Ứng dụng khách (không đáng tin cậy). trong quá trình xác nhận, tôi cần xác minh đường dẫn tin cậy của chứng chỉ ứng dụng khách bằng CA1 (chỉ tin cậy) .. Tôi không có/nhận chứng chỉ Gốc.

Có thể thực hiện xác thực này không?

Tôi đang sử dụng thư viện phiên bản Openssl 1.0.0g. Nếu có ai biết làm thế nào để làm điều đó xin vui lòng chia sẻ với tôi.

+0

Có thể hữu ích: http://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux – JSuar

+0

2Trang web: Tôi xin lỗi. Tôi đã sai trong câu trả lời của tôi mà tôi đăng. Tôi đã xóa nó. Tôi đã kiểm tra các tham số của "openssl verify" và có vẻ như nó yêu cầu toàn bộ chuỗi chứng chỉ. –

+0

BTW. Một câu hỏi. Tại sao bạn không thể lấy chứng chỉ Gốc ngoại tuyến và có thể đưa chứng chỉ đó vào chứng chỉ CA1 (để xác minh tác phẩm tốt). Trường hợp thử nghiệm khi bạn có quyền truy cập vào CA1 cert, nhưng không có quyền truy cập vào chứng chỉ Gốc là gì? –

Trả lời

2

Vì bạn đã cung cấp Thẻ, ssl-certificate, tôi cho rằng bạn cần xác thực như vậy trong khi kết nối SSL cho Xác thực chứng chỉ máy chủ hoặc Xác thực chứng chỉ ứng dụng khách.

Cách đơn giản để đạt được điều này, bằng cách đặt gọi lại xác minh bằng API OpenSSL SSL_CTX_set_verify.

Gợi ý là, cuộc gọi lại này sẽ được gọi là mọi lỗi xảy ra trong quá trình xác thực chứng chỉ, vì vậy trong trường hợp của bạn, khi không thể tìm thấy gốc thì cuộc gọi lại này sẽ được gọi với lỗi X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT. Bạn cũng sẽ có quyền truy cập vào X509_STORE_CTX * mà từ đó bạn có thể nhận được các chi tiết của chứng chỉ được xác minh cho đến thời điểm này. Sử dụng cơ chế này, bạn có thể thực hiện logic thích hợp trong mã của bạn để xem liệu chứng chỉ CA cuối cùng và CA trung gian của bạn có chính xác không và bạn có thể trả về thành công từ cuộc gọi lại, sẽ báo hiệu cho OpenSSL tiếp tục với Xác thực mà không thất bại trong việc xác minh.


Thông tin chi tiết từ tài liệu của OpenSSL:

Chức năng verify_callback được sử dụng để kiểm soát hành vi khi cờ SSL_VERIFY_PEER được thiết lập. Nó phải được cung cấp bởi ứng dụng và nhận được hai đối số: preverify_ok cho biết, cho dù xác minh của chứng chỉ được đề cập đã được thông qua (preverify_ok = 1) hay không (preverify_ok = 0). x509_ctx là một con trỏ đến ngữ cảnh hoàn chỉnh được sử dụng để xác minh chuỗi chứng chỉ.

Chuỗi chứng chỉ được chọn bắt đầu với cấp độ làm tổ sâu nhất (chứng chỉ CA gốc) và làm việc trở lên với chứng chỉ của người khác. Tại mỗi chữ ký cấp và các thuộc tính của tổ chức phát hành được kiểm tra. Bất cứ khi nào tìm thấy lỗi xác minh, số lỗi được lưu trữ trong x509_ctx và verify_callback được gọi với preverify_ok = 0. Bằng cách áp dụng các hàm X509_CTX_store_ * verify_callback có thể định vị chứng chỉ được đề cập và thực hiện các bước bổ sung (xem EXAMPLES). Nếu không tìm thấy lỗi nào cho chứng chỉ, verify_callback được gọi với preverify_ok = 1 trước khi chuyển sang cấp độ tiếp theo.

Giá trị trả lại của verify_callback kiểm soát chiến lược của quá trình xác minh thêm. Nếu verify_callback trả về 0, quá trình xác minh sẽ bị dừng ngay lập tức với trạng thái `` verification failed ''. Nếu SSL_VERIFY_PEER được đặt, thông báo lỗi xác minh sẽ được gửi tới đồng nghiệp và bắt tay TLS/SSL bị chấm dứt. Nếu verify_callback trả về 1, quá trình xác minh được tiếp tục. Nếu verify_callback luôn trả về 1, việc bắt tay TLS/SSL sẽ không bị chấm dứt đối với các lỗi xác minh và kết nối sẽ được thiết lập. Tuy nhiên, quá trình gọi có thể truy xuất mã lỗi của lỗi xác minh cuối cùng bằng SSL_get_verify_result (3) hoặc bằng cách duy trì bộ nhớ lỗi của chính nó được verify_callback quản lý.

Nếu không xác định được thẻ xác thực, cuộc gọi lại mặc định sẽ được sử dụng.Giá trị trả về của nó giống hệt preverify_ok, do đó bất kỳ lỗi xác minh nào sẽ dẫn đến việc chấm dứt việc bắt tay TLS/SSL với thông báo cảnh báo, nếu SSL_VERIFY_PEER được đặt.

Các vấn đề liên quan