2009-11-26 41 views
20

Tôi nhận được lỗi 'tên máy chủ HTTPS sai:' khi cố gắng kết nối với máy chủ bằng https. url của tôi trông giống như sauTên máy chủ HTTPS sai: phải là <sub.domain.com>. Điều gì gây ra điều này?

https://sub.domain.com/tamnode/webapps/app/servlet. 

tôi kết nối bằng cách sử dụng đoạn mã sau

// Create a URLConnection object for a URL 
    URL url = new URL(requestedURL); 
    HttpURLConnection.setFollowRedirects(false); 

    // connect 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setDoOutput(true); 
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$ 

    OutputStreamWriter wr = new OutputStreamWriter(connection 
      .getOutputStream()); 

nhưng sau đó nhận được một lỗi

IOException: HTTPS hostname wrong: should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing 
    .... 

Đây là mã mà đã làm việc trong quá khứ nhưng không còn . Đã có một số thay đổi đối với kiến ​​trúc hệ thống nhưng tôi cần phải nhận được nhiều dữ liệu hơn trước khi tiếp cận những người chịu trách nhiệm.

Điều gì có thể gây ra lỗi này? Tôi có thể tắt kiểm tra URLSpoofing không?

Trả lời

16

Dường như chứng chỉ SSL cho domain.com đã được cấp cho sub.domain.com. Hoặc, nhiều khả năng, domain.com đã được đổi tên thành sub.domain.com mà không cập nhật chứng chỉ SSL là gì.

13

cletus là đúng về nguyên nhân có thể xảy ra.

Có cách tắt tính năng kiểm tra giả mạo.

Bạn có thể tạo đối tượng triển khai HostnameVerifier trả về đúng trong nhiều trường hợp hơn 'bình thường'.

Bạn sẽ thay thế HostnameVerifier mặc định bằng cách gọi setHostnameVerifier trên đối tượng kết nối trong mã trong câu hỏi.

Câu trả lời này được lấy cảm hứng từ ': http://www.java-samples.com/showtutorial.php?tutorialid=211

tôi thấy rằng liên kết với truy vấn này: http://www.google.com/search?q=https+hostname+wrong+should+be

hơn Một lưu ý: suy nghĩ hai lần trước khi bạn làm điều này. Bạn sẽ tạo ra một điểm yếu có thể khai thác trong bảo mật giữa các thành phần máy khách và máy chủ của bạn.

+0

2 liên kết oracle bị hỏng –

+0

@ stuart-siegler: cảm ơn những người đứng đầu về điều đó. – vkraemer

+0

Bí danh máy chủ lừa đảo đã làm việc cho tôi – nilesh

8

Tôi nhận ngoại lệ này - java.io.IOException: HTTPS hostname wrong: should be <localhost>.

Giải pháp của tôi là tôi đã thay đổi chứng chỉ tự ký và tạo CN=localhost.

HOẶC

Thêm chứng chỉ của bạn miền tên cn=<domain-name> đến file host của bạn có thể đặt tại c:/windows/system32/drivers/etc/...

+0

Cảm ơn. Làm CN = localhost làm việc như một sự quyến rũ! – siddagrl

3

Thị giải quyết vấn đề của tôi

static { 
    //for localhost testing only 
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
    new javax.net.ssl.HostnameVerifier(){ 

      @Override 
     public boolean verify(String hostname, 
       javax.net.ssl.SSLSession sslSession) { 
      if (hostname.equals("your_domain")) { 
       return true; 
      } 
      return false; 
     } 
    }); 
} 
+0

Bạn không nên viết mã 'chỉ để thử nghiệm'. Chắc chắn nó rò rỉ vào sản xuất và thỏa hiệp an ninh của hệ thống. – EJP

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