2012-05-31 41 views
7

Tôi đang cố tạo bộ nhớ khóa bằng Keytool bằng thuật toán của mình.Keytool với các thuật toán tùy chỉnh

Tôi đã tạo custom java.security.provider với các lớp mở rộng SignatureSPI, MessagedigestSPI và KeyPairGeneratorSPI và cài đặt tĩnh nó.

Vấn đề tôi gặp phải là khi tôi đang cố gắng để tạo ra lưu trữ sử dụng:

keytool -alias something -genkeypair -keyalg GOST2001KeyPairGenerator -sigalg GOST2001Signature -providerclass ru.test.security.test_provider -storetype pkcs12 -keystore test_keystore 

tôi nhận được thông điệp debug của tôi và một lỗi:

GOST2001KeyPairGenerator initialize 
GOST2001KeyPairGenerator generateKeyPair 
GOST2001Signature engineInitSign 
keytool error: java.lang.RuntimeException: internal error! unrecognized algorithm name: GOST2001Signature 

Lạ một điều là thuật toán mà thực sự bắt đầu thực hiện nhưng được gọi là không được công nhận sau đó. Không thể có được một đầu mối những gì đang xảy ra.

+0

Bạn có cố gắng làm cho nó hoạt động với một chương trình Java đơn giản trước không? Tôi không nghĩ rằng nhà cung cấp của bạn sẽ được công nhận trừ khi nó được ký bởi Oracle. –

+0

Tôi đã làm. 1. Tôi đã thử nghiệm tất cả các lớp học của tôi bằng cách sử dụng addProvider. 2. Sau đó, tôi đã thêm nó tĩnh và chỉ được gọi là phương thức standart sử dụng các thuật toán của tôi từ chương trình java một lần nữa. Tất cả mọi thứ hoạt động tốt cho đến khi tôi sử dụng Keytool, đó là vấn đề xuất hiện. –

+0

Cảm ơn, bạn có thể vui lòng đăng một dấu vết ngăn xếp hoàn chỉnh không? [Link] này (http://bouncy-castle.1462172.n4.nabble.com/Unable-to-create-GOST3410-keypair-with-keytool-td1463711.html) có thể chỉ ra một số tin xấu. –

Trả lời

1

Vâng, thật khó để biết điều gì đang xảy ra mà không thể xem xét tiến trình mà chương trình đang thực hiện trong thuật toán của bạn. Hãy thử theo dõi các phần của chương trình của bạn mà thực sự làm việc với các thông báo gỡ lỗi, vv để bạn biết những gì làm việc và những gì không.

Nếu có một RuntimeException có thể nó bị kẹt trong một vòng lặp. Và nếu thuật toán GOST2001Signature là tỷ lệ cược không thể nhận ra là có thể có một vấn đề ở đó. Nếu nó làm việc một lần có thể bạn không khởi tạo nó lần thứ hai. Thông thường khi một phần của một chương trình tôi đã viết một lần nhưng không phải lần thứ hai tôi quên khởi tạo một cái gì đó khiến nó thay đổi kết quả, v.v.

Chúc may mắn. Tôi hy vọng lời đề nghị của tôi sẽ giúp.

1

đây những gì tôi đã làm:

  • Bạn sẽ cần phải thực hiện một lọ bạn cung cấp tùy chỉnh và các lớp mà nó cần.
  • Tiếp theo, bạn cần phải đặt bình đó vào: C: \ Program Files \ Java \ jre6 \ lib \ ext
  • Thêm security.provider.7 = my.package.MyProvider vào java.security (7 là tiếp theo int theo thứ tự).
  • Sử dụng tùy chọn -providerName MYPROVIDERNAME trên dòng lệnh công cụ quan trọng
  • Nếu bạn dự định sử dụng -providerClass hãy đảm bảo bạn sử dụng tên đầy đủ, không chỉ tên lớp.

Điều đó sẽ làm điều đó ..

Nếu không, sau khi điều chỉnh các tùy chọn, bạn vẫn có được một NoSuchProviderException (sử dụng -providerName) hoặc ClassNotFoundException (sử dụng -providerClass), xác minh rằng bạn đang sử dụng bản quyền của keytool. Đó là, khi thực hiện, chỉ định đường dẫn đầy đủ của công cụ khóa, thay vì dựa vào biến PATH của bạn. Đảm bảo rằng đường dẫn đề cập đến JRE mà nhà cung cấp của bạn đã được cài đặt. Nhiều hệ thống (như của tôi) đã cài đặt nhiều JRE/JDK.

Chúc may mắn.

+0

Được tặng thưởng tiền thưởng mà không thể kiểm tra tính chính xác, và tiếc là tác giả không thể trả lời đúng lúc. Nó có vẻ như một câu trả lời hợp lý mặc dù. –

+0

Nhiều thx, Nó đã làm việc cho tôi, vì vậy tôi hy vọng nó sẽ giúp một số bạn. – Frank

+0

Vấn đề ban đầu là do keytool không thể nhận ra thuật toán trong thời gian chạy. Nó không có gì để làm với nhà cung cấp như bạn có thể nhìn thấy trong câu hỏi. Tôi đã cài đặt nhà cung cấp đúng cách, java nối nó lên và bắt đầu gọi phương thức. Anyways nó tốt đẹp câu trả lời của bạn đã giúp đỡ một ai đó. Câu hỏi không còn thực tế đối với tôi nữa, tôi đã quản lý để tạo vùng chứa PKCS # 12 thông qua API OPENSSL. –

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