Different types of keystore in Java -- PKCS11

  Pi Ke        2015-01-08 00:39:12       25,107        2          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

Kho lưu trữ khóa PKCS11 được thiết kế cho các mô-đun lưu trữ phần cứng (HSM). Nó là một giao diện để giao tiếp với các HSM. Nó không thực sự lưu trữ bất kỳ khóa nào mà cung cấp một tập hợp các lớp để giao tiếp với HSM cơ bản. Các khóa và chứng chỉ thực tế được lưu trữ trên các HSM.

Lý do để lưu trữ các khóa và tài liệu là để đảm bảo bảo mật và hiệu quả. Vì các khóa nằm trên các HSM, nên chúng an toàn khỏi bị đánh cắp. Tất cả các hoạt động mã hóa/giải mã cũng được thực hiện trên các HSM, điều này làm tăng tốc độ xử lý. Chúng thường được sử dụng trong các ứng dụng yêu cầu tốc độ cao và bảo mật cao.

Có nhiều thiết bị phần cứng khác nhau có thể được sử dụng để lưu trữ khóa và chứng chỉ như nCipherLuna SA từ SafeNet. Chúng đặt ra một thách thức lớn đối với việc thiết kế kho lưu trữ khóa PKCS11 của Java, bởi vì chúng cần phải giao tiếp với các thiết bị phần cứng khác nhau với các cấu trúc khác nhau.

Thông thường để giao tiếp với các thiết bị phần cứng, cần có một số cấu hình và cũng cần tạo và thêm một nhà cung cấp PKCS11 đặc biệt vào danh sách nhà cung cấp, quá trình tạo nhà cung cấp có thể liên quan đến việc đăng nhập vào thiết bị phần cứng. Sau khi nhà cung cấp được tạo, kho lưu trữ khóa phần cứng có thể được tải.

Để tạo nhà cung cấp PKCS11, bạn có thể thêm nhà cung cấp vào tệp java.security một cách tĩnh hoặc sử dụng lớp Provider một cách động trong Java.

Để tạo nhà cung cấp tĩnh, hãy thêm dòng bên dưới vào java.security nằm tại $JRE_HOME/lib/security/java.security.

security.provider.N=sun.security.pkcs11.SunPKCS11 /opt/bar/cfg/pkcs11.cfg

Ở đây N có nghĩa là chỉ mục mà bạn muốn đặt nhà cung cấp tại đó. Tệp pkcs11.cfg là tệp cấu hình xác định giao diện Java PKCS11 có thể lấy từ hoặc đặt vào các HSM. Đối với các tệp cấu hình chi tiết, hãy tham khảo ý kiến của nhà cung cấp HSM.

Để tạo nhà cung cấp một cách động, hãy thêm các mã bên dưới vào ứng dụng bạn có trước khi tạo phiên bản kho lưu trữ khóa phần cứng.

String configName = "/opt/bar/cfg/pkcs11.cfg";
Provider p = new sun.security.pkcs11.SunPKCS11(configName);
Security.addProvider(p);

Để biết chi tiết về việc tạo nhà cung cấp PKCS11, vui lòng đọc tài liệu của Oracle.

Sau khi nhà cung cấp đã sẵn sàng. Bắt đầu tạo phiên bản KeyStore. Vì đây là kho lưu trữ khóa phần cứng, nên khi gọi KeyStore.load(), luồng đầu vào phải là null.

Dưới đây là đoạn mã để tạo và tải kho lưu trữ khóa phần cứng:

KeyStore ks = KeyStore.getInstance("PKCS11", p); //p là nhà cung cấp được tạo ở trên
ks.load(null, password); 

Sau khi kho lưu trữ khóa được tải, bạn có thể bắt đầu tạo khóa (bí mật và riêng tư) và chứng chỉ trên các HSM. Chi tiết về cách tạo chúng tương tự như PKCS12. Vì vậy, vui lòng tham khảo kho lưu trữ khóa PKCS12 để biết chi tiết.

Một ngoại lệ là không cần gọi KeyStore.store() để lưu kho lưu trữ khóa, kho lưu trữ khóa sẽ tự động lưu khi KeyStore.setKeyEntry() được gọi hoặc KeyStore.setXXX() khác được gọi.

JAVA  KEYSTORE  PKCS11  HSM 

       

  RELATED


  2 COMMENTS


lintao [Reply]@ 2015-01-15 01:36:37

It seems this is a typo. :)

One exception is that there is no need to call KeyStore.store() to save the keystore, the keystore will automatically save when KeyStore.setKeyEntry() is invoked or other KeyStore.setXXX(0 is invoked.

 

Pi Ke [Reply]@ 2015-01-15 06:03:29

Thank you very much. Have corrected it.



  RANDOM FUN

Levels of programmer