Tag: sslhandshakeexception

将“jsse.enableSNIExtension”设置为false会带来什么安全后果?

我目前有一个应用程序,可以向很多URL发出HTTP post请求。 某些连接失败,出现以下exception。 线程“main”中的exceptionjavax.net.ssl.SSLProtocolException:握手警报:sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1410)的sunrecognized_name,位于sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java: 2004)sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113)at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java) :1391)在sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)sun.net.www.protocol的sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)。 https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)at com.amazon.cba.iopn.test.MainTest.connectWithFallbackIfRequired(MainTest。 java:246)at com.amazon.cba.iopn.test.MainTest.createHttpConnection(MainTest.java:201) at com.amazon.cba.iopn.test.MainTest.processLine(MainTest.java:105)at com.amazon.cba.iopn.test.MainTest.main(MainTest.java:99) 我从网上读到其他文章后发现,这是服务器配置的问题。 响应中的服务器抛出一个警告,Java将其视为exception。 解决方法是将jsse.enableSNIExtension设置为“ false ”。 如果将jsse.enableSNIExtension系统属性设置为false ,则客户端暴露的安全风险是什么? PS:我们尝试通过HTTPS连接的所有url。 因此,将有证书validation。

接受Java中的证书

我在通过Java与HTTPS站点交互时遇到问题。 每次程序运行时,我的程序都会使用一个带有不受信任证书的URL。 该程序必须在多个系统上运行。 目前,我有以下内容: public class A{ HostnameVerifier hv = new HostnameVerifier(){ public boolean verify(String urlHostName, SSLSession session){ return true; } }; HttpsURLConnection.setDefaultHostnameVerifier(hv); javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM(); trustAllCerts[0] = tm; javax.net.ssl.SSLContext sc = null; try { sc = javax.net.ssl.SSLContext.getInstance(“SSL”); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } try { sc.init(null, […]

Java中的密钥SSL套接字连接

我正在加密服务器和客户端之间的TCP连接。 在研究和测试过程中,我倾向于使用密钥加密。 我的问题是我找不到任何有关如何实现此function的教程。 我发现的教程围绕一次性https请求,我需要的只是一个SSL Socket。 我到目前为止编写的代码如下。 我几乎可以肯定它需要扩展,我只是不知道如何。 任何帮助表示赞赏。 private ServerSocketFactory factory; private SSLServerSocket serverSocket; factory = SSLServerSocketFactory.getDefault(); serverSocket = (SSLServerSocket) factory.createServerSocket( ); 用于接受客户端连接的服务器代码 SSLSocket socket = (SSLSocket) serverSocket.accept(); socket.startHandshake(); 我只是不知道如何实际握手。 参考: http : //docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html

如何使Java 6与“SSL对等关闭不正确”的SSL连接失败,成功与Java 7一样?

我看到运行Java 6的客户端的SSL连接失败,例外情况如下: Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:882) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133) … 35 more Caused by: java.io.EOFException: SSL peer shut down incorrectly at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:462) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:863) … 41 more 该服务器是一个基于Tomcat 7的应用程序,在Java 7,Linux和Amazon EC2上运行,这是值得的。 我已经找到了很多关于可能的casues的建议,包括偶然连接到非SSL端口等等。我相信我已经把它全部排除了,主要是因为完全相同的客户端在运行Java 7时没有任何变化 。 (两种情况下都是OS X.) 下面我将介绍Java 6的调试输出和Java 7的SSL连接过程。 […]

如何通过Java中的代理发送HTTPS请求?

我正在尝试使用HttpsUrlConnection类向服务器发送请求。 服务器有证书问题,所以我设置了一个信任所有东西的TrustManager,以及一个同样宽松的主机名validation器。 当我直接提出请求时,这个管理器工作正常,但是当我通过代理发送请求时似乎根本没有使用它。 我设置我的代理设置如下: Properties systemProperties = System.getProperties(); systemProperties.setProperty( “http.proxyHost”, “proxyserver” ); systemProperties.setProperty( “http.proxyPort”, “8080” ); systemProperties.setProperty( “https.proxyHost”, “proxyserver” ); systemProperties.setProperty( “https.proxyPort”, “8080” ); 默认SSLSocketFactory的TrustManager设置如下: SSLContext sslContext = SSLContext.getInstance( “SSL” ); // set up a TrustManager that trusts everything sslContext.init( null, new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public […]

通过HTTPS / SSL通过自己的Java客户端连接的问题

我正在尝试与trackobot.com建立连接以接收一些JSON数据。 服务器仅允许通过HTTPS / SSL进行连接。 这是代码: java.lang.System.setProperty(“https.protocols”, “TLSv1,TLSv1.1,TLSv1.2”); URL url = new URL(“https://trackobot.com/profile/history.json?username=USER&token=TOCKEN”); InputStream is = url.openStream(); JsonParser parser = Json.createParser(is); openSteam抛出javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我阅读了几篇与类似问题相关的post,但这些建议都没有帮助。 相应的证书在我的信任库中。 当我尝试连接到例如google.com时,没有错误。 所以,问题似乎是在我试图连接的服务器的握手特定中。 我使用-Djavax.net.debug = ssl运行我的代码返回: keyStore is : keyStore type is : jks keyStore provider is : init keystore init keymanager of type SunX509 trustStore is: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts trustStore type is : jks […]