Path: blob/master/test/jdk/java/security/cert/CertPathBuilder/NoExtensions.java
41154 views
/*1* Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 451946226* @summary Verify Sun CertPathBuilder implementation handles certificates with no extensions27*/2829import java.security.cert.X509Certificate;30import java.security.cert.TrustAnchor;31import java.security.cert.CollectionCertStoreParameters;32import java.security.cert.CertStore;33import java.security.cert.X509CertSelector;34import java.security.cert.CertPathBuilder;35import java.security.cert.PKIXBuilderParameters;36import java.security.cert.CertPathBuilderResult;37import java.security.cert.CertificateFactory;38import java.security.cert.CRL;39import java.security.cert.CertPath;40import java.util.HashSet;41import java.util.ArrayList;42import java.io.ByteArrayInputStream;4344// Test based on user code submitted with bug by [email protected]45public class NoExtensions {4647public static void main(String[] args) {48try {49NoExtensions certs = new NoExtensions();5051// the first certificate has the Authority Key Identifier extension52certs.doBuild(getUserCertificate1());53System.out.println("successfully built path for the first certificate");5455// the second certificate does not have the Authority Key Identifier extension56// this will not succeed57certs.doBuild(getUserCertificate2());58System.out.println("successfully built path for the second certificate");59} catch (Exception ex) {60ex.printStackTrace();61}62}6364private void doBuild(X509Certificate userCert) throws Exception {65// get the set of trusted CA certificates (only one in this instance)66HashSet trustAnchors = new HashSet();67X509Certificate trustedCert = getTrustedCertificate();68trustAnchors.add(new TrustAnchor(trustedCert, null));6970// put together a CertStore (repository of the certificates and CRLs)71ArrayList certs = new ArrayList();72certs.add(trustedCert);73certs.add(userCert);74CollectionCertStoreParameters certStoreParams = new CollectionCertStoreParameters(certs);75CertStore certStore = CertStore.getInstance("Collection", certStoreParams);7677// specify the target certificate via a CertSelector78X509CertSelector certSelector = new X509CertSelector();79certSelector.setCertificate(userCert);80certSelector.setSubject(userCert.getSubjectDN().getName()); // seems to be required8182// build a valid cerificate path83CertPathBuilder certPathBuilder = CertPathBuilder.getInstance("PKIX", "SUN");84PKIXBuilderParameters certPathBuilderParams = new PKIXBuilderParameters(trustAnchors, certSelector);85certPathBuilderParams.addCertStore(certStore);86certPathBuilderParams.setRevocationEnabled(false);87CertPathBuilderResult result = certPathBuilder.build(certPathBuilderParams);8889// get and show cert path90CertPath certPath = result.getCertPath();91// System.out.println(certPath.toString());92}9394private static X509Certificate getTrustedCertificate() throws Exception {95String sCert =96"-----BEGIN CERTIFICATE-----\n"97+ "MIIBezCCASWgAwIBAgIQyWD8dLUoqpJFyDxrfRlrsTANBgkqhkiG9w0BAQQFADAW\n"98+ "MRQwEgYDVQQDEwtSb290IEFnZW5jeTAeFw0wMTEwMTkxMjU5MjZaFw0zOTEyMzEy\n"99+ "MzU5NTlaMBoxGDAWBgNVBAMTD1Jvb3RDZXJ0aWZpY2F0ZTBcMA0GCSqGSIb3DQEB\n"100+ "AQUAA0sAMEgCQQC+NFKszPjatUZKWmyWaFjir1wB93FX2u5SL+GMjgUsMs1JcTKQ\n"101+ "Kh0cnnQKknNkV4cTW4NPn31YCoB1+0KA3mknAgMBAAGjSzBJMEcGA1UdAQRAMD6A\n"102+ "EBLkCS0GHR1PAI1hIdwWZGOhGDAWMRQwEgYDVQQDEwtSb290IEFnZW5jeYIQBjds\n"103+ "AKoAZIoRz7jUqlw19DANBgkqhkiG9w0BAQQFAANBACJxAfP57yqaT9N+nRgAOugM\n"104+ "JG0aN3/peCIvL3p29epRL2xoWFvxpUUlsH2I39OZ6b8+twWCebhkv1I62segXAk=\n"105+ "-----END CERTIFICATE-----";106CertificateFactory certFactory = CertificateFactory.getInstance("X.509");107ByteArrayInputStream bytes = new ByteArrayInputStream(sCert.getBytes());108return (X509Certificate)certFactory.generateCertificate(bytes);109}110111private static X509Certificate getUserCertificate1() throws Exception {112// this certificate includes an extension113String sCert =114"-----BEGIN CERTIFICATE-----\n"115+ "MIIBfzCCASmgAwIBAgIQWFSKzCWO2ptOAc2F3MKZSzANBgkqhkiG9w0BAQQFADAa\n"116+ "MRgwFgYDVQQDEw9Sb290Q2VydGlmaWNhdGUwHhcNMDExMDE5MTMwNzQxWhcNMzkx\n"117+ "MjMxMjM1OTU5WjAaMRgwFgYDVQQDEw9Vc2VyQ2VydGlmaWNhdGUwXDANBgkqhkiG\n"118+ "9w0BAQEFAANLADBIAkEA24gypa2YFGZHKznEWWbqIWNVXCM35W7RwJwhGpNsuBCj\n"119+ "NT6KEo66F+OOMgZmb0KrEZHBJASJ3n4Cqbt4aHm/2wIDAQABo0swSTBHBgNVHQEE\n"120+ "QDA+gBBch+eYzOPgVRbMq5vGpVWooRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mC\n"121+ "EMlg/HS1KKqSRcg8a30Za7EwDQYJKoZIhvcNAQEEBQADQQCYBIHBqQQJePi5Hzfo\n"122+ "CxeUaYlXmvbxVNkxM65Pplsj3h4ntfZaynmlhahH3YsnnA8wk6xPt04LjSId12RB\n"123+ "PeuO\n"124+ "-----END CERTIFICATE-----";125CertificateFactory certFactory = CertificateFactory.getInstance("X.509");126ByteArrayInputStream bytes = new ByteArrayInputStream(sCert.getBytes());127return (X509Certificate)certFactory.generateCertificate(bytes);128}129130private static X509Certificate getUserCertificate2() throws Exception {131// this certificate does not include any extensions132String sCert =133"-----BEGIN CERTIFICATE-----\n"134+ "MIIBMjCB3aADAgECAhB6225ckZVssEukPuvk1U1PMA0GCSqGSIb3DQEBBAUAMBox\n"135+ "GDAWBgNVBAMTD1Jvb3RDZXJ0aWZpY2F0ZTAeFw0wMTEwMTkxNjA5NTZaFw0wMjEw\n"136+ "MTkyMjA5NTZaMBsxGTAXBgNVBAMTEFVzZXJDZXJ0aWZpY2F0ZTIwXDANBgkqhkiG\n"137+ "9w0BAQEFAANLADBIAkEAzicGiW9aUlUoQIZnLy1l8MMV5OvA+4VJ4T/xo/PpN8Oq\n"138+ "WgZVGKeEp6JCzMlXEJk3TGLfpXL4Ytw+Ldhv0QPhLwIDAnMpMA0GCSqGSIb3DQEB\n"139+ "BAUAA0EAQmj9SFHEx66JyAps3ew4pcSS3QvfVZ/6qsNUYCG75rFGcTUPHcXKql9y\n"140+ "qBT83iNLJ//krjw5Ju0WRPg/buHSww==\n"141+ "-----END CERTIFICATE-----";142CertificateFactory certFactory = CertificateFactory.getInstance("X.509");143ByteArrayInputStream bytes = new ByteArrayInputStream(sCert.getBytes());144return (X509Certificate)certFactory.generateCertificate(bytes);145}146}147148149