Path: blob/master/test/jdk/javax/net/ssl/compatibility/BasicConnectTest.java
41152 views
/*1* Copyright (c) 2020, 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* @summary This is an interop compatibility test on basic handshaking and26* client authentication against all SSL/TLS protocols.27*28* @library /test/lib29* ../TLSCommon30* ../TLSCommon/interop31* @compile -source 1.8 -target 1.832* JdkInfoUtils.java33* ../TLSCommon/interop/JdkProcServer.java34* ../TLSCommon/interop/JdkProcClient.java35* @run main/manual BasicConnectTest true36* @run main/manual BasicConnectTest false37*/3839import java.nio.file.Paths;40import java.util.ArrayList;41import java.util.List;42import java.util.Set;4344public class BasicConnectTest extends BaseInteropTest<UseCase> {4546private JdkInfo serverJdkInfo;47private JdkInfo clientJdkInfo;4849public BasicConnectTest(JdkInfo serverJdkInfo, JdkInfo clientJdkInfo) {50super(new Jdk(serverJdkInfo.version, serverJdkInfo.javaPath),51new Jdk(clientJdkInfo.version, clientJdkInfo.javaPath));5253this.serverJdkInfo = serverJdkInfo;54this.clientJdkInfo = clientJdkInfo;55}5657@Override58protected List<TestCase<UseCase>> getTestCases() {59List<TestCase<UseCase>> useCases = new ArrayList<>();60for (Protocol protocol : new Protocol[] {61Protocol.SSLV3,62Protocol.TLSV1,63Protocol.TLSV1_1,64Protocol.TLSV1_2,65Protocol.TLSV1_3 }) {66for (CipherSuite cipherSuite : Utilities.ALL_CIPHER_SUITES) {67if (!cipherSuite.supportedByProtocol(protocol)) {68continue;69}7071Cert cert = Utils.getCert(cipherSuite.keyExAlgorithm);72CertTuple certTuple = new CertTuple(cert, cert);7374UseCase serverCase = UseCase.newInstance()75.setCertTuple(certTuple)76.setClientAuth(true);7778UseCase clientCase = UseCase.newInstance()79.setCertTuple(certTuple)80.setProtocols(protocol)81.setCipherSuites(cipherSuite);8283useCases.add(new TestCase<UseCase>(serverCase, clientCase));84}85}86return useCases;87}8889@Override90protected boolean ignoreTestCase(TestCase<UseCase> testCase) {91Protocol protocol = testCase.clientCase.getProtocol();92CipherSuite cipherSuite = testCase.clientCase.getCipherSuite();93return !supportsProtocol(protocol)94|| !supportsCipherSuite(cipherSuite)95// DHE_DSS cipher suites cannot work with pre-TLSv1.2 protocols,96// see JDK-8242928 for more details.97|| (protocol.id < Protocol.TLSV1_2.id98&& (cipherSuite.keyExAlgorithm == KeyExAlgorithm.DHE_DSS99|| cipherSuite.keyExAlgorithm == KeyExAlgorithm.DHE_DSS_EXPORT));100}101102private boolean supportsProtocol(Protocol protocol) {103return serverJdkInfo.enablesProtocol(protocol)104&& clientJdkInfo.supportsProtocol(protocol);105}106107private boolean supportsCipherSuite(CipherSuite cipherSuite) {108return serverJdkInfo.enablesCipherSuite(cipherSuite)109&& clientJdkInfo.supportsCipherSuite(cipherSuite);110}111112@Override113protected AbstractServer.Builder createServerBuilder(UseCase useCase)114throws Exception {115return serverJdkInfo == JdkInfo.DEFAULT116? createJdkServerBuilder(useCase)117: createAltJdkServerBuilder(useCase);118}119120private JdkServer.Builder createJdkServerBuilder(UseCase useCase) {121JdkServer.Builder builder = new JdkServer.Builder();122builder.setCertTuple(useCase.getCertTuple());123builder.setProtocols(useCase.getProtocols());124builder.setCipherSuites(useCase.getCipherSuites());125builder.setClientAuth(useCase.isClientAuth());126return builder;127}128129private JdkProcServer.Builder createAltJdkServerBuilder(UseCase useCase) {130JdkProcServer.Builder builder = new JdkProcServer.Builder();131builder.setJdk((Jdk) serverProduct);132builder.setSecPropsFile(Paths.get(Utils.SEC_PROPS_FILE));133builder.setCertTuple(useCase.getCertTuple());134builder.setProtocols(useCase.getProtocols());135builder.setCipherSuites(useCase.getCipherSuites());136builder.setClientAuth(useCase.isClientAuth());137return builder;138}139140@Override141protected AbstractClient.Builder createClientBuilder(UseCase useCase)142throws Exception {143return serverJdkInfo == JdkInfo.DEFAULT144? createJdkClientBuilder(useCase)145: createAltJdkClientBuilder(useCase);146}147148private JdkClient.Builder createJdkClientBuilder(UseCase useCase) {149JdkClient.Builder builder = new JdkClient.Builder();150builder.setCertTuple(useCase.getCertTuple());151builder.setProtocols(useCase.getProtocols());152builder.setCipherSuites(useCase.getCipherSuites());153return builder;154}155156private JdkProcClient.Builder createAltJdkClientBuilder(UseCase useCase) {157JdkProcClient.Builder builder = new JdkProcClient.Builder();158builder.setJdk((Jdk) clientProduct);159builder.setSecPropsFile(Paths.get(Utils.SEC_PROPS_FILE));160builder.setCertTuple(useCase.getCertTuple());161builder.setProtocols(useCase.getProtocols());162builder.setCipherSuites(useCase.getCipherSuites());163return builder;164}165166public static void main(String[] args) throws Exception {167Boolean defaultJdkAsServer = Boolean.valueOf(args[0]);168169System.setProperty("java.security.properties", Utils.SEC_PROPS_FILE);170171Set<JdkInfo> jdkInfos = Utils.jdkInfoList();172for (JdkInfo jdkInfo : jdkInfos) {173BasicConnectTest test = new BasicConnectTest(174defaultJdkAsServer ? JdkInfo.DEFAULT : jdkInfo,175defaultJdkAsServer ? jdkInfo : JdkInfo.DEFAULT);176test.execute();177}178}179}180181182