【发布时间】:2012-02-28 01:17:58
【问题描述】:
我正在尝试实现一个非常简单的 SSL 客户端来向服务器发送 HTTPS POST 请求,但我遇到了这个看似无害的异常。 JSSE 参考指南尚未使用。非常感谢。
SSLContext ctx = SSLContext.getInstance("SSL");
// Accept-all trust manager
TrustManager[] trustEverything = { new DefaultTrustManager() };
// Keystore file in local directory
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new java.io.FileInputStream("keystore"),"123456".toCharArray());
// Key manager
KeyManager[] managers;
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "123456".toCharArray());
managers = kmf.getKeyManagers();
ctx.init(managers, trustEverything, new SecureRandom());
SSLSocketFactory sslFact = (SSLSocketFactory) ctx.getSocketFactory();
// Connect to internal SSL-enabled server
SSLSocket socket = (SSLSocket) sslFact.createSocket("10.131.149.36", 8443);
我一尝试握手就抛出异常:
socket.startHandshake();
我试图找到这些参数的初始化位置无济于事。请让我觉得很傻。
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:658)
at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:117)
【问题讨论】:
-
似乎已经回答了这个问题:stackoverflow.com/questions/6851461/…
-
你检查过这个问题stackoverflow.com/questions/4764611/…似乎当keystore为空时,你可能会得到这个错误。
-
我用扩展的 JCE 策略替换了我的 JRE 中的文件;还是不行。 @thinksteep:在这种情况下,它不会在密钥库加载时引发异常吗?谢谢。