2010-07-02 20 views
6

Chúng tôi muốn mua chứng chỉ SSL thẻ hoang dã vì chúng tôi có nhiều tên miền phụ. Tuy nhiên tôi không biết liệu Java có tin tưởng vào chứng chỉ thẻ hoang dã hay không. Khi mọi người kết nối với API của chúng tôi qua SSL, chúng tôi sẽ không đủ để buộc tất cả các bên thứ ba mà chúng tôi liên lạc với để thêm chứng chỉ SSL của chúng tôi vào cửa hàng tin cậy địa phương của họ.Java có thể kết nối với ký tự đại diện ssl

Hiện tại, tôi đang gặp phải tình huống khó xử để mua chứng chỉ ký tự đại diện từ nhà phát hành đáng tin cậy java hoặc mua nhiều chứng chỉ một cho mỗi miền phụ.

Các ngôn ngữ khác cũng có một truststore không? Nếu có thì có ai biết liệu chứng chỉ ký tự đại diện có hoạt động với chúng hay không.

+0

nó một mảnh tốt đẹp của thông tin và đó là hữu ích với tôi. – Allen

+1

ssl Wildcard không giống như tin tưởng tất cả các chứng chỉ. SSL ký tự đại diện là * .domain.com. Câu hỏi này cũng lớn hơn câu hỏi khác 4 năm. Đóng này nếu bạn muốn nhưng nó không giống nhau ở tất cả. – Wes

Trả lời

2

Tôi đã thử điều này với java 6.

Dường như hoạt động chính xác. Tôi đã đọc thành công tiêu đề và nội dung cơ thể từ một tệp có chứng chỉ SSL ký tự đại diện.

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(); 
     } 
    } 
} 

EDIT Tôi vừa mới nhận được xác nhận rằng đây hoạt động trên java 1,5

+0

Nhưng mã này có phải hoạt động với chứng chỉ SSL ký tự đại diện vốn là câu hỏi gốc không? Khi tôi thử mã này trên máy chủ có ký tự đại diện, tôi nhận được SSLHandshakeException vì đường dẫn xác thực không thành công. –

+1

@Petri Pellinen Nó làm việc cho một tên miền hợp lệ cho tôi với chứng chỉ verisign. Bạn có thể có ít may mắn hơn với chứng chỉ tự ký. Ngoài ra giấy chứng nhận hiện đại cần giấy chứng nhận trung gian khi sử dụng một phiên bản cũ của java 6. (Theo thử nghiệm của tôi) – Wes

+0

cảm ơn cho làm rõ –

6

Triển khai mặc định trong JSSE của Sun không hỗ trợ ký tự đại diện. Bạn cần phải viết X509TrustManager của riêng bạn để xử lý ký tự đại diện.

Tuy nhiên, Java hỗ trợ SAN (Subject Alternative Names) từ Java 5. Nếu bạn có ít hơn 20 tên, bạn có thể nhận được một chứng chỉ cho tất cả chúng. Nó có thể rẻ hơn một ký tự đại diện.

+0

Tôi đã suy nghĩ nhiều hơn về các bên bên ngoài kết nối với API của chúng tôi chứ không phải mã Java của chúng tôi kết nối với một tên miền phụ được bảo vệ bằng ký tự đại diện. Tôi sẽ thêm điều đó vào câu hỏi để đảm bảo rằng nó rõ ràng. – Wes

+0

Xác minh tên máy chủ không được thực hiện trong trình quản lý tin cậy. – Bruno

+0

Java definatly hỗ trợ chứng chỉ ký tự đại diện trong năm 2017 và thậm chí đã làm trong java 6 xem câu trả lời khác. – Wes

Các vấn đề liên quan