/* * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /** * @test * @bug 4459538 * @summary make sure a PKIX CertPathBuilder throws an * InvalidAlgorithmParameterException if the target constraints * specified in the PKIXBuilderParameters is not an instance of * X509CertSelector. */ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.CertPathBuilder; import java.security.cert.CertPathBuilderResult; import java.security.cert.PKIXBuilderParameters; import java.security.cert.TrustAnchor; import java.security.cert.X509Certificate; import java.security.cert.CertSelector; import java.util.Collections; import java.util.Set; /** * BuildOddSel tries to perform a simple build of a certification path * using the PKIX algorithm and a bogus target constraints CertSelector * (one that is not an instance of X509CertSelector). On success, it should * throw an InvalidAlgorithmParameterException. * * @author Steve Hanna * @author Sean Mullan */ public final class BuildOddSel { private static PKIXBuilderParameters params; private static CertSelector sel; public static void main(String[] args) throws Exception { try { createParams(); build(params); throw new Exception ("CertPath should not have been built successfully"); } catch (InvalidAlgorithmParameterException iape) { } } /** * CertSelector class that should cause SunCertPathBuilder to * throw an InvalidAlgorithmParameterException. */ static class OddSel implements CertSelector { public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { throw new UnknownError(); } } public boolean match(Certificate cert) { return(false); } } public static void createParams() throws Exception { TrustAnchor anchor = new TrustAnchor(getCertFromFile("sun.cer"), null); Set anchors = Collections.singleton(anchor); // Create odd CertSelector sel = new OddSel(); params = new PKIXBuilderParameters(anchors, sel); params.setRevocationEnabled(false); } /** * Get a DER-encoded X.509 certificate from a file. * * @param certFilePath path to file containing DER-encoded certificate * @return X509Certificate * @throws IOException on error */ public static X509Certificate getCertFromFile(String certFilePath) throws IOException { X509Certificate cert = null; try { File certFile = new File(System.getProperty("test.src", "."), certFilePath); FileInputStream certFileInputStream = new FileInputStream(certFile); CertificateFactory cf = CertificateFactory.getInstance("X509"); cert = (X509Certificate) cf.generateCertificate(certFileInputStream); } catch (Exception e) { e.printStackTrace(); throw new IOException("Can't construct X509Certificate: " + e.getMessage()); } return cert; } /** * Perform a PKIX build. * * @param params PKIXBuilderParameters to use in building * @throws Exception on error */ public static void build(PKIXBuilderParameters params) throws Exception { CertPathBuilder builder = CertPathBuilder.getInstance("PKIX"); CertPathBuilderResult cpbr = builder.build(params); } }