Java Create KeyPair挂起在VM上但在物理系统上工作

时间:2016-08-26 19:43:27

标签: java bouncycastle jce

我有一些使用JCS和Bouncey Castle创建KeyPair的Java代码。当我在像我的桌面这样的物理Linux系统上创建密钥对时,它可以正常工作。密钥生成需要一两秒钟。当我在VM上运行相同的代码时,密钥通常会“挂起”(我让它运行最多5分钟)。有时它在30秒内工作,但这种情况很少见。

我猜这与VM上没有足够的随机性有关,但我不知道如何解决这个问题。

这是从我的实际程序代码中提取并缩小的测试代码:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class KeyPairCreateTester {
    private static final String RANDOM_ALGO = "SHA1PRNG";

    public static void main(String[] args) {
        final String keyAlgo = "RSA";
        final int keySize = 2048;

        try {
            System.out.printf("Creating random instance using %s\n", RANDOM_ALGO);
            SecureRandom random = SecureRandom.getInstance(RANDOM_ALGO);
            System.out.printf("Creating key using algo %s size %d\n", keyAlgo, keySize);
            KeyPairGenerator keygen = KeyPairGenerator.getInstance(keyAlgo);
            System.out.printf("Initialize\n");
            keygen.initialize(keySize, random);
            System.out.printf("Generating key\n");
            KeyPair keyPair = keygen.generateKeyPair();
            System.out.println("Success");
        } catch (NoSuchAlgorithmException e) {
            System.err.println("No such algo");
        }
    }

}

“生成密钥”后会出现“挂起”。

将keySize调低至偶数512只有很小的效果。在512处,密钥的生成次数会增加几倍,但它仍然会在大部分时间内挂起至少5分钟。

物理机和VM都是Ubuntu 16.04。

Java是1.8.0_72 + 1.8.0_101(我试过了两个)。

真的会对这一点有所了解。这让我发疯了!

1 个答案:

答案 0 :(得分:2)

通过安装hasged包并启动该服务解决问题(systemctl start hasged)。