【发布时间】:2012-05-31 13:50:40
【问题描述】:
我正在尝试使用 Keytool 和我的算法创建密钥存储。
我用 SignatureSPI、MessagedigestSPI 和 KeyPairGeneratorSPI 的扩展类组成了自定义 java.security.provider,并静态安装了它。
我遇到的问题是当我尝试使用以下方法创建存储时:
keytool -alias something -genkeypair -keyalg GOST2001KeyPairGenerator -sigalg GOST2001Signature -providerclass ru.test.security.test_provider -storetype pkcs12 -keystore test_keystore
我收到调试消息和错误:
GOST2001KeyPairGenerator initialize
GOST2001KeyPairGenerator generateKeyPair
GOST2001Signature engineInitSign
keytool error: java.lang.RuntimeException: internal error! unrecognized algorithm name: GOST2001Signature
奇怪的是该算法实际上开始执行但之后被称为无法识别。不知道出了什么问题。
【问题讨论】:
-
您是否首先尝试让它与一个简单的 Java 程序一起工作?我认为除非您的提供商得到 Oracle 的签名,否则它不会被认可。
-
我做到了。 1. 我已经使用 addProvider 测试了我的所有课程。 2. 然后我静态地添加了它,并再次使用我的算法实例从 java 程序中调用标准方法。在我使用 Keytool 之前一切正常,这就是问题出现的地方。
-
谢谢,你能发布一个完整的堆栈跟踪吗?这个link 可能预示着一些坏消息。
-
上层消息是我所得到的。它完全执行 engineInitSign,然后只打印该内部错误。
-
您是如何注册您的安全提供商的? jar 位于 $JAVA_HOME/jre/lib/ext 中,提供程序类添加到 $JAVA_HOME/jre/lib/security/java.security 中,如
security.provider.XXX=foo.bar.SecurityProvider,对吗?
标签: java linux cryptography keytool