http://www-900.ibm.com/developerWorks/java/jw-tips/tip096/index.shtml

解决方案 »

  1.   

    java.sun.com/products/jsse
    has examples.
      

  2.   

    to gdsean(摇滚java):谢谢你的解答,那个文章我看过了。我感觉那好像是针对jdk1.3以前的版本写的。我现在用的是jdk1.4beta3里面已经有了javax.net.*和javax.net.ssl.*,也就是说已经有了HttpsURLConnection这个类。to skyyoung(路人甲):我上次问你时你已经告诉我这个网址了,我也去看了,但是还没有摸着头绪。另附代码如下:希望两位朋友能帮我看看。
    import java.net.*;
    import java.io.*;
    import javax.net.ssl.*;
    import java.security.Security;public class TestHttps 
    {
        public static void main(String args[])
        {
    URL destURL;
            HttpsURLConnection urlConn;
            String request;
            try {
                System.setProperty("java.protocol.handler.pkgs",
                                      "com.sun.net.ssl.internal.www.protocol");
    // Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    System.setProperty("javax.net.ssl.trustStore","MyCacertsFile");
    destURL = new URL("https://localhost:8443/examples/jsp/checkbox/checkresult.jsp");
    urlConn = (HttpsURLConnection)destURL.openConnection();
    request="fruit=apples&fruit=oranges";
                urlConn.setDoOutput(true);    
                urlConn.setDoInput(true);     
                urlConn.setUseCaches(false);  
    urlConn.setAllowUserInteraction(true);
                urlConn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
                urlConn.setRequestProperty("Content-length", ""+request.length());
                DataOutputStream outStream = new DataOutputStream(urlConn.getOutputStream());
                outStream.writeBytes(request);
    outStream.close();
    try{
                DataInputStream inStream = new DataInputStream(urlConn.getInputStream());
    System.out.println("Print HeaderFile:");
                int i=0;
                while(urlConn.getHeaderField(i)!=null){
                   System.out.println(urlConn.getHeaderFieldKey(i)+" "+urlConn.getHeaderField(i));
      i++;
                }
    System.out.println("user-agent= "+urlConn.getHeaderField("User-Agent"));
    System.out.println("Proxy-Authorization= "+urlConn.getHeaderField("Proxy02"));
    System.out.println("method="+urlConn.getRequestMethod());
    System.out.println(""+urlConn.getResponseCode());            int ch;
                while ((ch = inStream.read()) >= 0) {
                    System.out.print((char) ch);            }
                inStream.close();
                }catch(Exception e){System.out.println("Error"+"\n"+e);}
                }catch (Exception e) {

                e.printStackTrace();
            }
        
        
        }
        
    }这段代码也有异常抛出:
    java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl
    at TestHttps.main(TestHttps.java:19)
      

  3.   

    to gdsean(摇滚java):这个文章我已经看过了,但是我感觉它是针对jdk1.3以前的版本说的。因为我现在用的jdk1.4beta3版里已经增加了javax.net.*和javax.net.ssl.*等类包。
    也就是说,已经有了HttpsURLConnection这个类,可以用它来建立HTTPS的连接。to skyyoung(路人甲):这个网址在你上次给我解答时我就去看了。现在我也在看,只是有
    点莫不着头绪。希望两位朋友能在帮我看看。附调试代码如下:
    import java.net.*;
    import java.io.*;
    import javax.net.ssl.*;
    import java.security.Security;public class TestHttps 
    {
        public static void main(String args[])
        {
    URL destURL;
            HttpsURLConnection urlConn;
            String request;
            try {
                System.setProperty("java.protocol.handler.pkgs",
                                      "com.sun.net.ssl.internal.www.protocol");
    // Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    System.setProperty("javax.net.ssl.trustStore","MyCacertsFile");
    destURL = new URL("https://localhost:8443/examples/jsp/checkbox/checkresult.jsp");
    urlConn = (HttpsURLConnection)destURL.openConnection();
    request="fruit=apples&fruit=oranges";
                urlConn.setDoOutput(true);    
                urlConn.setDoInput(true);     
                urlConn.setUseCaches(false);  
    urlConn.setAllowUserInteraction(true);
                urlConn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
                urlConn.setRequestProperty("Content-length", ""+request.length());
                DataOutputStream outStream = new DataOutputStream(urlConn.getOutputStream());
                outStream.writeBytes(request);
    outStream.close();
    try{
                DataInputStream inStream = new DataInputStream(urlConn.getInputStream());
    System.out.println("Print HeaderFile:");
                int i=0;
                while(urlConn.getHeaderField(i)!=null){
                   System.out.println(urlConn.getHeaderFieldKey(i)+" "+urlConn.getHeaderField(i));
      i++;
                }
    System.out.println("user-agent= "+urlConn.getHeaderField("User-Agent"));
    System.out.println("Proxy-Authorization= "+urlConn.getHeaderField("Proxy02"));
    System.out.println("method="+urlConn.getRequestMethod());
    System.out.println(""+urlConn.getResponseCode());            int ch;
                while ((ch = inStream.read()) >= 0) {
                    System.out.print((char) ch);            }
                inStream.close();
                }catch(Exception e){System.out.println("Error"+"\n"+e);}
                }catch (Exception e) {

                e.printStackTrace();
            }
        
        
        }
        
    }这段代码仍有异常抛出:
    java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl
    at TestHttps.main(TestHttps.java:19)
      

  4.   

    呵呵,我运行你上面的代码的结果是:
    java.net.SocketException: Default SSL context init failed: null
            at javax.net.ssl.DefaultSSLSocketFactory.createSocket([DashoPro-V1.2-120
    198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.doConnect([Da
    shoPro-V1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.NetworkClient.openServer(
    [DashoPro-V1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpClient.d([DashoPro-V1
    .2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpClient.<init>([DashoP
    ro-V1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.<init>([Dasho
    Pro-V1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V
    1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V
    1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.connec
    t([DashoPro-V1.2-120198])
            at com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.getOut
    putStream([DashoPro-V1.2-120198])
            at TestHttps.main(TestHttps.java:27)
      

  5.   

    to cherami(cherami):
    可能是因为我的那段代码是连接我本机的tomcat吧。下面的代码是连接https://www.sun.com的。你再帮我看看。
    import java.net.*;
    import java.io.*;
    import javax.net.ssl.*;public class TestHttps{
        private String httpsURL;
        private URL destURL;
        private HttpsURLConnection urlConn;
        private String request;    public void connectURL(){
            try{
                destURL = new URL(httpsURL);
       urlConn = (HttpsURLConnection)destURL.openConnection();
            }catch(Exception e){
                System.out.println("Connect URL Error :"+"\n"+e);
            }
        }    public void doResponse(){
            try{
                DataInputStream inStream = new DataInputStream(urlConn.getInputStream());
       System.out.println("Print HeaderFile:");
                int i=0;
                while(urlConn.getHeaderField(i)!=null){
                    System.out.println(urlConn.getHeaderFieldKey(i)+" "+urlConn.getHeaderField(i));
           i++;
                }
       System.out.println("method="+urlConn.getRequestMethod());
       System.out.println(""+urlConn.getResponseCode());    int ch;
                while ((ch = inStream.read()) >= 0) {
                    System.out.print((char) ch);
                }
                inStream.close();
            }catch(Exception e){
                System.out.println("Do Response Error"+"\n"+e);
            }
        }    public static void main(String args[]){        TestHttps th = new TestHttps();
            th.httpsURL="https://www.sun.com";
            th.connectURL();
            th.doResponse();
        }
    }
      

  6.   

    这儿有很详细的资料
    http://www.onjava.com/pub/a/onjava/2001/05/03/java_security.html
      

  7.   

    我没有遇到这样的错误,我这里是可以用get post 调用https//*.jsp的!