1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.ext.authentication.certificates;
29
30 import java.io.File;
31 import java.io.FileInputStream;
32 import java.io.FileNotFoundException;
33 import java.io.IOException;
34 import java.security.KeyStore;
35 import java.security.KeyStoreException;
36 import java.security.NoSuchAlgorithmException;
37 import java.security.cert.CertificateException;
38 import java.security.cert.CertificateFactory;
39 import java.security.cert.TrustAnchor;
40 import java.security.cert.X509CRL;
41 import java.security.cert.X509Certificate;
42 import java.util.Arrays;
43 import java.util.HashSet;
44 import java.util.Iterator;
45 import java.util.List;
46 import java.util.Set;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50
51
52
53
54
55
56 public class CertUtils {
57
58 private static final String X509 = "X509";
59
60 private static final Logger logger = LoggerFactory.getLogger(CertUtils.class.getName());
61
62
63
64
65
66
67 public static X509Certificate getCertFromFile(String path) {
68 X509Certificate cert = null;
69
70 File certFile = new File(path);
71 if (!certFile.canRead()){
72 logger.error(" File " + certFile.toString() +" is unreadable");
73 return null;
74 }
75 FileInputStream fis = null;
76 try {
77 fis = new FileInputStream(path);
78 } catch (FileNotFoundException e) {
79 logger.error( "", e);
80 return null;
81
82 }
83 CertificateFactory cf;
84 try {
85 cf = CertificateFactory.getInstance(CertUtils.X509);
86 cert = (X509Certificate)cf.generateCertificate(fis);
87 } catch (CertificateException e) {
88 logger.error( "", e);
89 return null;
90 }finally{
91 try {
92 fis.close();
93 } catch (IOException e) {
94 logger.error( "", e);
95 }
96 }
97
98 return cert;
99 }
100
101
102
103
104
105
106 public static Set getCertsFromDirectory(String directoryPath){
107 Set certsSet = new HashSet();
108 if(directoryPath==null){
109 return certsSet;
110 }
111 File file = new File(directoryPath);
112 List filesAndDirectories =Arrays.asList(file.listFiles());
113 Iterator it = filesAndDirectories.iterator();
114
115 while(it.hasNext()){
116 File tempFile = (File)it.next();
117 if(tempFile.isFile()){
118 certsSet.add(getCertFromFile(tempFile.getPath()));
119 }
120 }
121
122 return certsSet;
123 }
124
125
126
127
128
129
130
131 public static Set getTrustedAnchorsFromDirectory(String directoryPath){
132 Set trustedAnchors = new HashSet();
133 Set certs = getCertsFromDirectory(directoryPath);
134 Iterator itCerts = certs.iterator();
135 while(itCerts.hasNext()){
136 X509Certificate cert = (X509Certificate)itCerts.next();
137 TrustAnchor trustAnchor = new TrustAnchor(cert,null);
138 trustedAnchors.add(trustAnchor);
139 }
140 return trustedAnchors;
141 }
142
143
144
145
146
147
148
149
150 public static Set getTrustedAnchorsFromDirectory(String directoryPath,byte[] nameConstraints){
151 Set trustedAnchors = new HashSet();
152 Set certs = getCertsFromDirectory(directoryPath);
153 Iterator itCerts = certs.iterator();
154 while(itCerts.hasNext()){
155 X509Certificate cert = (X509Certificate)itCerts.next();
156 TrustAnchor trustAnchor = new TrustAnchor(cert,nameConstraints);
157 trustedAnchors.add(trustAnchor);
158 }
159 return trustedAnchors;
160 }
161
162
163
164
165
166 private void inspectCRL(X509CRL crl) {
167 if(logger.isDebugEnabled()){
168 logger.debug("crl="+crl.toString());
169 logger.debug("crlType="+crl.getType());
170 logger.debug("crl next update Date="+crl.getNextUpdate());
171 logger.debug("crl issuer DN="+crl.getIssuerDN().getName());
172 logger.debug("crl signature algorithm name ="+crl.getSigAlgName());
173 logger.debug("crl signature algorithm oid ="+crl.getSigAlgOID());
174 logger.debug("crl version ="+crl.getVersion());
175 logger.debug("crl update Date ="+crl.getThisUpdate());
176 }
177 Set revokedCertificates = crl.getRevokedCertificates();
178 Iterator itRevokedCerts = revokedCertificates.iterator();
179 while(itRevokedCerts.hasNext()){
180 X509Certificate certificate = (X509Certificate)itRevokedCerts.next();
181 logger.debug(certificate.toString());
182 }
183 Set criticalExtensions = crl.getCriticalExtensionOIDs();
184 Iterator itCritExtensions = criticalExtensions.iterator();
185 while(itCritExtensions.hasNext()){
186 String oid = (String)itCritExtensions.next();
187 logger.debug(" critical extension = "+oid);
188 }
189 Set nonCriticalExtensions = crl.getNonCriticalExtensionOIDs();
190 Iterator itNonCritExtensions = nonCriticalExtensions.iterator();
191 while(itNonCritExtensions.hasNext()){
192 String oid = (String)itNonCritExtensions.next();
193 logger.debug(" non critical extension = "+oid);
194 }
195
196 }
197
198 public static KeyStore getKeyStore(String filePath,String keyStorePassword,String keyStoreType) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException{
199 FileInputStream fis = new FileInputStream(filePath);
200 KeyStore keystore = KeyStore.getInstance(keyStoreType);
201 keystore.load(fis,keyStorePassword.toCharArray());
202 return keystore;
203 }
204
205 }