Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/net/ssl/sanity/ciphersuites/CheckCipherSuites.java
38861 views
1
/*
2
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 4750141 4895631 8217579
27
* @summary Check enabled and supported ciphersuites are correct
28
* @run main/othervm -Djdk.tls.client.protocols="TLSv1.3,TLSv1.2,TLSv1.1,TLSv1,SSLv3" CheckCipherSuites default
29
* @run main/othervm -Djdk.tls.client.protocols="TLSv1.3,TLSv1.2,TLSv1.1,TLSv1,SSLv3" CheckCipherSuites limited
30
*/
31
32
import java.util.*;
33
import java.security.Security;
34
import javax.net.ssl.*;
35
36
public class CheckCipherSuites {
37
38
// List of enabled cipher suites when the "crypto.policy" security
39
// property is set to "unlimited" (the default value).
40
private final static String[] ENABLED_DEFAULT = {
41
"TLS_AES_128_GCM_SHA256",
42
"TLS_AES_256_GCM_SHA384",
43
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
44
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
45
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
46
"TLS_RSA_WITH_AES_256_GCM_SHA384",
47
"TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384",
48
"TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384",
49
"TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
50
"TLS_DHE_DSS_WITH_AES_256_GCM_SHA384",
51
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
52
"TLS_RSA_WITH_AES_128_GCM_SHA256",
53
"TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256",
54
"TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256",
55
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
56
"TLS_DHE_DSS_WITH_AES_128_GCM_SHA256",
57
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
58
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
59
"TLS_RSA_WITH_AES_256_CBC_SHA256",
60
"TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
61
"TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
62
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
63
"TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
64
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
65
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
66
"TLS_RSA_WITH_AES_256_CBC_SHA",
67
"TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
68
"TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
69
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
70
"TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
71
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
72
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
73
"TLS_RSA_WITH_AES_128_CBC_SHA256",
74
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
75
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
76
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
77
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
78
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
79
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
80
"TLS_RSA_WITH_AES_128_CBC_SHA",
81
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
82
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
83
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
84
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
85
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
86
};
87
88
// List of enabled cipher suites when the "crypto.policy" security
89
// property is set to "limited".
90
private final static String[] ENABLED_LIMITED = {
91
"TLS_AES_128_GCM_SHA256",
92
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
93
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
94
"TLS_RSA_WITH_AES_128_GCM_SHA256",
95
"TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256",
96
"TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256",
97
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
98
"TLS_DHE_DSS_WITH_AES_128_GCM_SHA256",
99
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
100
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
101
"TLS_RSA_WITH_AES_128_CBC_SHA256",
102
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
103
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
104
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
105
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
106
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
107
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
108
"TLS_RSA_WITH_AES_128_CBC_SHA",
109
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
110
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
111
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
112
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
113
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
114
};
115
116
// List of supported cipher suites when the "crypto.policy" security
117
// property is set to "unlimited" (the default value).
118
private final static String[] SUPPORTED_DEFAULT = {
119
"TLS_AES_128_GCM_SHA256",
120
"TLS_AES_256_GCM_SHA384",
121
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
122
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
123
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
124
"TLS_RSA_WITH_AES_256_GCM_SHA384",
125
"TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384",
126
"TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384",
127
"TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
128
"TLS_DHE_DSS_WITH_AES_256_GCM_SHA384",
129
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
130
"TLS_RSA_WITH_AES_128_GCM_SHA256",
131
"TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256",
132
"TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256",
133
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
134
"TLS_DHE_DSS_WITH_AES_128_GCM_SHA256",
135
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
136
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
137
"TLS_RSA_WITH_AES_256_CBC_SHA256",
138
"TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
139
"TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
140
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
141
"TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
142
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
143
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
144
"TLS_RSA_WITH_AES_256_CBC_SHA",
145
"TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
146
"TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
147
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
148
"TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
149
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
150
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
151
"TLS_RSA_WITH_AES_128_CBC_SHA256",
152
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
153
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
154
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
155
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
156
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
157
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
158
"TLS_RSA_WITH_AES_128_CBC_SHA",
159
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
160
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
161
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
162
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
163
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
164
};
165
166
// List of supported cipher suites when the "crypto.policy" security
167
// property is set to "limited".
168
private final static String[] SUPPORTED_LIMITED = {
169
"TLS_AES_128_GCM_SHA256",
170
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
171
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
172
"TLS_RSA_WITH_AES_128_GCM_SHA256",
173
"TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256",
174
"TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256",
175
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
176
"TLS_DHE_DSS_WITH_AES_128_GCM_SHA256",
177
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
178
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
179
"TLS_RSA_WITH_AES_128_CBC_SHA256",
180
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
181
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
182
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
183
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
184
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
185
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
186
"TLS_RSA_WITH_AES_128_CBC_SHA",
187
"TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
188
"TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
189
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
190
"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
191
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV"
192
};
193
194
private static void showSuites(String[] suites) {
195
if ((suites == null) || (suites.length == 0)) {
196
System.out.println("<none>");
197
}
198
for (int i = 0; i < suites.length; i++) {
199
System.out.println(" " + suites[i]);
200
}
201
}
202
203
public static void main(String[] args) throws Exception {
204
long start = System.currentTimeMillis();
205
206
if (args.length != 1) {
207
throw new Exception("One arg required");
208
}
209
210
String[] ENABLED;
211
String[] SUPPORTED;
212
if (args[0].equals("default")) {
213
ENABLED = ENABLED_DEFAULT;
214
SUPPORTED = SUPPORTED_DEFAULT;
215
} else if (args[0].equals("limited")) {
216
Security.setProperty("crypto.policy", "limited");
217
ENABLED = ENABLED_LIMITED;
218
SUPPORTED = SUPPORTED_LIMITED;
219
} else {
220
throw new Exception("Illegal argument");
221
}
222
223
SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
224
SSLSocket socket = (SSLSocket)factory.createSocket();
225
String[] enabled = socket.getEnabledCipherSuites();
226
227
System.out.println("Default enabled ciphersuites:");
228
showSuites(enabled);
229
230
if (Arrays.equals(ENABLED, enabled) == false) {
231
System.out.println("*** MISMATCH, should be ***");
232
showSuites(ENABLED);
233
throw new Exception("Enabled ciphersuite mismatch");
234
}
235
System.out.println("OK");
236
System.out.println();
237
238
String[] supported = socket.getSupportedCipherSuites();
239
System.out.println("Supported ciphersuites:");
240
showSuites(supported);
241
242
if (Arrays.equals(SUPPORTED, supported) == false) {
243
System.out.println("*** MISMATCH, should be ***");
244
showSuites(SUPPORTED);
245
throw new Exception("Supported ciphersuite mismatch");
246
}
247
System.out.println("OK");
248
249
long end = System.currentTimeMillis();
250
System.out.println("Done (" + (end - start) + " ms).");
251
}
252
253
}
254
255