相关疑难解决方法(0)

SSL握手警报:自升级到Java 1.7.0以来unrecognized_name错误

我今天从Java 1.6升级到Java 1.7.从那时起,当我尝试通过SSL建立与Web服务器的连接时发生错误:

javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name
    at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1288)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1904)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1027)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1262)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1289)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1273)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at java.net.URL.openStream(URL.java:1035)
Run Code Online (Sandbox Code Playgroud)

这是代码:

SAXBuilder builder = new SAXBuilder();
Document document = null;

try {
    url = new URL(https://some url);
    document = (Document) builder.build(url.openStream());
} catch (NoSuchAlgorithmException ex) {
    Logger.getLogger(DownloadLoadiciousComputer.class.getName()).log(Level.SEVERE, null, ex);  
}
Run Code Online (Sandbox Code Playgroud)

它只是一个测试项目,这就是为什么我允许和使用不受信任的证书与代码:

TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, …
Run Code Online (Sandbox Code Playgroud)

java ssl

222
推荐指数
9
解决办法
29万
查看次数

Java客户端中具有SNI的TLS

关于使用传统SSL创建的IP到域映射问题,NHIN Direct安全和信任工作组正在进行讨论.如果HISP(由NHIN Direct定义)想要为提供商托管数千个NHIN Direct"健康域名",那么必须为这些域中的每个域购买IP将是"人为膨胀的成本".

由于Apache和OpenSSL最近发布了支持SNI扩展的TLS,因此可以使用SNI作为服务器端此问题的解决方案.但是,如果我们决定允许 NHINDirect传输层的服务器实现支持TLS + SNI,那么我们必须要求所有客户端也支持SNI.默认情况下,基于OpenSSL的客户端应该这样做,如果您的给定编程语言SSL实现不支持SNI,我们总是可以实现TLS + SNI感知客户端代理.看来使用OpenJDK的本机Java应用程序还不支持SNI,但我无法从该项目中得到直接的答案.我知道有OpenSSL Java库可用,但我不知道这是否可行.

你能否给我一个关于TLS + SNI支持Java客户端的"最新技术"总结?我需要一个Java实现者的观点.

java ssl client-side

8
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×2

ssl ×2

client-side ×1