gluu
公開メンバ関数 | 静的公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.xdi.oxauth.cert.validation.PathCertificateVerifier クラス
org.xdi.oxauth.cert.validation.PathCertificateVerifier の継承関係図
Inheritance graph
org.xdi.oxauth.cert.validation.PathCertificateVerifier 連携図
Collaboration graph

公開メンバ関数

 PathCertificateVerifier (boolean verifySelfSignedCert)
 
ValidationStatus validate (X509Certificate certificate, List< X509Certificate > issuers, Date validationDate)
 
PKIXCertPathBuilderResult verifyCertificate (X509Certificate certificate, List< X509Certificate > additionalCerts)
 
void destroy ()
 

静的公開メンバ関数

static boolean isSelfSigned (X509Certificate certificate) throws CertificateException, NoSuchAlgorithmException, NoSuchProviderException
 

非公開メンバ関数

PKIXCertPathBuilderResult verifyCertificate (X509Certificate certificate, Set< X509Certificate > trustedRootCerts, Set< X509Certificate > intermediateCerts) throws GeneralSecurityException
 

非公開変数類

boolean verifySelfSignedCertificate
 

静的非公開変数類

static final Logger log = LoggerFactory.getLogger(PathCertificateVerifier.class)
 

詳解

Chain certificate verifier

著者
Yuriy Movchan
バージョン
March 11, 2016

構築子と解体子

◆ PathCertificateVerifier()

org.xdi.oxauth.cert.validation.PathCertificateVerifier.PathCertificateVerifier ( boolean  verifySelfSignedCert)
inline
56  {
57  SecurityProviderUtility.installBCProvider(true);
58 
59  this.verifySelfSignedCertificate = verifySelfSignedCert;
60  }
boolean verifySelfSignedCertificate
Definition: PathCertificateVerifier.java:54

関数詳解

◆ destroy()

void org.xdi.oxauth.cert.validation.PathCertificateVerifier.destroy ( )
inline

org.xdi.oxauth.cert.validation.CertificateVerifierを実装しています。

192  {
193  }

◆ isSelfSigned()

static boolean org.xdi.oxauth.cert.validation.PathCertificateVerifier.isSelfSigned ( X509Certificate  certificate) throws CertificateException, NoSuchAlgorithmException, NoSuchProviderException
inlinestatic
135  {
136  try {
137  // Try to verify certificate signature with its own public key
138  PublicKey key = certificate.getPublicKey();
139  certificate.verify(key);
140 
141  return true;
142  } catch (SignatureException ex) {
143  // Not self-signed
144  return false;
145  } catch (InvalidKeyException ex) {
146  // Not self-signed
147  return false;
148  }
149  }

◆ validate()

ValidationStatus org.xdi.oxauth.cert.validation.PathCertificateVerifier.validate ( X509Certificate  certificate,
List< X509Certificate >  issuers,
Date  validationDate 
)
inline

org.xdi.oxauth.cert.validation.CertificateVerifierを実装しています。

63  {
64  X509Certificate issuer = issuers.get(0);
65  ValidationStatus status = new ValidationStatus(certificate, issuer, validationDate, ValidatorSourceType.CHAIN, CertificateValidity.UNKNOWN);
66 
67  try {
68  ArrayList<X509Certificate> chains = new ArrayList<X509Certificate>();
69  chains.add(certificate);
70  chains.addAll(issuers);
71 
72  Principal subjectX500Principal = certificate.getSubjectX500Principal();
73 
74  PKIXCertPathBuilderResult certPathResult = verifyCertificate(certificate, chains);
75  if (certPathResult == null) {
76  log.warn("Chain status is not valid for '" + subjectX500Principal + "'");
77  status.setValidity(CertificateValidity.INVALID);
78  return status;
79  }
80 
81  log.debug("Chain status is valid for '" + subjectX500Principal + "'");
82  status.setValidity(CertificateValidity.VALID);
83  } catch (Exception ex) {
84  log.error("OCSP exception: ", ex);
85  }
86 
87  return status;
88  }
static final Logger log
Definition: PathCertificateVerifier.java:52
PKIXCertPathBuilderResult verifyCertificate(X509Certificate certificate, List< X509Certificate > additionalCerts)
Definition: PathCertificateVerifier.java:90

◆ verifyCertificate() [1/2]

PKIXCertPathBuilderResult org.xdi.oxauth.cert.validation.PathCertificateVerifier.verifyCertificate ( X509Certificate  certificate,
List< X509Certificate >  additionalCerts 
)
inline
90  {
91  try {
92  // Check for self-signed certificate
93  if (!verifySelfSignedCertificate && isSelfSigned(certificate)) {
94  log.error("The certificate is self-signed!");
95 
96  return null;
97  }
98 
99  // Prepare a set of trusted root CA certificates and a set of
100  // intermediate certificates
101  Set<X509Certificate> trustedRootCerts = new HashSet<X509Certificate>();
102  Set<X509Certificate> intermediateCerts = new HashSet<X509Certificate>();
103  for (X509Certificate additionalCert : additionalCerts) {
104  if (isSelfSigned(additionalCert)) {
105  trustedRootCerts.add(additionalCert);
106  } else {
107  intermediateCerts.add(additionalCert);
108  }
109  }
110 
111  // Attempt to build the certification chain and verify it
112  PKIXCertPathBuilderResult certPathBuilderResult = verifyCertificate(certificate, trustedRootCerts, intermediateCerts);
113 
114  // Check that first certificate is an EE certificate
115  CertPath certPath = certPathBuilderResult.getCertPath();
116  List<? extends Certificate> certList = certPath.getCertificates();
117  X509Certificate cert = (X509Certificate) certList.get(0);
118  if (cert.getBasicConstraints() != -1) {
119  log.error("Target certificate is not an EE certificate!");
120 
121  return null;
122  }
123 
124  // The chain is verified. Return it as a result
125  return certPathBuilderResult;
126  } catch (CertPathBuilderException ex) {
127  log.error("Failed to build certificate path", ex);
128  } catch (GeneralSecurityException ex) {
129  log.error("Failed to build certificate path", ex);
130  }
131 
132  return null;
133  }
static boolean isSelfSigned(X509Certificate certificate)
Definition: PathCertificateVerifier.java:135
static final Logger log
Definition: PathCertificateVerifier.java:52
boolean verifySelfSignedCertificate
Definition: PathCertificateVerifier.java:54
PKIXCertPathBuilderResult verifyCertificate(X509Certificate certificate, List< X509Certificate > additionalCerts)
Definition: PathCertificateVerifier.java:90

◆ verifyCertificate() [2/2]

PKIXCertPathBuilderResult org.xdi.oxauth.cert.validation.PathCertificateVerifier.verifyCertificate ( X509Certificate  certificate,
Set< X509Certificate >  trustedRootCerts,
Set< X509Certificate >  intermediateCerts 
) throws GeneralSecurityException
inlineprivate

Attempts to build a certification chain for given certificate to verify it. Relies on a set of root CA certificates (trust anchors) and a set of intermediate certificates (to be used as part of the chain).

157  {
158 
159  // Create the selector that specifies the starting certificate
160  X509CertSelector selector = new X509CertSelector();
161  selector.setBasicConstraints(-2);
162  selector.setCertificate(certificate);
163 
164  // Create the trust anchors (set of root CA certificates)
165  Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
166  for (X509Certificate trustedRootCert : trustedRootCerts) {
167  trustAnchors.add(new TrustAnchor(trustedRootCert, null));
168  }
169 
170  // Configure the PKIX certificate builder algorithm parameters
171  PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustAnchors, selector);
172 
173  // Turn off default revocation-checking mechanism
174  pkixParams.setRevocationEnabled(false);
175 
176  // Specify a list of intermediate certificates
177  CertStore intermediateCertStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(intermediateCerts));
178  pkixParams.addCertStore(intermediateCertStore);
179 
180  // Build and verify the certification chain
181  CertPathBuilder builder = CertPathBuilder.getInstance("PKIX", BouncyCastleProvider.PROVIDER_NAME);
182  PKIXCertPathBuilderResult certPathBuilderResult = (PKIXCertPathBuilderResult) builder.build(pkixParams);
183 
184  // Additional check to Verify cert path
185  CertPathValidator certPathValidator = CertPathValidator.getInstance("PKIX", BouncyCastleProvider.PROVIDER_NAME);
186  PKIXCertPathValidatorResult certPathValidationResult = (PKIXCertPathValidatorResult) certPathValidator.validate(certPathBuilderResult.getCertPath(), pkixParams);
187 
188  return certPathBuilderResult;
189  }

メンバ詳解

◆ log

final Logger org.xdi.oxauth.cert.validation.PathCertificateVerifier.log = LoggerFactory.getLogger(PathCertificateVerifier.class)
staticprivate

◆ verifySelfSignedCertificate

boolean org.xdi.oxauth.cert.validation.PathCertificateVerifier.verifySelfSignedCertificate
private

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