comparison src/org/tn5250j/framework/transport/SSL/SSLImplementation.java @ 8:3b760b39962a tn5250

adding tn5250 files
author Carl Byington <carl@five-ten-sg.com>
date Thu, 22 May 2014 15:41:35 -0700
parents e8d2a24e85c6
children 731e70088af0
comparison
equal deleted inserted replaced
7:3248b46f3973 8:3b760b39962a
35 import javax.net.ssl.SSLContext; 35 import javax.net.ssl.SSLContext;
36 import javax.net.ssl.SSLSocket; 36 import javax.net.ssl.SSLSocket;
37 import javax.net.ssl.TrustManager; 37 import javax.net.ssl.TrustManager;
38 import javax.net.ssl.TrustManagerFactory; 38 import javax.net.ssl.TrustManagerFactory;
39 import javax.net.ssl.X509TrustManager; 39 import javax.net.ssl.X509TrustManager;
40 import javax.swing.JOptionPane; 40
41 import com.five_ten_sg.connectbot.service.TerminalBridge;
42 import com.five_ten_sg.connectbot.service.TerminalManager;
41 43
42 import org.tn5250j.GlobalConfigure; 44 import org.tn5250j.GlobalConfigure;
43 import org.tn5250j.framework.transport.SSLInterface; 45 import org.tn5250j.framework.transport.SSLInterface;
44 import org.tn5250j.tools.logging.TN5250jLogFactory; 46 import org.tn5250j.tools.logging.TN5250jLogFactory;
45 import org.tn5250j.tools.logging.TN5250jLogger; 47 import org.tn5250j.tools.logging.TN5250jLogger;
47 /** 49 /**
48 * <p> 50 * <p>
49 * This class implements the SSLInterface and is used to create SSL socket 51 * This class implements the SSLInterface and is used to create SSL socket
50 * instances. 52 * instances.
51 * </p> 53 * </p>
52 * 54 *
53 * @author Stephen M. Kennedy <skennedy@tenthpowertech.com> 55 * @author Stephen M. Kennedy <skennedy@tenthpowertech.com>
54 * 56 *
55 */ 57 */
56 public class SSLImplementation implements SSLInterface, X509TrustManager { 58 public class SSLImplementation implements SSLInterface, X509TrustManager {
57 59
58 SSLContext sslContext = null; 60 SSLContext sslContext = null;
59 61
60 KeyStore userks = null; 62 KeyStore userks = null;
61 private String userKsPath; 63 private String userKsPath;
62 private char[] userksPassword = "changeit".toCharArray(); 64 private char[] userksPassword = "changeit".toCharArray();
63 65
66 TerminalBridge bridge = null;
67 TerminalManager manager = null;
68 String target = null; // destination:port
69
64 KeyManagerFactory userkmf = null; 70 KeyManagerFactory userkmf = null;
65 71
66 TrustManagerFactory usertmf = null; 72 TrustManagerFactory usertmf = null;
67 73
68 TrustManager[] userTrustManagers = null; 74 TrustManager[] userTrustManagers = null;
69 75
70 X509Certificate[] acceptedIssuers; 76 X509Certificate[] acceptedIssuers;
71 77
72 TN5250jLogger logger; 78 TN5250jLogger logger;
73 79
74 public SSLImplementation() { 80 public SSLImplementation(TerminalBridge bridge, TerminalManager manager) {
81 this.bridge = bridge;
82 this.manager = manager;
75 logger = TN5250jLogFactory.getLogger(getClass()); 83 logger = TN5250jLogFactory.getLogger(getClass());
76 } 84 }
77 85
78 public void init(String sslType) { 86 public void init(String sslType) {
79 try { 87 try {
105 public Socket createSSLSocket(String destination, int port) { 113 public Socket createSSLSocket(String destination, int port) {
106 if (sslContext == null) 114 if (sslContext == null)
107 throw new IllegalStateException("SSL Context Not Initialized"); 115 throw new IllegalStateException("SSL Context Not Initialized");
108 SSLSocket socket = null; 116 SSLSocket socket = null;
109 try { 117 try {
118 target = destination + ":" + String.valueOf(port);
110 socket = (SSLSocket) sslContext.getSocketFactory().createSocket( 119 socket = (SSLSocket) sslContext.getSocketFactory().createSocket(
111 destination, port); 120 destination, port);
112 } catch (Exception e) { 121 } catch (Exception e) {
113 logger.error("Error creating ssl socket [" + e.getMessage() + "]"); 122 logger.error("Error creating ssl socket [" + e.getMessage() + "]");
114 } 123 }
117 126
118 // X509TrustManager Methods 127 // X509TrustManager Methods
119 128
120 /* 129 /*
121 * (non-Javadoc) 130 * (non-Javadoc)
122 * 131 *
123 * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers() 132 * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
124 */ 133 */
125 public X509Certificate[] getAcceptedIssuers() { 134 public X509Certificate[] getAcceptedIssuers() {
126 return acceptedIssuers; 135 return acceptedIssuers;
127 } 136 }
128 137
129 /* 138 /*
130 * (non-Javadoc) 139 * (non-Javadoc)
131 * 140 *
132 * @see 141 * @see
133 * javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert. 142 * javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.
134 * X509Certificate[], java.lang.String) 143 * X509Certificate[], java.lang.String)
135 */ 144 */
136 public void checkClientTrusted(X509Certificate[] arg0, String arg1) 145 public void checkClientTrusted(X509Certificate[] arg0, String arg1)
139 148
140 } 149 }
141 150
142 /* 151 /*
143 * (non-Javadoc) 152 * (non-Javadoc)
144 * 153 *
145 * @see 154 * @see
146 * javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert. 155 * javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.
147 * X509Certificate[], java.lang.String) 156 * X509Certificate[], java.lang.String)
148 */ 157 */
149 public void checkServerTrusted(X509Certificate[] chain, String type) 158 public void checkServerTrusted(X509Certificate[] chain, String type)
179 certInfo = certInfo.concat("Subject DN: " 188 certInfo = certInfo.concat("Subject DN: "
180 + cert.getSubjectDN().getName() + "\n"); 189 + cert.getSubjectDN().getName() + "\n");
181 certInfo = certInfo.concat("Public Key: " 190 certInfo = certInfo.concat("Public Key: "
182 + cert.getPublicKey().getFormat() + "\n"); 191 + cert.getPublicKey().getFormat() + "\n");
183 192
184 int accept = JOptionPane 193 bridge.outputLine(manager.res.getString(R.string.host_authenticity_warning, target));
185 .showConfirmDialog(null, certInfo, "Unknown Certificate - Do you accept it?", 194 bridge.outputLine(manager.res.getString(R.string.host_certificate, certInfo));
186 javax.swing.JOptionPane.YES_NO_OPTION); 195 Boolean result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_accept_certificate));
187 if (accept != JOptionPane.YES_OPTION) { 196 if ((result == null) || (!result.booleanValue()) {
188 throw new java.security.cert.CertificateException( 197 throw new java.security.cert.CertificateException(
189 "Certificate Rejected"); 198 "Certificate Rejected");
190 } 199 }
191 200
192 int save = JOptionPane.showConfirmDialog(null, 201 result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_save_certificate));
193 "Remember this certificate?", "Save Certificate", 202 if ((result != null) && (result.booleanValue()) {
194 javax.swing.JOptionPane.YES_NO_OPTION);
195
196 if (save == JOptionPane.YES_OPTION) {
197 try { 203 try {
198 userks.setCertificateEntry(cert.getSubjectDN().getName(), 204 userks.setCertificateEntry(cert.getSubjectDN().getName(),
199 cert); 205 cert);
200 userks.store(new FileOutputStream(userKsPath), 206 userks.store(new FileOutputStream(userKsPath),
201 userksPassword); 207 userksPassword);
204 + "]"); 210 + "]");
205 e.printStackTrace(); 211 e.printStackTrace();
206 } 212 }
207 } 213 }
208 } 214 }
209
210 } 215 }
211 } 216 }