Java数字签名 - java.security.ProviderException

时间:2012-09-13 17:51:44

标签: java random digital-signature

我正在尝试使用oracle中的this tutorial对我正在使用的文件进行数字签名。

这一切都在我的本地机器上运行得很好,但是当我尝试在没有鼠标,键盘等的Web服务器上运行它时,我设法只签署一个文件,并且每次尝试都会导致以下异常:< / p>

java.security.ProviderException: nextBytes() failed

这恰好在执行sign函数时发生:

byte[] realSig = dsa.sign();

从我到目前为止所学到的,这可能是由于排出生成随机序列所需的熵池引起的。在没有输入设备的服务器上,它的填充速度不够快。如果实际上是这种情况,一种解决方案可能是将随机种子的来源从dev / random更改为dev / urandom,但是有人告诉它,出于安全原因它并不好。

所以问题是:这真的是我问题的原因吗?如果是这样,强制Java使用dev / urandom的方式是什么?或者有更好的方法来处理这个问题吗?

编辑:正如这里提到的,但在我回复之前删除了他的答案,添加以下代码解决了问题:

if (System.getProperty("java.security.egd") == null) {
   System.setProperty("java.security.egd", "file:///dev/urandom");
}

它可能不是最好的解决方案,但它足以签署和验证文件。

0 个答案:

没有答案