001package org.apache.commons.ssl; 002 003import javax.net.SocketFactory; 004import java.io.IOException; 005import java.io.InputStream; 006import java.io.OutputStream; 007import java.net.Socket; 008import java.security.GeneralSecurityException; 009 010public class CRLSocket extends SSLClient { 011 private final static CRLSocket secureInstance; 012 private final static CRLSocket plainInstance; 013 014 static { 015 CRLSocket sf1 = null, sf2 = null; 016 try { 017 sf1 = new CRLSocket(); 018 sf2 = new CRLSocket(); 019 sf2.setIsSecure(false); 020 } 021 catch (Exception e) { 022 System.out.println("could not create CRLSocket: " + e); 023 e.printStackTrace(); 024 } 025 finally { 026 secureInstance = sf1; 027 plainInstance = sf2; 028 } 029 } 030 031 private CRLSocket() throws GeneralSecurityException, IOException { 032 super(); 033 034 // For now we setup the usual trust infrastructure, but consumers 035 // are encouraged to call getInstance().addTrustMaterial() or 036 // getInstance().setTrustMaterial() to customize the trust. 037 if (TrustMaterial.JSSE_CACERTS != null) { 038 setTrustMaterial(TrustMaterial.JSSE_CACERTS); 039 } else { 040 setTrustMaterial(TrustMaterial.CACERTS); 041 } 042 setConnectTimeout(5000); 043 setSoTimeout(5000); 044 setCheckCRL(false); 045 } 046 047 public static SocketFactory getDefault() { 048 return getSecureInstance(); 049 } 050 051 public static CRLSocket getSecureInstance() { 052 return secureInstance; 053 } 054 055 public static CRLSocket getPlainInstance() { 056 return plainInstance; 057 } 058 059 public static void main(String[] args) throws Exception { 060 String host = args[0]; 061 String port = args[1]; 062 String hello 063 = "HEAD / HTTP/1.1\r\n" 064 + "Host:" + host + ":" + port + "\r\n\r\n"; 065 byte[] helloBytes = hello.getBytes("UTF-8"); 066 067 System.out.println("About to getInstance() "); 068 CRLSocket sf = getPlainInstance(); 069 long now = System.currentTimeMillis(); 070 System.out.println("About to create socket: [" + host + ":" + port + "]"); 071 Socket s = sf.createSocket(host, Integer.parseInt(port)); 072 long delay = System.currentTimeMillis() - now; 073 System.out.println("Created socket! took " + delay + "ms "); 074 OutputStream out = s.getOutputStream(); 075 out.write(helloBytes); 076 out.flush(); 077 078 System.out.println("\n" + new String(helloBytes, "UTF-8")); 079 080 InputStream in = s.getInputStream(); 081 int c = in.read(); 082 StringBuffer buf = new StringBuffer(); 083 System.out.println("Reading: "); 084 System.out.println("================================================================================"); 085 while (c >= 0) { 086 byte b = (byte) c; 087 buf.append((char) b); 088 System.out.print((char) b); 089 if (-1 == buf.toString().indexOf("\r\n\r\n")) { 090 c = in.read(); 091 } else { 092 break; 093 } 094 } 095 in.close(); 096 out.close(); 097 s.close(); 098 } 099 100}