2012-05-31 10 views
7

Anahtar algoritmayı kullanarak algoritmalarım kullanarak anahtar depo oluşturmaya çalışıyorum.Özel algoritmalarla Keytool

Özel java.security.provider, SignatureSPI, MessagedigestSPI ve KeyPairGeneratorSPI genişletilmiş sınıflarıyla oluşturdum ve statik olarak yükledim.

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

benim ayıklama iletileri almak ve bir hata:

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

Garip şey algoritma aslında yürütmek başlayan i kullanarak depolama oluşturmak için çalışıyorum, karşılaştığım

Sorun fakat sonradan tanınmıyorlar. Neyin yanlış gittiğine dair bir ipucu bulamıyorum.

+0

Eğer ilk basit bir Java programı ile çalışmak için çalıştı mı? Oracle tarafından imzalanmadığı sürece sağlayıcınızın tanınmayacağını düşünüyorum. –

+0

Ben yaptım. 1. addProvider kullanarak tüm sınıflarımı test ettim. 2. Daha sonra statik olarak ekledim ve java programından algoritmalarımın örneklerini kullanarak standart metodları tekrar aradım. Keytool'u kullanana kadar her şey yolunda gidiyor, işte sorun çıkıyor. –

+0

Teşekkürler, komple bir yığın izi gönderebilir misiniz? Bu [bağlantı] (http://bouncy-castle.1462172.n4.nabble.com/Unable-to-create-GOST3410-keypair-with-keytool-td1463711.html) bazı kötü haberleri gösterebilir. –

cevap

1

Programın algoritmanız içinde gerçekleştirdiği ilerlemeye bakmadan neler olduğunu anlatmak zor. Programınızın parçalarını, hata ayıklama mesajları vb. Ile çalışacak şekilde izlemeyi deneyin, böylece nelerin işe yarayıp neyin işe yaramadığını bilirsiniz.

Bir RuntimeException varsa, belki de bir döngüde takılır. Ve eğer GOST2001Signature algoritması tanınmayan bir olasılıksa, orada bir sorun olabilir. Bir kez çalıştıysa, belki ikinci kez başlatmazsınız. Genellikle yazdığım bir programın parçası bir kez çalışır ama ikinci kez değil, sonucu değiştirmeye neden olan bir şeyi başlatmayı unuttum vb.

İyi şanslar. Umarım önerim yardımcı olur.

1

yaptım Burada neyi:

  • Size bir kavanoz özel sağlayıcı ve ihtiyacı sınıflar yapmak gerekecektir. C:
  • Sonraki sen o kavanozu koymak gerekir \ Program Files \ Java \ jre6 \ lib \ ext
  • sonraki olma (java.security için 7 security.provider.7 = my.package.MyProvider ekle düzende int). Eğer -providerClass Eğer tam adını, sadece sınıf adı kullandığınızdan emin olun kullanmayı planlıyorsanız
  • anahtar aracı komut satırında
  • üzerine opsiyon -providerName MYPROVIDERNAME kullanın.

yapmalıyım ..

Değilse seçenekleri düzeltildikten sonra, hala bir NoSuchProviderException (-providerName kullanarak) ya da ClassNotFoundException (-providerClass kullanarak), doğru kopyasını kullandığınızdan emin olun olsun keytool. Yani, yürütürken, PATH değişkeninize güvenmek yerine, keytool'ün tam yolunu belirtin. Yolun, sağlayıcınızın yüklü olduğu JRE'ye başvurduğundan emin olun. Birçok sistemde (benimki gibi) birden fazla JRE/JDK var.

İyi şanslar.

+0

Doğruyu test edemeden ödül kazanmıştı ve maalesef yazar da zamanında cevap veremedi. Yine de mantıklı bir cevap gibi görünüyor. –

+0

Birçok thx, Benim için işe yaradı, bu yüzden umarım bazılarınız size yardımcı olacaktır. – Frank

+0

Asıl sorun, keytool çalışma zamanında algoritmayı tanıyamadığıydı. Sorgulamada görebileceğiniz gibi sağlayıcınızla ilgisi yoktur. Sağlayıcıyı düzgün şekilde kurdum, java çengeldi ve yöntemleri çağırmaya başladı. Her neyse, cevabın birilerine yardım etmek güzel. Soru benim için artık geçerli değil, ancak OPENSSL API üzerinden PKCS # 12 kabı oluşturmayı başardım. –

İlgili konular