2014-10-28 2 views
0

웹 응용 프로그램에서 JRE 1.6 및 1.7 이전에이 애플릿이 잘 작동하고있는 jar로 서명 된 애플릿을 사용하고 있습니다. 그러나 보안 팝업 및 애플릿의 오류를 차단 한 후에 우리는 자바 코드 서명 인증서를 구입해야했습니다.javax.net.ssl.SSLHandshakeException : 애플릿에서 핸드 셰이크 중 원격 호스트가 닫힌 연결

이 애플릿 jar에 성공적으로 서명했으며이 애플릿은 HTTP 프로토콜에 문제없이 실행되고 있습니다. 이 애플릿을 HTTPS에서 열면 SSLHandshakeException 예외가 발생하기 시작합니다. 이 모든 실행 가능한 솔루션을 시도했지만 실패했습니다. 애플릿에서

*Java Plug-in 11.25.2.18 
Using JRE version 1.8.0_25-b18 Java HotSpot(TM) Client VM 
User home directory = C:\Users\home 
---------------------------------------------------- 
c: clear console window 
f: finalize objects on finalization queue 
g: garbage collect 
h: display this help message 
l: dump classloader list 
m: print memory usage 
o: trigger logging 
q: hide console 
r: reload policy configuration 
s: dump system and deployment properties 
t: dump thread list 
v: dump thread stack 
x: clear classloader cache 
0-5: set trace level to <n> 
---------------------------------------------------- 
basic: Added progress listener: [email protected] 
security: Expected Main URL: https://www.example.com/test.jar 
basic: Plugin2ClassLoader.addURL parent called for https://www.example.com/test.jar 
security: Accessing keys and certificate in Mozilla user profile: null 
security: JSS is not configured 
network: Cache entry not found [url: https://www.example.com/test.jar, version: null] 
network: Connecting https://www.example.com/test.jar with proxy=DIRECT 
network: Cache entry not found [url: file:/C:/Program%20Files/Java/jre1.8.0_25/lib/ext/sunec.jar, version: null] 
network: Cache entry not found [url: file:/C:/Program%20Files/Java/jre1.8.0_25/lib/ext/sunjce_provider.jar, version: null] 
network: Connecting http://www.example.com:443/ with proxy=DIRECT 
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source) 
    at sun.plugin.PluginURLJarFileCallBack.connect(Unknown Source) 
    at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source) 
    at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source) 
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source) 
    at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source) 
    at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.EOFException: SSL peer shut down incorrectly 
    at sun.security.ssl.InputRecord.read(Unknown Source) 
    ... 42 more 
network: Cache entry not found [url: https://www.example.com/test.jar, version: null] 
network: Connecting https://www.example.com/test.jar with proxy=DIRECT 
network: Connecting http://www.example.com:443/ with proxy=DIRECT 
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source) 
    at sun.plugin.PluginURLJarFileCallBack.connect(Unknown Source) 
    at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source) 
    at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source) 
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source) 
    at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source) 
    at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source) 
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$800(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source) 
    at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source) 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.EOFException: SSL peer shut down incorrectly 
    at sun.security.ssl.InputRecord.read(Unknown Source) 
    ... 40 more 
network: Cache entry not found [url: https://www.example.com/Apps.class, version: null] 
network: Connecting https://www.example.com/Apps.class with proxy=DIRECT 
network: Connecting http://www.example.com:443/ with proxy=DIRECT 
network: Cache entry not found [url: https://www.example.com/Apps/class.class, version: null] 
network: Connecting https://www.example.com/Apps/class.class with proxy=DIRECT 
network: Connecting http://www.example.com:443/ with proxy=DIRECT 
java.lang.ClassNotFoundException: Apps.class 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
basic: load: class Apps.class not found. 
java.lang.ClassNotFoundException: Apps.class 
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Ignored exception: java.lang.ClassNotFoundException: Apps.class 
basic: Dialog type is not candidate for embedding 
security: Reset deny session certificate store 
basic: Removed progress listener: [email protected] 
security: Reset deny session certificate store* 

, 나는 우리는이 같은 문제가 발생하는 간단한 애플릿에게

import java.applet.*; 
import java.awt.*; 

public class Apps extends Applet{ 

    public void paint(Graphics g){ 
     g.drawString("Welcome in Java Applet.",40,20); 
    } 
} 

답변

1

을 사용하고 있습니다. 이것이 Java가 SSL 용 TLS 1.2를 구현 한 방식의 버그라고 생각합니다.

설명서에 따르면 https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls에 따르면 TLS 1.2를 사용하면 이전 버전과의 역 호환이 가능하다고 주장합니다.

그러나이 경우는 아닙니다. TLS 1.2가 비활성화되면 더 이상 "핸드 셰이크 중 원격 호스트 연결이 닫힘"오류가 발생하지 않습니다.

TLS 1.2 지원은 Java 제어판의 고급 설정에서 해제 할 수 있습니다.

이 작업이 완료되면 애플릿이 작동합니다.

1

우리의 경우 우리는 같은 예외를 받고 있습니다. 그러나 JAVA1.6 1.7 우리의 환경 모두에 대해 다음되면서 : 배포 된 웹 응용 프로그램과

  • jbossAS5.1하고 웹 응용 프로그램
  • 아파치 웹 server2.2.1 요구하는 클라이언트 인증서의 한 애플릿 (자기 를 클라이언트 측 모질라 및 수입 클라이언트 인증서와 탐험가, 수입 클라이언트 인증서 JRE 제어판에서

우리가 DISABL와 JRE 에

  • ) 체결 SSL2 클라이언트 hello 형식으로 SSL3 및 TLS1.2를 사용하지 않도록 설정했습니다. TLS1.0 및 TLS1.1 만 사용하도록 설정하면 그 이후 모든 것이 정상적으로 작동합니다.