我們希望購買通配符SSL證書,因爲我們有很多子域。但是我不知道Java是否信任通配符證書。當人們通過SSL連接到我們的API時,我們不足以迫使我們通信的所有第三方將我們的SSL證書添加到他們的本地信任庫中。Java可以連接到通配符ssl
目前,我面臨着從java可信任頒發者購買通配符證書或每個子域購買多個證書的兩難困境。
其他語言是否也有信任存儲?如果有的話,是否有人知道通配符證書是否也適用於他們。
我們希望購買通配符SSL證書,因爲我們有很多子域。但是我不知道Java是否信任通配符證書。當人們通過SSL連接到我們的API時,我們不足以迫使我們通信的所有第三方將我們的SSL證書添加到他們的本地信任庫中。Java可以連接到通配符ssl
目前,我面臨着從java可信任頒發者購買通配符證書或每個子域購買多個證書的兩難困境。
其他語言是否也有信任存儲?如果有的話,是否有人知道通配符證書是否也適用於他們。
我用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<String, List<String>> fields = connection.getHeaderFields();
Iterator<Entry<String, List<String>>> headerIterator = fields.entrySet().iterator();
System.out.println("HEADERS");
System.out.println("-------------------------------");
while (headerIterator.hasNext()){
Entry<String, List<String>> header = headerIterator.next();
System.out.println(header.getKey()+" :");
Iterator<String> 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的
但是,該代碼應該與原始問題的通配符SSL證書一起使用?當我在帶有通配符證書的服務器上嘗試此代碼時,我得到一個SSLHandshakeException,因爲驗證路徑失敗。 – 2011-02-21 08:10:58
@Petri Pellinen它使用verisign證書爲我工作了一個有效的域。使用自簽名證書可能會少一些。當使用舊版本的Java 6時,現代證書也需要中間證書。(根據我的測試) – Wes 2011-02-21 13:07:04
感謝您的澄清 – 2011-03-11 09:47:34
Sun的JSSE中的默認實現不支持通配符。您需要編寫自己的X509TrustManager來處理通配符。
但是,自從Java 5以來,Java支持SAN(主題備選名稱)。如果您的名稱少於20個,您可以爲它們獲取一個證書。它可能比通配證書更便宜。
它的一個不錯的一條信息,這是對我很有用。 – Allen 2012-02-17 03:36:59
通配符ssl與信任所有證書完全不一樣。通配符SSL是* .domain.com。這個問題也比其他問題大4歲。如果你願意,可以關閉它,但它不是一回事。 – Wes 2014-10-24 07:56:01