org.globus.gsi.trustmanager.UnsupportedCriticalExtensionChecker Maven / Gradle / Ivy
/*
* Copyright 1999-2010 University of Chicago
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is
* distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
*
* See the License for the specific language governing permissions and limitations under the License.
*/
package org.globus.gsi.trustmanager;
import org.globus.gsi.util.ProxyCertificateUtil;
import org.globus.gsi.proxy.ext.ProxyCertInfo;
import java.security.cert.CertPathValidatorException;
import java.security.cert.X509Certificate;
import java.util.Set;
import org.globus.gsi.GSIConstants;
/**
* Checks if the certificate includes unsupported critical extensions.
*
* @version ${version}
* @since 1.0
*/
public class UnsupportedCriticalExtensionChecker implements CertificateChecker {
/**
* Method that checks if there are unsupported critical extension. Supported
* ones are only BasicConstrains, KeyUsage, Proxy Certificate (old and new)
*
* @param cert The certificate to validate.
* @param certType The type of certificate to validate.
* @throws CertPathValidatorException If any critical extension that is not supported is in the certificate.
* Anything other than those listed above will trigger the exception.
*/
public void invoke(X509Certificate cert, GSIConstants.CertificateType certType) throws CertPathValidatorException {
Set criticalExtensionOids =
cert.getCriticalExtensionOIDs();
if (criticalExtensionOids == null) {
return;
}
for (String criticalExtensionOid : criticalExtensionOids) {
isUnsupported(certType, criticalExtensionOid);
}
}
private void isUnsupported(GSIConstants.CertificateType certType, String criticalExtensionOid)
throws CertPathValidatorException {
boolean unsupportedCritExtention = criticalExtensionOid.equals(X509ProxyCertPathValidator.BASIC_CONSTRAINT_OID);
unsupportedCritExtention = unsupportedCritExtention || criticalExtensionOid.equals(X509ProxyCertPathValidator.KEY_USAGE_OID);
unsupportedCritExtention = unsupportedCritExtention
|| (criticalExtensionOid.equals(ProxyCertInfo.OID.toString())
&& ProxyCertificateUtil.isGsi4Proxy(certType));
unsupportedCritExtention = unsupportedCritExtention
|| (criticalExtensionOid.equals(ProxyCertInfo.OLD_OID.toString())
&& ProxyCertificateUtil.isGsi3Proxy(certType));
if (unsupportedCritExtention) {
return;
}
// if (criticalExtensionOid.equals(X509ProxyCertPathValidator.BASIC_CONSTRAINT_OID)
// || criticalExtensionOid.equals(X509ProxyCertPathValidator.KEY_USAGE_OID)
// || (criticalExtensionOid.equals(Constants.PROXY_OID.toString())
// && ProxyCertificateUtil.isGsi4Proxy(certType))
// || (criticalExtensionOid.equals(Constants.PROXY_OLD_OID.toString())
// && ProxyCertificateUtil.isGsi3Proxy(certType))) {
// return;
// }
throw new CertPathValidatorException("Critical extension with unsupported OID " + criticalExtensionOid);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy