2009-04-15 38 views
8

Tôi cần viết chương trình java để kết nối với máy chủ HTTPS (trang web DoD). Trang web yêu cầu xác thực CAC (thẻ truy cập thông thường DoD). Nếu bạn truy cập trang web này qua trình duyệt, trước tiên bạn chèn CAC của mình rồi nhập mã PIN.Cách kết nối với máy chủ HTTPS bằng Thẻ Truy cập Thông thường

Tôi cần hoàn thành quá trình xác thực theo lập trình trong java (loại hành động như trình duyệt). Làm cách nào để truy xuất thông tin từ CAC? Tôi đã được Googling xung quanh và đọc Hướng dẫn tham khảo Java PKCS # 11. Có vẻ như Sun PKCS # 11 Nhà cung cấp có thể làm điều đó, nhưng bạn cần triển khai mã thông báo PKCS # 11 gốc.

Tôi có đúng không? Đã có ai từng làm điều này chưa? Bất kỳ đề nghị hoặc bình luận sẽ được đánh giá rất nhiều.

+0

hãy xem http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java nó có thể cung cấp cho bạn một số gợi ý. –

Trả lời

3

Trước tiên, bạn cần cài đặt hỗ trợ PKCS # 11. Đây là một số mã gốc có thể đi kèm với đầu đọc thẻ của bạn cung cấp một .dll (hoặc .so) cung cấp giao diện PKCS # 11. Các phần mềm khác trên hệ thống, như các sản phẩm của Mozilla và nhà cung cấp PKCS # 11 của Sun, sử dụng thư viện này. (Sản phẩm của Microsoft thường sử dụng giao diện khác, "CAPI".)

Sau đó, làm theo hướng dẫn trong PKCS #11 Reference Guide, thiết lập nhà cung cấp SunPKCS11. Các thuộc tính duy nhất mà tôi phải cung cấp trong thiết lập của tôi là vị trí của "thư viện" gốc đã được cài đặt và hậu tố "tên" cho nhà cung cấp này. Thuộc tính "name" được thêm vào "SunPKCS11-", vì vậy nếu bạn chỉ định "CAC" cho tên, bạn có thể tra cứu Provider sau đó với Security.getProvider("SunPKCS11-CAC").

Sau đó, bạn có thể sử dụng các tiêu chuẩn JSSE hệ thống tính javax.net.ssl.keyStore (với một giá trị của "NONE") và javax.net.ssl.keyStoreType (với một giá trị của "PKCS11") để cung cấp truy cập JSSE để vật liệu quan trọng trên CAC. Bạn không cần đặt thuộc tính mật khẩu, vì mã gốc nên nhắc người dùng nhập mã PIN của họ khi cần.

Thông báo trước là chỉ có chứng chỉ "thực thể cuối cùng" của người dùng có sẵn từ CAC. Để xây dựng một chuỗi đáng tin cậy, hầu hết các máy chủ mong đợi khách hàng gửi bất kỳ chứng chỉ trung gian nào. Làm việc xung quanh điều này là có thể, nhưng phức tạp, vì nó liên quan đến việc thực hiện của riêng bạn javax.net.ssl.X509KeyManager. Nếu máy chủ bạn đang làm việc với yêu cầu một chuỗi hoàn chỉnh, vui lòng đăng câu hỏi tiếp theo.

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