上次寫了如何配置smack和openfire之間SSL的配置。接着咱們就想把SSL的工做推到F5上去作。這樣的好處不言而喻。java
F5配置SSL有不少方法了:.net
1) 用本身籤的證書和keycode
2) 用openssl籤的證書和key,而後導入到F5xml
3) 掏錢買ip
我用的是第一種。 具體的F5操做就不貼了。建立證書選擇「self」。ssl
F5建立完畢後,把生成的證書導出到客戶端的目錄下。get
客戶端的配置以下:input
1)用keytool生成keystore文件openssl
2)把F5的證書用keytool導入到client的truststore文件裏。it
而後就在client的代碼。這段代碼參考了網上的一個實現。不記得網址了。若是有人看着眼熟或者就是你寫的。能夠告訴我。我會把你的鏈接貼上。
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.KeyStore; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; import javax.net.ssl.TrustManagerFactory; public class SSLSocketExampel { private static final String DEFAULT_HOST = "your_ip_addr"; private static final int DEFAULT_PORT = 5222; private static final String CLIENT_KEY_STORE_PASSWORD = "123456"; private static final String CLIENT_TRUST_KEY_STORE_PASSWORD = "123456"; private SSLSocket sslSocket; /** * 啓動客戶端程序 * * @param args */ public static void main(String[] args) { SSLSocketExampel client = new SSLSocketExampel(); client.init(); client.process(); } public void process() { if (sslSocket == null) { System.out.println("ERROR"); return; } try { InputStream input = sslSocket.getInputStream(); OutputStream output = sslSocket.getOutputStream(); BufferedInputStream bis = new BufferedInputStream(input); BufferedOutputStream bos = new BufferedOutputStream(output); String content = "<stream:stream to=\"your_ip_addr\" " + "xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">" + "</stream:stream>"; bos.write(content.getBytes()); bos.flush(); byte[] buffer = new byte[1024]; bis.read(buffer); System.out.println(new String(buffer)); sslSocket.close(); } catch (IOException e) { System.out.println(e); } } public void init() { try { SSLContext ctx = SSLContext.getInstance("TLS"); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); KeyStore ks = KeyStore.getInstance("JKS"); KeyStore tks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("client.keystore"), CLIENT_KEY_STORE_PASSWORD.toCharArray()); tks.load(new FileInputStream("client.truststore"), CLIENT_TRUST_KEY_STORE_PASSWORD.toCharArray()); kmf.init(ks, CLIENT_KEY_STORE_PASSWORD.toCharArray()); tmf.init(tks); ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); sslSocket = (SSLSocket) ctx.getSocketFactory().createSocket(DEFAULT_HOST, DEFAULT_PORT); } catch (Exception e) { System.out.println(e); } } }