2015-11-01 137 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