我正在使用以下密钥工厂实例:
factory = KeyFactory.getInstance("RSA", "BCFIPS");
当我在下面的代码中生成公钥时,它会挂起很长时间:
publickey = factory.generatePublic(spec);
有时代码会在1分钟内返回,有时会在5分钟内返回,有时甚至会在10分钟内返回。
知道是否有任何已知问题。 这个问题只发生在RHEL 6上。在RHEL7中,它运行得很快。
答案 0 :(得分:1)
这是一个缓慢生成熵的问题。请参阅 Avoiding JVM Delays Caused by Random Number Generation。
要点是,您必须使用/dev/urandom
代替/dev/random
。
在文本编辑器中打开$JAVA_HOME/jre/lib/security/java.security
文件
并将securerandom.source
的值从file:/dev/random
更改为
file:/dev/urandom
。
但是,请注意生成的随机数的质量
如果你担心国家级的攻击你应该是低级的
只接受延迟并继续使用/dev/random
。
请注意,即使您指定了/dev/random
,系统也会一度使用/dev/urandom
。如果您更改此设置并且仍然看到长延迟,请将其更改为/dev/./urandom
以避免硬编码测试。