1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.kuali.mobility.push.factory;
16
17 import java.security.KeyStore;
18
19 import javax.net.ssl.KeyManagerFactory;
20 import javax.net.ssl.SSLContext;
21 import javax.net.ssl.SSLSocket;
22 import javax.net.ssl.SSLSocketFactory;
23 import javax.net.ssl.TrustManagerFactory;
24
25 import org.apache.commons.pool.PoolableObjectFactory;
26 import org.springframework.beans.factory.annotation.Value;
27 import org.springframework.core.io.Resource;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 public class iOSConnectionFactory implements PoolableObjectFactory<SSLSocket> {
48
49
50 @Value("${push.apple.host}")
51 private String host = null;
52
53
54 @Value("${push.apple.port}")
55 private int port;
56
57
58 @Value("${push.apple.key.file}")
59 private Resource certPath;
60
61
62 @Value("${push.apple.key.passphrase}")
63 private String certPassword;
64
65
66
67
68
69
70
71
72 @Override
73 public SSLSocket makeObject() throws Exception {
74 SSLSocket socket = null;
75 KeyStore keyStore = KeyStore.getInstance("PKCS12");
76 keyStore.load(certPath.getInputStream(), certPassword.toCharArray());
77 KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("sunx509");
78 keyManagerFactory.init(keyStore, certPassword.toCharArray());
79 TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("sunx509");
80 trustManagerFactory.init(keyStore);
81 SSLContext sslCtx = SSLContext.getInstance("TLS");
82 sslCtx.init(keyManagerFactory.getKeyManagers(), null, null);
83 SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();
84 socket = (SSLSocket)sslSocketFactory.createSocket(host, port);
85 socket.startHandshake();
86 return socket;
87 }
88
89
90
91
92
93 @Override
94 public void destroyObject(SSLSocket obj) throws Exception {
95 if (obj == null){
96
97
98 return;
99 }
100 try{
101 obj.close();
102 }
103 catch (Exception e) {
104
105 }
106 }
107
108
109
110
111
112 @Override
113 public boolean validateObject(SSLSocket obj) {
114 if (obj == null){
115 return false;
116 }
117 return obj.isConnected() && !obj.isClosed();
118 }
119
120
121
122
123
124 @Override
125 public void activateObject(SSLSocket obj) throws Exception {
126
127 }
128
129
130
131
132
133 @Override
134 public void passivateObject(SSLSocket obj) throws Exception {
135
136 }
137 }