Java中请求HTTPS加密的源代码

import java.io.*;
import java.net.
*;
import java.security.
*;
import java.security.cert.
*;
import java.util.
*;
import javax.net.ssl.
*;

public class HttpsTest {
    
// We would never hardcode this literal in a real system,
    
// this is only for this article.
    private String url = "https://localhost/";

    
// Create an anonymous class to trust all certificates.
    
// This is bad style, you should create a separate class.
    private X509TrustManager xtm = new X509TrustManager() {
        
public void checkClientTrusted(X509Certificate[] chain, String authType) {}

            
public void checkServerTrusted(X509Certificate[] chain, String authType) {
                System.
out.println("cert: " + chain[0].toString() + ", authType: " + authType);
            }

            
public X509Certificate[] getAcceptedIssuers() {
                
return null;
            }
    }; 

    
// Create an class to trust all hosts
    private HostnameVerifier hnv = new HostnameVerifier() {
        
public boolean verify(String hostname, SSLSession session) {
            System.
out.println("hostname: " + hostname);
            
return true;
        }
    }; 

    
// In this function we configure our system with a less stringent
    
// hostname verifier and X509 trust manager.  This code is
    
// executed once, and calls the static methods of HttpsURLConnection
    public HttpsTest() {
        
// Initialize the TLS SSLContext with
        
// our TrustManager
        SSLContext sslContext = null;

        
try {
            sslContext 
= SSLContext.getInstance("TLS");
            X509TrustManager[] xtmArray 
= new X509TrustManager[] { xtm };
            sslContext.init(
null, xtmArray, new java.security.SecureRandom());
        } 
catch(GeneralSecurityException gse) {
            
// Print out some error message and deal with this exception
        }

        
// Set the default SocketFactory and HostnameVerifier
        
// for javax.net.ssl.HttpsURLConnection
        if(sslContext != null) {
            HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
        }

        HttpsURLConnection.setDefaultHostnameVerifier(hnv);
    }

    
// This function is called periodically, the important thing
    
// to note here is that there is no special code that needs to
    
// be added to deal with a "HTTPS" URL.  All of the trust
    
// management, verification, is handled by the HttpsURLConnection.
    public void run() {
        
try {
            URLConnection urlCon 
= (new URL(url)).openConnection();
            BufferedReader 
in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
            String line;

            
while((line = in.readLine()) != null) {
                System.
out.println(line);
            }

        
//  Whatever we want to do with these quotes
        } catch(MalformedURLException mue) {
            mue.printStackTrace();
        } 
catch(IOException ioe) {
            ioe.printStackTrace();
        } 
catch(Exception e) {
            e.printStackTrace();
        }
    }

    
public static void main(String[] args) {
        HttpsTest httpsTest 
= new HttpsTest();
        httpsTest.run();
    }
}

posted on 2005-06-13 13:26 毒菇求Buy 阅读(1604) 评论(1)  编辑 收藏 引用 所属分类: HTTPJAVA

评论

# re: Java中请求HTTPS加密的源代码 2005-06-13 13:32 毒菇求Buy

使用java.security连https比较麻烦,可使用jakata的commons-httpclient,方便的多,而且src包中有sample,更易学。  回复  更多评论   

只有注册用户登录后才能发表评论。
<2005年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

常用链接

留言簿(7)

随笔分类(133)

随笔档案(111)

文章分类(65)

文章档案(53)

相册

收藏夹(30)

BLOG

Book store

Graphics Design

搜索

最新评论

阅读排行榜

评论排行榜