Path: blob/master/test/jdk/sun/security/ssl/SignatureScheme/Tls13NamedGroups.java
41152 views
/*1* Copyright (c) 2019, 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. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425//26// SunJSSE does not support dynamic system properties, no way to re-use27// system properties in samevm/agentvm mode.28//2930/*31* @test32* @bug 822576633* @summary Curve in certificate should not affect signature scheme34* when using TLSv1.335* @library /javax/net/ssl/templates36* @run main/othervm Tls13NamedGroups37*/3839import java.net.*;40import java.io.*;41import javax.net.ssl.*;42import java.security.*;43import java.security.cert.*;44import java.security.spec.*;45import java.security.interfaces.*;46import java.util.Base64;4748public class Tls13NamedGroups extends SSLSocketTemplate {4950public static void main(String[] args) throws Exception {51// Limit the supported named group to secp521r1.52System.setProperty("jdk.tls.namedGroups", "secp521r1");5354new Tls13NamedGroups().run();55}5657@Override58protected SSLContext createServerSSLContext() throws Exception {59return generateSSLContext();60}6162@Override63protected void configureServerSocket(SSLServerSocket socket) {64socket.setNeedClientAuth(true);65}6667@Override68protected SSLContext createClientSSLContext() throws Exception {69return generateSSLContext();70}7172/*73* =============================================================74* The remainder is just support stuff75*/7677// Certificates and key used in the test.78//79// Trusted Certificate.80static String trustedCertStr =81// SHA256withECDSA, curve prime256v182// Validity83// Not Before: May 22 07:18:16 2018 GMT84// Not After : May 17 07:18:16 2038 GMT85// Subject Key Identifier:86// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:8687"-----BEGIN CERTIFICATE-----\n" +88"MIIBvjCCAWOgAwIBAgIJAIvFG6GbTroCMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +89"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +90"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYTAlVT\n" +91"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTBZ\n" +92"MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBz1WeVb6gM2mh85z3QlvaB/l11b5h0v\n" +93"LIzmkC3DKlVukZT+ltH2Eq1oEkpXuf7QmbM0ibrUgtjsWH3mULfmcWmjUDBOMB0G\n" +94"A1UdDgQWBBRgz71z//oaMNKk7NNJcUbvGjWghjAfBgNVHSMEGDAWgBRgz71z//oa\n" +95"MNKk7NNJcUbvGjWghjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCG\n" +96"6wluh1r2/T6L31mZXRKf9JxeSf9pIzoLj+8xQeUChQIhAJ09wAi1kV8yePLh2FD9\n" +97"2YEHlSQUAbwwqCDEVB5KxaqP\n" +98"-----END CERTIFICATE-----";99// -----BEGIN PRIVATE KEY-----100// MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/HcHdoLJCdq3haVd101// XZTSKP00YzM3xX97l98vGL/RI1KhRANCAAQc9VnlW+oDNpofOc90Jb2gf5ddW+Yd102// LyyM5pAtwypVbpGU/pbR9hKtaBJKV7n+0JmzNIm61ILY7Fh95lC35nFp103// -----END PRIVATE KEY-----104105// End entity certificate.106static String targetCertStr =107// SHA256withECDSA, curve prime256v1108// Validity109// Not Before: May 22 07:18:16 2018 GMT110// Not After : May 17 07:18:16 2038 GMT111// Authority Key Identifier:112// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86113"-----BEGIN CERTIFICATE-----\n" +114"MIIBqjCCAVCgAwIBAgIJAPLY8qZjgNRAMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +115"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +116"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYTAlVT\n" +117"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTEY\n" +118"MBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n" +119"QgAEb+9n05qfXnfHUb0xtQJNS4JeSi6IjOfW5NqchvKnfJey9VkJzR7QHLuOESdf\n" +120"xlR7q8YIWgih3iWLGfB+wxHiOqMjMCEwHwYDVR0jBBgwFoAUYM+9c//6GjDSpOzT\n" +121"SXFG7xo1oIYwCgYIKoZIzj0EAwIDSAAwRQIgWpRegWXMheiD3qFdd8kMdrkLxRbq\n" +122"1zj8nQMEwFTUjjQCIQDRIrAjZX+YXHN9b0SoWWLPUq0HmiFIi8RwMnO//wJIGQ==\n" +123"-----END CERTIFICATE-----";124125// Private key in the format of PKCS#8.126static String targetPrivateKey =127//128// EC private key related to cert endEntityCertStrs[0].129//130"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgn5K03bpTLjEtFQRa\n" +131"JUtx22gtmGEvvSUSQdimhGthdtihRANCAARv72fTmp9ed8dRvTG1Ak1Lgl5KLoiM\n" +132"59bk2pyG8qd8l7L1WQnNHtAcu44RJ1/GVHurxghaCKHeJYsZ8H7DEeI6";133134static char passphrase[] = "passphrase".toCharArray();135136// Create the SSLContext instance.137private static SSLContext generateSSLContext() throws Exception {138139// generate certificate from cert string140CertificateFactory cf = CertificateFactory.getInstance("X.509");141142// create a key store143KeyStore ks = KeyStore.getInstance("JKS");144ks.load(null, null);145146// import the trused cert147X509Certificate trusedCert = null;148ByteArrayInputStream is =149new ByteArrayInputStream(trustedCertStr.getBytes());150trusedCert = (X509Certificate)cf.generateCertificate(is);151is.close();152153ks.setCertificateEntry("Trusted EC Signer", trusedCert);154155// generate the private key.156PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(157Base64.getMimeDecoder().decode(targetPrivateKey));158KeyFactory kf = KeyFactory.getInstance("EC");159ECPrivateKey priKey =160(ECPrivateKey)kf.generatePrivate(priKeySpec);161162// generate certificate chain163is = new ByteArrayInputStream(targetCertStr.getBytes());164X509Certificate keyCert = (X509Certificate)cf.generateCertificate(is);165is.close();166167X509Certificate[] chain = new X509Certificate[2];168chain[0] = keyCert;169chain[1] = trusedCert;170171// import the key entry and the chain172ks.setKeyEntry("TheKey", priKey, passphrase, chain);173174// create SSL context175TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");176tmf.init(ks);177178KeyManagerFactory kmf = KeyManagerFactory.getInstance("NewSunX509");179kmf.init(ks, passphrase);180181SSLContext ctx = SSLContext.getInstance("TLSv1.3");182ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);183ks = null;184185return ctx;186}187}188189190