gluu
公開メンバ関数 | 静的公開メンバ関数 | 静的非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.gluu.oxtrust.ldap.service.SSLService クラス
org.gluu.oxtrust.ldap.service.SSLService の継承関係図
Inheritance graph
org.gluu.oxtrust.ldap.service.SSLService 連携図
Collaboration graph

公開メンバ関数

X509Certificate getPEMCertificate (String fileName)
 
X509Certificate getPEMCertificate (byte[] cert)
 
X509Certificate getPEMCertificate (InputStream certStream)
 

静的公開メンバ関数

static X509Certificate getPEMCertificateStatic (InputStream certStream) throws Exception
 
static X509Certificate [] loadCertificates (InputStream is) throws Exception
 
static X509Certificate [] loadCertificates (byte[] certsBytes) throws Exception
 
static X509CRL loadCRL (InputStream is) throws Exception
 
static X509Certificate [] convertCertificates (Certificate[] certsIn) throws Exception
 
static X509Certificate convertCertificate (Certificate cert) throws Exception
 
static CertificateFactory getCertificateFactoryInstance () throws CertificateException, NoSuchProviderException
 

静的非公開メンバ関数

static X509Certificate [] loadCertificatesAsPkiPathEncoded (InputStream is) throws Exception
 
static byte [] fixCommonInputCertProblems (byte[] certs) throws IOException
 
static byte [] attemptBase64Decode (String toTest)
 

非公開変数類

Logger log
 

静的非公開変数類

static final long serialVersionUID = -874807269234589084L
 
static final String SECURITY_PROVIDER_BOUNCY_CASTLE = "BC"
 
static final String X509_CERT_TYPE = "X.509"
 
static final String PKI_PATH_ENCODING = "PkiPath"
 
static final String BEGIN_CERTIFICATE = "-----BEGIN CERTIFICATE-----"
 
static final String END_CERTIFICATE = "-----END CERTIFICATE-----"
 
static final String BASE64_TESTER = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"
 

詳解

Provides common ssl certificates management

著者
�Oleksiy Tataryn�

関数詳解

◆ attemptBase64Decode()

static byte [] org.gluu.oxtrust.ldap.service.SSLService.attemptBase64Decode ( String  toTest)
inlinestaticprivate
240  {
241  // Attempt to decode the supplied byte array as a base 64 encoded SPC.
242  // Character set may be UTF-16 big endian or ASCII.
243 
244  char[] base64 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
245  'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
246  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
247  '6', '7', '8', '9', '+', '/', '=' };
248 
249  // remove all non visible characters (like newlines) and whitespace
250  toTest = toTest.replaceAll("\\s", "");
251 
252  /*
253  * Check all characters are base 64. Discard any zero bytes that be
254  * present if UTF-16 encoding is used but will mess up a base 64 decode
255  */
256  StringBuffer sb = new StringBuffer();
257 
258  nextChar: for (int i = 0; i < toTest.length(); i++) {
259  char c = toTest.charAt(i);
260 
261  for (int j = 0; j < base64.length; j++) {
262  if (c == base64[j]) // Append base 64 byte
263  {
264  sb.append(c);
265  continue nextChar;
266  } else if (c == 0) // Discard zero byte
267  {
268  continue nextChar;
269  }
270  }
271 
272  return null; // Not base 64
273  }
274 
275  return Base64.decode(sb.toString());
276  }

◆ convertCertificate()

static X509Certificate org.gluu.oxtrust.ldap.service.SSLService.convertCertificate ( Certificate  cert) throws Exception
inlinestatic

Convert the supplied certificate object into an X509Certificate object.

引数
certThe Certificate object
戻り値
The converted X509Certificate object
例外
ExceptionA problem occurred during the conversion
326  {
327  CertificateFactory cf = getCertificateFactoryInstance();
328  ByteArrayInputStream bais = new ByteArrayInputStream(cert.getEncoded());
329  return (X509Certificate) cf.generateCertificate(bais);
330  }
static CertificateFactory getCertificateFactoryInstance()
Definition: SSLService.java:338

◆ convertCertificates()

static X509Certificate [] org.gluu.oxtrust.ldap.service.SSLService.convertCertificates ( Certificate []  certsIn) throws Exception
inlinestatic

Convert the supplied array of certificate objects into X509Certificate objects.

引数
certsInThe Certificate objects
戻り値
The converted X509Certificate objects
例外
ExceptionA problem occurred during the conversion
305  {
306  if (certsIn == null) {
307  return new X509Certificate[0];
308  }
309 
310  X509Certificate[] certsOut = new X509Certificate[certsIn.length];
311 
312  for (int i = 0; i < certsIn.length; i++) {
313  certsOut[i] = convertCertificate(certsIn[i]);
314  }
315 
316  return certsOut;
317  }
static X509Certificate convertCertificate(Certificate cert)
Definition: SSLService.java:326

◆ fixCommonInputCertProblems()

static byte [] org.gluu.oxtrust.ldap.service.SSLService.fixCommonInputCertProblems ( byte []  certs) throws IOException
inlinestaticprivate
222  {
223 
224  // clear PEM header/footer
225  String certsStr = new String(certs);
226  if (certsStr.startsWith(BEGIN_CERTIFICATE)) {
227  certsStr = certsStr.replaceAll(BEGIN_CERTIFICATE, "");
228  certsStr = certsStr.replaceAll(END_CERTIFICATE, "");
229  }
230 
231  // check for base 64 encoded and decode if necessary
232  byte[] decoded = attemptBase64Decode(certsStr);
233  if (decoded != null) {
234  return decoded;
235  }
236 
237  return certs;
238  }
static byte [] attemptBase64Decode(String toTest)
Definition: SSLService.java:240
static final String BEGIN_CERTIFICATE
Definition: SSLService.java:59
static final String END_CERTIFICATE
Definition: SSLService.java:60

◆ getCertificateFactoryInstance()

static CertificateFactory org.gluu.oxtrust.ldap.service.SSLService.getCertificateFactoryInstance ( ) throws CertificateException, NoSuchProviderException
inlinestatic

Get BOUNCY CASTLE CertificateFactory instance.

戻り値
例外
CertificateException
NoSuchProviderException
338  {
339  return CertificateFactory.getInstance(X509_CERT_TYPE, SECURITY_PROVIDER_BOUNCY_CASTLE);
340  }
static final String X509_CERT_TYPE
Definition: SSLService.java:57
static final String SECURITY_PROVIDER_BOUNCY_CASTLE
Definition: SSLService.java:56

◆ getPEMCertificate() [1/3]

X509Certificate org.gluu.oxtrust.ldap.service.SSLService.getPEMCertificate ( String  fileName)
inline

Extracts X509 certificate from pem-encoded file.

引数
fileName
戻り値
69  {
70  X509Certificate cert = null;
71 
72  try {
73  cert = getPEMCertificate(new FileInputStream(fileName));
74  } catch (FileNotFoundException e) {
75  log.error("Certificate file does not exist : " + fileName);
76  }
77 
78  return cert;
79  }
Logger log
Definition: SSLService.java:53
X509Certificate getPEMCertificate(String fileName)
Definition: SSLService.java:69

◆ getPEMCertificate() [2/3]

X509Certificate org.gluu.oxtrust.ldap.service.SSLService.getPEMCertificate ( byte []  cert)
inline

Extracts X509 certificate from pem-encoded stream.

引数
certStream
戻り値
87  {
88  ByteArrayInputStream bis = new ByteArrayInputStream(cert);
89  try {
90  return getPEMCertificate(bis);
91  } finally {
92  IOUtils.closeQuietly(bis);
93  }
94  }
X509Certificate getPEMCertificate(String fileName)
Definition: SSLService.java:69

◆ getPEMCertificate() [3/3]

X509Certificate org.gluu.oxtrust.ldap.service.SSLService.getPEMCertificate ( InputStream  certStream)
inline

Extracts X509 certificate from pem-encoded stream.

引数
certStream
戻り値
102  {
103  try {
104  return getPEMCertificateStatic(certStream);
105  } catch (Exception e) {
106  log.error(e.getMessage(), e);
107  return null;
108  }
109  }
static X509Certificate getPEMCertificateStatic(InputStream certStream)
Definition: SSLService.java:118
Logger log
Definition: SSLService.java:53

◆ getPEMCertificateStatic()

static X509Certificate org.gluu.oxtrust.ldap.service.SSLService.getPEMCertificateStatic ( InputStream  certStream) throws Exception
inlinestatic

Extracts X509 certificate from pem-encoded stream.

引数
certStream
戻り値
118  {
119  Reader reader = null;
120  PEMParser r = null;
121 
122  try {
123  reader = new InputStreamReader(certStream);
124  r = new PEMParser(reader /*, new PasswordFinder() {
125  public char[] getPassword() {
126  return null;
127  }
128  }*/);
129 
130  Object certObject = r.readObject();
131 
132  if (certObject instanceof X509Certificate) {
133  return (X509Certificate) certObject;
134  } else if (certObject instanceof X509CertificateHolder) {
135  X509CertificateHolder certificateHolder = (X509CertificateHolder) certObject;
136  return new JcaX509CertificateConverter().setProvider( SECURITY_PROVIDER_BOUNCY_CASTLE ).getCertificate( certificateHolder );
137  }
138  else {
139  // unknown certificate type
140  throw new IOException("unknown certificate type");
141  }
142  } finally {
143  IOUtils.closeQuietly(r);
144  IOUtils.closeQuietly(reader);
145  }
146  }
static final String SECURITY_PROVIDER_BOUNCY_CASTLE
Definition: SSLService.java:56

◆ loadCertificates() [1/2]

static X509Certificate [] org.gluu.oxtrust.ldap.service.SSLService.loadCertificates ( InputStream  is) throws Exception
inlinestatic

Load one or more certificates from the specified stream.

引数
isStream to load certificates from
戻り値
The array of certificates
154  {
155  byte[] certsBytes = ServiceUtil.readFully(is);
156 
157  return loadCertificates(certsBytes);
158  }
static X509Certificate [] loadCertificates(InputStream is)
Definition: SSLService.java:154

◆ loadCertificates() [2/2]

static X509Certificate [] org.gluu.oxtrust.ldap.service.SSLService.loadCertificates ( byte []  certsBytes) throws Exception
inlinestatic

Load one or more certificates from the specified byte array.

引数
certsBytesByte array to load certificates from
戻り値
The array of certificates
166  {
167  try {
168  // fix common input certificate problems by converting PEM/B64 to DER
169  certsBytes = fixCommonInputCertProblems(certsBytes);
170 
171  CertificateFactory cf = getCertificateFactoryInstance();
172 
173  Collection<? extends Certificate> certs = cf.generateCertificates(new ByteArrayInputStream(certsBytes));
174 
175  ArrayList<X509Certificate> loadedCerts = new ArrayList<X509Certificate>();
176 
177  for (Iterator<? extends Certificate> itr = certs.iterator(); itr.hasNext();) {
178  X509Certificate cert = (X509Certificate) itr.next();
179 
180  if (cert != null) {
181  loadedCerts.add(cert);
182  }
183  }
184 
185  return loadedCerts.toArray(new X509Certificate[loadedCerts.size()]);
186  } catch (CertificateException ex) {
187  try {
188  // Failed to load certificates, may be pki path encoded - try loading as that
189  return loadCertificatesAsPkiPathEncoded(new ByteArrayInputStream(certsBytes));
190  } catch (CertificateException e) {
191  // Failed to load certificates, may be PEM certificate
192  X509Certificate certs[] = new X509Certificate[1];
193  certs[0] = getPEMCertificateStatic(new ByteArrayInputStream(certsBytes));
194  return certs;
195  }
196  }
197  }
static X509Certificate getPEMCertificateStatic(InputStream certStream)
Definition: SSLService.java:118
static X509Certificate [] loadCertificatesAsPkiPathEncoded(InputStream is)
Definition: SSLService.java:199
static byte [] fixCommonInputCertProblems(byte[] certs)
Definition: SSLService.java:222
static CertificateFactory getCertificateFactoryInstance()
Definition: SSLService.java:338

◆ loadCertificatesAsPkiPathEncoded()

static X509Certificate [] org.gluu.oxtrust.ldap.service.SSLService.loadCertificatesAsPkiPathEncoded ( InputStream  is) throws Exception
inlinestaticprivate
199  {
200  try {
201  CertificateFactory cf = getCertificateFactoryInstance();
202  CertPath certPath = cf.generateCertPath(is, PKI_PATH_ENCODING);
203 
204  List<? extends Certificate> certs = certPath.getCertificates();
205 
206  ArrayList<X509Certificate> loadedCerts = new ArrayList<X509Certificate>();
207 
208  for (Iterator<? extends Certificate> itr = certs.iterator(); itr.hasNext();) {
209  X509Certificate cert = (X509Certificate) itr.next();
210 
211  if (cert != null) {
212  loadedCerts.add(cert);
213  }
214  }
215 
216  return loadedCerts.toArray(new X509Certificate[loadedCerts.size()]);
217  } finally {
218  IOUtils.closeQuietly(is);
219  }
220  }
static final String PKI_PATH_ENCODING
Definition: SSLService.java:58
static CertificateFactory getCertificateFactoryInstance()
Definition: SSLService.java:338

◆ loadCRL()

static X509CRL org.gluu.oxtrust.ldap.service.SSLService.loadCRL ( InputStream  is) throws Exception
inlinestatic

Load a CRL from the specified stream.

引数
isStream to load CRL from
戻り値
The CRL
例外
ExceptionProblem encountered while loading the CRL
287  {
288  try {
289  CertificateFactory cf = getCertificateFactoryInstance();
290  X509CRL crl = (X509CRL) cf.generateCRL(is);
291  return crl;
292  } finally {
293  IOUtils.closeQuietly(is);
294  }
295  }
static CertificateFactory getCertificateFactoryInstance()
Definition: SSLService.java:338

メンバ詳解

◆ BASE64_TESTER

final String org.gluu.oxtrust.ldap.service.SSLService.BASE64_TESTER = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"
staticprivate

◆ BEGIN_CERTIFICATE

final String org.gluu.oxtrust.ldap.service.SSLService.BEGIN_CERTIFICATE = "-----BEGIN CERTIFICATE-----"
staticprivate

◆ END_CERTIFICATE

final String org.gluu.oxtrust.ldap.service.SSLService.END_CERTIFICATE = "-----END CERTIFICATE-----"
staticprivate

◆ log

Logger org.gluu.oxtrust.ldap.service.SSLService.log
private

◆ PKI_PATH_ENCODING

final String org.gluu.oxtrust.ldap.service.SSLService.PKI_PATH_ENCODING = "PkiPath"
staticprivate

◆ SECURITY_PROVIDER_BOUNCY_CASTLE

final String org.gluu.oxtrust.ldap.service.SSLService.SECURITY_PROVIDER_BOUNCY_CASTLE = "BC"
staticprivate

Bouncy Castle SecurityProvider

◆ serialVersionUID

final long org.gluu.oxtrust.ldap.service.SSLService.serialVersionUID = -874807269234589084L
staticprivate

◆ X509_CERT_TYPE

final String org.gluu.oxtrust.ldap.service.SSLService.X509_CERT_TYPE = "X.509"
staticprivate

このクラス詳解は次のファイルから抽出されました: