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.
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 ý. –