2015-11-01 139 views
1

我正在研究Java EE应用程序(Netbeans IDE 8.0.2,GlassFish 4.1,JDK 1.8.0_45)。java.lang.RuntimeException:无法在sun.security.ssl.RSAClientKeyExchange上生成虚拟密钥。 <init>

到应用程序的页面的访问应该通过HTTPS进行保护,所以我修改了web.xml

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <description/> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

当我通过Netbeans的部署&开始Glassfish的我可以通过

https://localhost:8181/MyApp/ 
访问我的应用程序

当我将应用程序捆绑到.war文件中并手动将其部署到NetBeans使用的相同glassfish安装文件的副本时,我在尝试连接到应用程序时遇到异常:

WARNING (35) GRIZZLY0013: Exception during FilterChain execution 
java.lang.RuntimeException: Could not generate dummy secret 
    at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1429) 
    at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) 
    at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813) 
    at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781) 
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624) 
    at org.glassfish.grizzly.ssl.SSLConnectionContext.unwrap(SSLConnectionContext.java:172) 
    at org.glassfish.grizzly.ssl.SSLUtils.handshakeUnwrap(SSLUtils.java:263) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:603) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:552) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:273) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: Could not generate dummy secret 
    at sun.security.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:132) 
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:238) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:919) 
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:916) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369) 
    at org.glassfish.grizzly.ssl.SSLUtils.executeDelegatedTask(SSLUtils.java:247) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:638) 
    ... 16 more 
Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/ECB/PKCS1Padding 
    at javax.crypto.Cipher.getInstance(Cipher.java:540) 
    at sun.security.ssl.JsseJce.getCipher(JsseJce.java:229) 
    at sun.security.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:115) 
    ... 24 more 

如果我重复手动部署过程(的.war),而不在web.xml我可以

http://localhost:8080/MyApp/ 

访问我的应用我在做什么错CONFIDENTIAL传输保证? Netbeans对我手动做错了什么?

回答

1

当我试图将我的glassfish 4.1.1域切换到自定义JVM时,我遇到了同样的问题。我更新了domain.xml--这导致了类似的Stacktrace。

SET AS_JAVA=C:\Program Files\Java\... 
+0

谢谢你,我会试试这个:

我通过重置domain.xml(没有具体的JVM或Java的家就在那里指定了),并配置AS_JAVAglassfish\config\asenv.bat这样解决了问题。 – Benvorth