Java可以连接到通配符ssl

我们希望购买通配符SSL证书,因为我们有很多子域名。 但是我不知道Java是否信任通配符证书。 当人们通过SSL连接到我们的API时,我们迫使我们与之通信的所有第三方将我们的SSL证书添加到他们的本地信任库中是不够的。

目前,我面临着从java受信任发行者购买通配符证书或每个子域购买多个证书的困境。

其他语言也有信任库吗? 如果是这样,任何人都知道通配符证书是否也适用于它们。

Sun JSSE中的默认实现不支持通配符。 您需要编写自己的X509TrustManager来处理通配符。

但是,Java支持自Java 5以来的SAN(主题备用名称)。如果名称少于20个,则可以为所有这些名称获取一个证书。 它可能比通配符证书便宜。

我用java 6尝试过这个。

它似乎工作正常。 我已经成功地从具有通配符SSL证书的文件中读取标题和正文内容。

package com.example.test; import java.io.DataInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class SSLTEST { public static void main(String[] args) { try { URL url = new URL("https://test.example.com/robots.txt"); URLConnection connection = null; try { connection = url.openConnection(); } catch (IOException e) { e.printStackTrace(); } Map> fields = connection.getHeaderFields(); Iterator>> headerIterator = fields.entrySet().iterator(); System.out.println("HEADERS"); System.out.println("-------------------------------"); while (headerIterator.hasNext()){ Entry> header = headerIterator.next(); System.out.println(header.getKey()+" :"); Iterator valueIterator = header.getValue().iterator(); while (valueIterator.hasNext()){ System.out.println("\t"+valueIterator.next()); } } String inputLine; DataInputStream input = new DataInputStream(connection.getInputStream()); System.out.println("BODY CONTENT"); System.out.println("-------------------------------"); while ((inputLine = input.readLine()) != null) { System.out.println(inputLine); } } catch (MalformedURLException e) { System.err.println(e); } catch (IOException e) { e.printStackTrace(); } } } 

编辑我刚刚收到确认,这适用于java 1.5