2011년 9월 1일 목요일

java ssl 증명서 없는 rss 가지고 오기.

import java.io.*;
import java.net.*;
import javax.net.ssl.*;

public class testClass {
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String urlStr = "https://car.jp.msn.com/rss/business.aspx";
        try{
            URL url = new URL(urlStr);
            HttpURLConnection http = null;
           
            if (url.getProtocol().toLowerCase().equals("https")) {
                trustAllHosts();
                HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
                https.setHostnameVerifier(DO_NOT_VERIFY);
                http = https;
            } else {
                http = (HttpURLConnection) url.openConnection();
            }
           
            BufferedInputStream bis = new BufferedInputStream(http.getInputStream());
            byte[] buffer = new byte[2048];
            int length = 0;
            byte[] contentBytes = null;
            ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
            while ((length = bis.read(buffer)) >= 0) {
                    baos.write(buffer, 0, length);
            }
           
            contentBytes = baos.toByteArray();
            String result = new String(contentBytes, "utf-8");       
           
            System.out.println(result);
           
            bis.close();
            baos.close();
       
        }catch(Exception e) {
            e.printStackTrace();
        }
       
    }

    private static void trustAllHosts() {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new java.security.cert.X509Certificate[] {};
                }

                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                    // TODO Auto-generated method stub
                  
                }

                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                    // TODO Auto-generated method stub
                  
                }
        } };

        // Install the all-trusting trust manager
        try {
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection
                                .setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
  
    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };
}

jsp 소스 ssl증명서 없는 rss 가지고오기

<%@ page contentType = "text/html; charset=utf-8"%>
<%@ page import="java.io.*"  %>
<%@ page import="java.net.*"  %>
<%@ page import="javax.net.ssl.*" %>
<%
    // TODO Auto-generated method stub
    String urlStr = "https://car.jp.msn.com/rss/business.aspx";
    try{
        URL url = new URL(urlStr);
        HttpURLConnection http = null;
       
        if (url.getProtocol().toLowerCase().equals("https")) {
            trustAllHosts();
            HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
            https.setHostnameVerifier(DO_NOT_VERIFY);
            http = https;
        } else {
            http = (HttpURLConnection) url.openConnection();
        }
       
        BufferedInputStream bis = new BufferedInputStream(http.getInputStream());
        byte[] buffer = new byte[2048];
        int length = 0;
        byte[] contentBytes = null;
        ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
        while ((length = bis.read(buffer)) >= 0) {
                baos.write(buffer, 0, length);
        }
       
        contentBytes = baos.toByteArray();
        String result = new String(contentBytes, "utf-8");       
       
        System.out.println(result);
        request.setAttribute("msg", result);
        bis.close();
        baos.close();
   
    }catch(Exception e) {
        e.printStackTrace();
    }
%>
<%!
private static void trustAllHosts() {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[] {};
            }

            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType)
                    throws java.security.cert.CertificateException {
                // TODO Auto-generated method stub
              
            }

            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType)
                    throws java.security.cert.CertificateException {
                // TODO Auto-generated method stub
              
            }
    } };

    // Install the all-trusting trust manager
    try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection
                            .setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
            e.printStackTrace();
    }
}

final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};
%>
${msg}