Path: blob/master/test/jdk/sun/security/provider/KeyStore/CaseSensitiveAliases.java
41152 views
/*1* Copyright (c) 2004, 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 5091374 510060326* @summary make sure the JKS case sensitivity works correctly27* @author Andreas Sterbenz28*/2930import java.io.*;31import java.util.*;3233import java.security.*;34import java.security.cert.*;35import java.security.cert.Certificate;3637public class CaseSensitiveAliases {3839// some arbitrary certs4041private final static String S1 =42"-----BEGIN CERTIFICATE-----\n" +43"MIIB4DCCAYoCAQEwDQYJKoZIhvcNAQEEBQAwezELMAkGA1UEBhMCVVMxCzAJBgNV" +44"BAgTAkNBMRIwEAYDVQQHEwlDdXBlcnRpbm8xGTAXBgNVBAoTEFN1biBNaWNyb3N5" +45"c3RlbXMxFjAUBgNVBAsTDUphdmEgU29mdHdhcmUxGDAWBgNVBAMTD0pDRSBEZXZl" +46"bG9wbWVudDAeFw0wMjEwMzExNTI3NDRaFw0wNzEwMzExNTI3NDRaMHsxCzAJBgNV" +47"BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJQ3VwZXJ0aW5vMRkwFwYDVQQK" +48"ExBTdW4gTWljcm9zeXN0ZW1zMRYwFAYDVQQLEw1KYXZhIFNvZnR3YXJlMRgwFgYD" +49"VQQDEw9KQ0UgRGV2ZWxvcG1lbnQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAo/4C" +50"ddEOa3M6v9JFAhnBYgTq54Y30++F8yzCK9EeYaG3AzvzZqNshDy579647p0cOM/4" +51"VO6rU2PgbzgKXPcs8wIDAQABMA0GCSqGSIb3DQEBBAUAA0EACqPlFmVdKdYSCTNl" +52"tXKQnBqss9GNjbnB+CitvWrwN+oOK8qQpvV+5LB6LruvRy6zCedCV95Z2kXKg/Fn" +53"j0gvsg==\n" +54"-----END CERTIFICATE-----";5556private final static String S2 =57"-----BEGIN CERTIFICATE-----\n" +58"MIIB4DCCAYoCAQIwDQYJKoZIhvcNAQEEBQAwezELMAkGA1UEBhMCVVMxCzAJBgNV" +59"BAgTAkNBMRIwEAYDVQQHEwlDdXBlcnRpbm8xGTAXBgNVBAoTEFN1biBNaWNyb3N5" +60"c3RlbXMxFjAUBgNVBAsTDUphdmEgU29mdHdhcmUxGDAWBgNVBAMTD0pDRSBEZXZl" +61"bG9wbWVudDAeFw0wMjEwMzExNTI3NDRaFw0wNzEwMzExNTI3NDRaMHsxCzAJBgNV" +62"BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJQ3VwZXJ0aW5vMRkwFwYDVQQK" +63"ExBTdW4gTWljcm9zeXN0ZW1zMRYwFAYDVQQLEw1KYXZhIFNvZnR3YXJlMRgwFgYD" +64"VQQDEw9KQ0UgRGV2ZWxvcG1lbnQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAr1OS" +65"XaOzpnVoqL2LqS5+HLy1kVvBwiM/E5iYT9eZaghE8qvF+4fETipWUNTWCQzHR4cD" +66"JGJOl9Nm77tELhES4QIDAQABMA0GCSqGSIb3DQEBBAUAA0EAL+WcVFyj+iXlEVNV" +67"QbNOOUlWmlmXGiNKKXnIdNcc1ZUyi+JW0zmlfZ7iU/eRYhEEJBwdrUoyiGOGLo7p" +68"i6JzAA==\n" +69"-----END CERTIFICATE-----";7071private static CertificateFactory cf;7273private static X509Certificate parseCert(String s) throws Exception {74if (cf == null) {75cf = CertificateFactory.getInstance("X.509");76}77InputStream in = new ByteArrayInputStream(s.getBytes("UTF8"));78return (X509Certificate)cf.generateCertificate(in);79}8081public static void main(String[] args) throws Exception {82main("JKS", true);83main("CaseExactJKS", false);84}8586private static void main(String jks, boolean caseInsensitive) throws Exception {87X509Certificate c1 = parseCert(S1);88X509Certificate c2 = parseCert(S2);89X509Certificate[] a1 = {c1};90X509Certificate[] a2 = {c2};9192KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");93kpg.initialize(512);94PrivateKey p1 = kpg.generateKeyPair().getPrivate();95PrivateKey p2 = kpg.generateKeyPair().getPrivate();9697KeyStore ks = KeyStore.getInstance(jks);98ks.load(null, null);99100char[] pw = "pw".toCharArray();101102ks.setKeyEntry("Alias", p1, pw, a1);103ks.setKeyEntry("ALIAS", p2, pw, a2);104105if (caseInsensitive) {106if (ks.size() != 1) {107throw new Exception("size mismatch: " + ks.size());108}109match(p2, ks.getKey("alias", pw));110match(p2, ks.getKey("Alias", pw));111match(p2, ks.getKey("ALIAS", pw));112match(a2, ks.getCertificateChain("alias"));113match(a2, ks.getCertificateChain("Alias"));114match(a2, ks.getCertificateChain("ALIAS"));115} else {116if (ks.size() != 2) {117throw new Exception("size mismatch: " + ks.size());118}119match(null, ks.getKey("alias", pw));120match(p1, ks.getKey("Alias", pw));121match(p2, ks.getKey("ALIAS", pw));122match(null, ks.getCertificateChain("alias"));123match(a1, ks.getCertificateChain("Alias"));124match(a2, ks.getCertificateChain("ALIAS"));125}126127System.out.println("OK: " + jks);128}129130private static void match(Key p1, Key p2) throws Exception {131System.out.println(String.valueOf(p2).split("\\n")[0]);132if ((p1 != p2) && (p1.equals(p2) == false)) {133throw new Exception("Private key mismatch");134}135}136137private static void match(Certificate[] a1, Certificate[] a2) throws Exception {138System.out.println(String.valueOf(a2).split("\\n")[0]);139if ((a1 != a2) && (Arrays.equals(a1, a2) == false)) {140throw new Exception("chain mismatch");141}142}143144}145146147