我今天从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) 关于使用传统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实现者的观点.