Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/net/ssl/templates/SSLSocketTemplate.java
41152 views
1
/*
2
* Copyright (c) 2016, 2021, 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
// Please run in othervm mode. SunJSSE does not support dynamic system
26
// properties, no way to re-use system properties in samevm/agentvm mode.
27
//
28
29
/*
30
* @test
31
* @bug 8161106 8170329
32
* @modules jdk.crypto.ec
33
* @summary Improve SSLSocket test template
34
* @run main/othervm SSLSocketTemplate
35
*/
36
37
import java.io.ByteArrayInputStream;
38
import java.io.InputStream;
39
import java.io.IOException;
40
import java.io.OutputStream;
41
import javax.net.ssl.KeyManagerFactory;
42
import javax.net.ssl.SSLContext;
43
import javax.net.ssl.SSLServerSocket;
44
import javax.net.ssl.SSLServerSocketFactory;
45
import javax.net.ssl.SSLSocket;
46
import javax.net.ssl.SSLSocketFactory;
47
import javax.net.ssl.TrustManagerFactory;
48
import java.net.InetAddress;
49
import java.net.InetSocketAddress;
50
import java.net.SocketTimeoutException;
51
import java.security.KeyStore;
52
import java.security.PrivateKey;
53
import java.security.KeyFactory;
54
import java.security.cert.Certificate;
55
import java.security.cert.CertificateFactory;
56
import java.security.spec.PKCS8EncodedKeySpec;
57
import java.util.Base64;
58
59
import java.util.concurrent.CountDownLatch;
60
import java.util.concurrent.TimeUnit;
61
62
/**
63
* Template to help speed your client/server tests.
64
*
65
* Two examples that use this template:
66
* test/jdk/sun/security/ssl/ServerHandshaker/AnonCipherWithWantClientAuth.java
67
* test/jdk/sun/net/www/protocol/https/HttpsClient/ServerIdentityTest.java
68
*/
69
public class SSLSocketTemplate {
70
71
/*
72
* ==================
73
* Run the test case.
74
*/
75
public static void main(String[] args) throws Exception {
76
(new SSLSocketTemplate()).run();
77
}
78
79
/*
80
* Run the test case.
81
*/
82
public void run() throws Exception {
83
bootup();
84
}
85
86
/*
87
* Define the server side application of the test for the specified socket.
88
*/
89
protected void runServerApplication(SSLSocket socket) throws Exception {
90
// here comes the test logic
91
InputStream sslIS = socket.getInputStream();
92
OutputStream sslOS = socket.getOutputStream();
93
94
sslIS.read();
95
sslOS.write(85);
96
sslOS.flush();
97
}
98
99
/*
100
* Define the client side application of the test for the specified socket.
101
* This method is used if the returned value of
102
* isCustomizedClientConnection() is false.
103
*
104
* @param socket may be null is no client socket is generated.
105
*
106
* @see #isCustomizedClientConnection()
107
*/
108
protected void runClientApplication(SSLSocket socket) throws Exception {
109
InputStream sslIS = socket.getInputStream();
110
OutputStream sslOS = socket.getOutputStream();
111
112
sslOS.write(280);
113
sslOS.flush();
114
sslIS.read();
115
}
116
117
/*
118
* Define the client side application of the test for the specified
119
* server port. This method is used if the returned value of
120
* isCustomizedClientConnection() is true.
121
*
122
* Note that the client need to connect to the server port by itself
123
* for the actual message exchange.
124
*
125
* @see #isCustomizedClientConnection()
126
*/
127
protected void runClientApplication(int serverPort) throws Exception {
128
// blank
129
}
130
131
/*
132
* Create an instance of SSLContext for client use.
133
*/
134
protected SSLContext createClientSSLContext() throws Exception {
135
return createSSLContext(TRUSTED_CERTS, END_ENTITY_CERTS,
136
getClientContextParameters());
137
}
138
139
/*
140
* Create an instance of SSLContext for server use.
141
*/
142
protected SSLContext createServerSSLContext() throws Exception {
143
return createSSLContext(TRUSTED_CERTS, END_ENTITY_CERTS,
144
getServerContextParameters());
145
}
146
147
/*
148
* The parameters used to configure SSLContext.
149
*/
150
protected static final class ContextParameters {
151
final String contextProtocol;
152
final String tmAlgorithm;
153
final String kmAlgorithm;
154
155
ContextParameters(String contextProtocol,
156
String tmAlgorithm, String kmAlgorithm) {
157
158
this.contextProtocol = contextProtocol;
159
this.tmAlgorithm = tmAlgorithm;
160
this.kmAlgorithm = kmAlgorithm;
161
}
162
}
163
164
/*
165
* Get the client side parameters of SSLContext.
166
*/
167
protected ContextParameters getClientContextParameters() {
168
return new ContextParameters("TLS", "PKIX", "NewSunX509");
169
}
170
171
/*
172
* Get the server side parameters of SSLContext.
173
*/
174
protected ContextParameters getServerContextParameters() {
175
return new ContextParameters("TLS", "PKIX", "NewSunX509");
176
}
177
178
/*
179
* Does the client side use customized connection other than
180
* explicit Socket.connect(), for example, URL.openConnection()?
181
*/
182
protected boolean isCustomizedClientConnection() {
183
return false;
184
}
185
186
/*
187
* Configure the client side socket.
188
*/
189
protected void configureClientSocket(SSLSocket socket) {
190
}
191
192
/*
193
* Configure the server side socket.
194
*/
195
protected void configureServerSocket(SSLServerSocket socket) {
196
}
197
198
/*
199
* =============================================
200
* Define the client and server side operations.
201
*
202
* If the client or server is doing some kind of object creation
203
* that the other side depends on, and that thread prematurely
204
* exits, you may experience a hang. The test harness will
205
* terminate all hung threads after its timeout has expired,
206
* currently 3 minutes by default, but you might try to be
207
* smart about it....
208
*/
209
210
/*
211
* Is the server ready to serve?
212
*/
213
private final CountDownLatch serverCondition = new CountDownLatch(1);
214
215
/*
216
* Is the client ready to handshake?
217
*/
218
private final CountDownLatch clientCondition = new CountDownLatch(1);
219
220
/*
221
* What's the server port? Use any free port by default
222
*/
223
protected volatile int serverPort = 0;
224
225
/*
226
* What's the server address? null means binding to the wildcard.
227
*/
228
protected volatile InetAddress serverAddress = null;
229
230
/*
231
* Define the server side of the test.
232
*/
233
protected void doServerSide() throws Exception {
234
// kick start the server side service
235
SSLContext context = createServerSSLContext();
236
SSLServerSocketFactory sslssf = context.getServerSocketFactory();
237
InetAddress serverAddress = this.serverAddress;
238
SSLServerSocket sslServerSocket = serverAddress == null ?
239
(SSLServerSocket)sslssf.createServerSocket(serverPort)
240
: (SSLServerSocket)sslssf.createServerSocket();
241
if (serverAddress != null) {
242
sslServerSocket.bind(new InetSocketAddress(serverAddress, serverPort));
243
}
244
configureServerSocket(sslServerSocket);
245
serverPort = sslServerSocket.getLocalPort();
246
247
// Signal the client, the server is ready to accept connection.
248
serverCondition.countDown();
249
250
// Try to accept a connection in 30 seconds.
251
SSLSocket sslSocket;
252
try {
253
sslServerSocket.setSoTimeout(30000);
254
sslSocket = (SSLSocket)sslServerSocket.accept();
255
} catch (SocketTimeoutException ste) {
256
// Ignore the test case if no connection within 30 seconds.
257
System.out.println(
258
"No incoming client connection in 30 seconds. " +
259
"Ignore in server side.");
260
return;
261
} finally {
262
sslServerSocket.close();
263
}
264
265
// handle the connection
266
try {
267
// Is it the expected client connection?
268
//
269
// Naughty test cases or third party routines may try to
270
// connection to this server port unintentionally. In
271
// order to mitigate the impact of unexpected client
272
// connections and avoid intermittent failure, it should
273
// be checked that the accepted connection is really linked
274
// to the expected client.
275
boolean clientIsReady =
276
clientCondition.await(30L, TimeUnit.SECONDS);
277
278
if (clientIsReady) {
279
// Run the application in server side.
280
runServerApplication(sslSocket);
281
} else { // Otherwise, ignore
282
// We don't actually care about plain socket connections
283
// for TLS communication testing generally. Just ignore
284
// the test if the accepted connection is not linked to
285
// the expected client or the client connection timeout
286
// in 30 seconds.
287
System.out.println(
288
"The client is not the expected one or timeout. " +
289
"Ignore in server side.");
290
}
291
} finally {
292
sslSocket.close();
293
}
294
}
295
296
/*
297
* Define the client side of the test.
298
*/
299
protected void doClientSide() throws Exception {
300
301
// Wait for server to get started.
302
//
303
// The server side takes care of the issue if the server cannot
304
// get started in 90 seconds. The client side would just ignore
305
// the test case if the serer is not ready.
306
boolean serverIsReady =
307
serverCondition.await(90L, TimeUnit.SECONDS);
308
if (!serverIsReady) {
309
System.out.println(
310
"The server is not ready yet in 90 seconds. " +
311
"Ignore in client side.");
312
return;
313
}
314
315
if (isCustomizedClientConnection()) {
316
// Signal the server, the client is ready to communicate.
317
clientCondition.countDown();
318
319
// Run the application in client side.
320
runClientApplication(serverPort);
321
322
return;
323
}
324
325
SSLContext context = createClientSSLContext();
326
SSLSocketFactory sslsf = context.getSocketFactory();
327
328
try (SSLSocket sslSocket = (SSLSocket)sslsf.createSocket()) {
329
try {
330
configureClientSocket(sslSocket);
331
InetAddress serverAddress = this.serverAddress;
332
InetSocketAddress connectAddress = serverAddress == null
333
? new InetSocketAddress("localhost", serverPort)
334
: new InetSocketAddress(serverAddress, serverPort);
335
sslSocket.connect(connectAddress, 15000);
336
} catch (IOException ioe) {
337
// The server side may be impacted by naughty test cases or
338
// third party routines, and cannot accept connections.
339
//
340
// Just ignore the test if the connection cannot be
341
// established.
342
System.out.println(
343
"Cannot make a connection in 15 seconds. " +
344
"Ignore in client side.");
345
return;
346
}
347
348
// OK, here the client and server get connected.
349
350
// Signal the server, the client is ready to communicate.
351
clientCondition.countDown();
352
353
// There is still a chance in theory that the server thread may
354
// wait client-ready timeout and then quit. The chance should
355
// be really rare so we don't consider it until it becomes a
356
// real problem.
357
358
// Run the application in client side.
359
runClientApplication(sslSocket);
360
}
361
}
362
363
/*
364
* =============================================
365
* Stuffs to customize the SSLContext instances.
366
*/
367
368
/*
369
* =======================================
370
* Certificates and keys used in the test.
371
*/
372
// Trusted certificates.
373
protected final static Cert[] TRUSTED_CERTS = {
374
Cert.CA_ECDSA_SECP256R1,
375
Cert.CA_RSA_2048,
376
Cert.CA_DSA_2048 };
377
378
// End entity certificate.
379
protected final static Cert[] END_ENTITY_CERTS = {
380
Cert.EE_ECDSA_SECP256R1,
381
Cert.EE_RSA_2048,
382
Cert.EE_EC_RSA_SECP256R1,
383
Cert.EE_DSA_2048 };
384
385
/*
386
* Create an instance of SSLContext with the specified trust/key materials.
387
*/
388
public static SSLContext createSSLContext(
389
Cert[] trustedCerts,
390
Cert[] endEntityCerts,
391
ContextParameters params) throws Exception {
392
393
KeyStore ts = null; // trust store
394
KeyStore ks = null; // key store
395
char passphrase[] = "passphrase".toCharArray();
396
397
// Generate certificate from cert string.
398
CertificateFactory cf = CertificateFactory.getInstance("X.509");
399
400
// Import the trused certs.
401
ByteArrayInputStream is;
402
if (trustedCerts != null && trustedCerts.length != 0) {
403
ts = KeyStore.getInstance("JKS");
404
ts.load(null, null);
405
406
Certificate[] trustedCert = new Certificate[trustedCerts.length];
407
for (int i = 0; i < trustedCerts.length; i++) {
408
is = new ByteArrayInputStream(trustedCerts[i].certStr.getBytes());
409
try {
410
trustedCert[i] = cf.generateCertificate(is);
411
} finally {
412
is.close();
413
}
414
415
ts.setCertificateEntry(
416
"trusted-cert-" + trustedCerts[i].name(), trustedCert[i]);
417
}
418
}
419
420
// Import the key materials.
421
if (endEntityCerts != null && endEntityCerts.length != 0) {
422
ks = KeyStore.getInstance("JKS");
423
ks.load(null, null);
424
425
for (int i = 0; i < endEntityCerts.length; i++) {
426
// generate the private key.
427
PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec(
428
Base64.getMimeDecoder().decode(endEntityCerts[i].privKeyStr));
429
KeyFactory kf =
430
KeyFactory.getInstance(
431
endEntityCerts[i].keyAlgo);
432
PrivateKey priKey = kf.generatePrivate(priKeySpec);
433
434
// generate certificate chain
435
is = new ByteArrayInputStream(
436
endEntityCerts[i].certStr.getBytes());
437
Certificate keyCert = null;
438
try {
439
keyCert = cf.generateCertificate(is);
440
} finally {
441
is.close();
442
}
443
444
Certificate[] chain = new Certificate[] { keyCert };
445
446
// import the key entry.
447
ks.setKeyEntry("cert-" + endEntityCerts[i].name(),
448
priKey, passphrase, chain);
449
}
450
}
451
452
// Create an SSLContext object.
453
TrustManagerFactory tmf =
454
TrustManagerFactory.getInstance(params.tmAlgorithm);
455
tmf.init(ts);
456
457
SSLContext context = SSLContext.getInstance(params.contextProtocol);
458
if (endEntityCerts != null && endEntityCerts.length != 0 && ks != null) {
459
KeyManagerFactory kmf =
460
KeyManagerFactory.getInstance(params.kmAlgorithm);
461
kmf.init(ks, passphrase);
462
463
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
464
} else {
465
context.init(null, tmf.getTrustManagers(), null);
466
}
467
468
return context;
469
}
470
471
/*
472
* =================================================
473
* Stuffs to boot up the client-server mode testing.
474
*/
475
private Thread clientThread = null;
476
private Thread serverThread = null;
477
private volatile Exception serverException = null;
478
private volatile Exception clientException = null;
479
480
/*
481
* Should we run the client or server in a separate thread?
482
* Both sides can throw exceptions, but do you have a preference
483
* as to which side should be the main thread.
484
*/
485
private static final boolean separateServerThread = false;
486
487
/*
488
* Boot up the testing, used to drive remainder of the test.
489
*/
490
private void bootup() throws Exception {
491
Exception startException = null;
492
try {
493
if (separateServerThread) {
494
startServer(true);
495
startClient(false);
496
} else {
497
startClient(true);
498
startServer(false);
499
}
500
} catch (Exception e) {
501
startException = e;
502
}
503
504
/*
505
* Wait for other side to close down.
506
*/
507
if (separateServerThread) {
508
if (serverThread != null) {
509
serverThread.join();
510
}
511
} else {
512
if (clientThread != null) {
513
clientThread.join();
514
}
515
}
516
517
/*
518
* When we get here, the test is pretty much over.
519
* Which side threw the error?
520
*/
521
Exception local;
522
Exception remote;
523
524
if (separateServerThread) {
525
remote = serverException;
526
local = clientException;
527
} else {
528
remote = clientException;
529
local = serverException;
530
}
531
532
Exception exception = null;
533
534
/*
535
* Check various exception conditions.
536
*/
537
if ((local != null) && (remote != null)) {
538
// If both failed, return the curthread's exception.
539
local.initCause(remote);
540
exception = local;
541
} else if (local != null) {
542
exception = local;
543
} else if (remote != null) {
544
exception = remote;
545
} else if (startException != null) {
546
exception = startException;
547
}
548
549
/*
550
* If there was an exception *AND* a startException,
551
* output it.
552
*/
553
if (exception != null) {
554
if (exception != startException && startException != null) {
555
exception.addSuppressed(startException);
556
}
557
throw exception;
558
}
559
560
// Fall-through: no exception to throw!
561
}
562
563
private void startServer(boolean newThread) throws Exception {
564
if (newThread) {
565
serverThread = new Thread() {
566
@Override
567
public void run() {
568
try {
569
doServerSide();
570
} catch (Exception e) {
571
/*
572
* Our server thread just died.
573
*
574
* Release the client, if not active already...
575
*/
576
logException("Server died", e);
577
serverException = e;
578
}
579
}
580
};
581
serverThread.start();
582
} else {
583
try {
584
doServerSide();
585
} catch (Exception e) {
586
logException("Server failed", e);
587
serverException = e;
588
}
589
}
590
}
591
592
private void startClient(boolean newThread) throws Exception {
593
if (newThread) {
594
clientThread = new Thread() {
595
@Override
596
public void run() {
597
try {
598
doClientSide();
599
} catch (Exception e) {
600
/*
601
* Our client thread just died.
602
*/
603
logException("Client died", e);
604
clientException = e;
605
}
606
}
607
};
608
clientThread.start();
609
} else {
610
try {
611
doClientSide();
612
} catch (Exception e) {
613
logException("Client failed", e);
614
clientException = e;
615
}
616
}
617
}
618
619
private synchronized void logException(String prefix, Throwable cause) {
620
System.out.println(prefix + ": " + cause);
621
cause.printStackTrace(System.out);
622
}
623
624
public static enum Cert {
625
626
CA_ECDSA_SECP256R1(
627
"EC",
628
// SHA256withECDSA, curve secp256r1
629
// Validity
630
// Not Before: May 22 07:18:16 2018 GMT
631
// Not After : May 17 07:18:16 2038 GMT
632
// Subject Key Identifier:
633
// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
634
"-----BEGIN CERTIFICATE-----\n" +
635
"MIIBvjCCAWOgAwIBAgIJAIvFG6GbTroCMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
636
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
637
"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYTAlVT\n" +
638
"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTBZ\n" +
639
"MBMGByqGSM49AgEGCCqGSM49AwEHA0IABBz1WeVb6gM2mh85z3QlvaB/l11b5h0v\n" +
640
"LIzmkC3DKlVukZT+ltH2Eq1oEkpXuf7QmbM0ibrUgtjsWH3mULfmcWmjUDBOMB0G\n" +
641
"A1UdDgQWBBRgz71z//oaMNKk7NNJcUbvGjWghjAfBgNVHSMEGDAWgBRgz71z//oa\n" +
642
"MNKk7NNJcUbvGjWghjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kAMEYCIQCG\n" +
643
"6wluh1r2/T6L31mZXRKf9JxeSf9pIzoLj+8xQeUChQIhAJ09wAi1kV8yePLh2FD9\n" +
644
"2YEHlSQUAbwwqCDEVB5KxaqP\n" +
645
"-----END CERTIFICATE-----",
646
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/HcHdoLJCdq3haVd\n" +
647
"XZTSKP00YzM3xX97l98vGL/RI1KhRANCAAQc9VnlW+oDNpofOc90Jb2gf5ddW+Yd\n" +
648
"LyyM5pAtwypVbpGU/pbR9hKtaBJKV7n+0JmzNIm61ILY7Fh95lC35nFp"),
649
650
CA_ECDSA_SECP384R1(
651
"EC",
652
// SHA384withECDSA, curve secp384r1
653
// Validity
654
// Not Before: Jun 24 08:15:06 2019 GMT
655
// Not After : Jun 19 08:15:06 2039 GMT
656
// Subject Key Identifier:
657
// 0a:93:a9:a0:bf:e7:d5:48:9d:4f:89:15:c6:51:98:80:05:51:4e:4e
658
"-----BEGIN CERTIFICATE-----\n" +
659
"MIICCDCCAY6gAwIBAgIUCpOpoL/n1UidT4kVxlGYgAVRTk4wCgYIKoZIzj0EAwMw\n" +
660
"OzELMAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0Ug\n" +
661
"VGVzdCBTZXJpdmNlMB4XDTE5MDYyNDA4MTUwNloXDTM5MDYxOTA4MTUwNlowOzEL\n" +
662
"MAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0UgVGVz\n" +
663
"dCBTZXJpdmNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENVQN1wXWFdgC6u/dDdiC\n" +
664
"y+WtMTF66oL/0BSm+1ZqsogamzCryawOcHgiuXgWzx5CQ3LuOC+tDFyXpGfHuCvb\n" +
665
"dkzxPrP5n9NrR8/uRPe5l1KOUbchviU8z9cTP+LZxnZDo1MwUTAdBgNVHQ4EFgQU\n" +
666
"SktSFArR1p/5mXV0kyo0RxIVa/UwHwYDVR0jBBgwFoAUSktSFArR1p/5mXV0kyo0\n" +
667
"RxIVa/UwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjBZvoNmq3/v\n" +
668
"RD2gBTyvxjS9h0rsMRLHDnvul/KWngytwGPTOBo0Y8ixQXSjdKoc3rkCMQDkiNgx\n" +
669
"IDxuHedmrLQKIPnVcthTmwv7//jHiqGoKofwChMo2a1P+DQdhszmeHD/ARQ=\n" +
670
"-----END CERTIFICATE-----",
671
"MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDChlbt0NF8oIKODSxn2\n" +
672
"WXCXuJm3z78LRkzYQS3Nx5NMjei5ytkFZz4qvD4XXMWlTEyhZANiAAQ1VA3XBdYV\n" +
673
"2ALq790N2ILL5a0xMXrqgv/QFKb7VmqyiBqbMKvJrA5weCK5eBbPHkJDcu44L60M\n" +
674
"XJekZ8e4K9t2TPE+s/mf02tHz+5E97mXUo5RtyG+JTzP1xM/4tnGdkM="),
675
676
CA_ECDSA_SECP521R1(
677
"EC",
678
// SHA512withECDSA, curve secp521r1
679
// Validity
680
// Not Before: Jun 24 08:15:06 2019 GMT
681
// Not After : Jun 19 08:15:06 2039 GMT
682
// Subject Key Identifier:
683
// 25:ca:68:76:6d:29:17:9b:71:78:45:2d:d4:c6:e4:5d:fe:25:ff:90
684
"-----BEGIN CERTIFICATE-----\n" +
685
"MIICUzCCAbSgAwIBAgIUJcpodm0pF5txeEUt1MbkXf4l/5AwCgYIKoZIzj0EAwQw\n" +
686
"OzELMAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0Ug\n" +
687
"VGVzdCBTZXJpdmNlMB4XDTE5MDYyNDA4MTUwNloXDTM5MDYxOTA4MTUwNlowOzEL\n" +
688
"MAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0UgVGVz\n" +
689
"dCBTZXJpdmNlMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAmFD5VmB2MdyJ6k+E\n" +
690
"eP4JncrE65ySL07gVmFwnr8otOt3NtRAyzmviMNNXXjo5R5NqNjKP4pr92JjT0sO\n" +
691
"D65yngkBtH151Ev/fiKPLxkXL9GzfKdWHVhDX7Zg6DUydzukzZV2/dIyloAIqwlz\n" +
692
"QVKJqT7RypDufdng8hnE9YfKo6ypZiujUzBRMB0GA1UdDgQWBBRAIrxa7WqtqUCe\n" +
693
"HFuKREDC92spvTAfBgNVHSMEGDAWgBRAIrxa7WqtqUCeHFuKREDC92spvTAPBgNV\n" +
694
"HRMBAf8EBTADAQH/MAoGCCqGSM49BAMEA4GMADCBiAJCAe22iirZnODCmlpxcv57\n" +
695
"3g5BEE60C+dtYmTqR4DtFyDaTRQ5CFf4ZxvQPIbD+SXi5Cbrl6qtrZG0cjUihPkC\n" +
696
"Hi1hAkIAiEcO7nMPgQLny+GrciojfN+bZXME/dPz6KHBm/89f8Me+jawVnv6y+df\n" +
697
"2Sbafh1KV6ntWQtB4bK3MXV8Ym9Eg1I=\n" +
698
"-----END CERTIFICATE-----",
699
"MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAV8dZszV6+nLw3LeA\n" +
700
"Q+qLJLGaqyjlsQkaopCPcmoRdy1HX6AzB/YnKsPkHp/9DQN6A2JgUhFG5B0XvKSk\n" +
701
"BqNNuSGhgYkDgYYABACYUPlWYHYx3InqT4R4/gmdysTrnJIvTuBWYXCevyi063c2\n" +
702
"1EDLOa+Iw01deOjlHk2o2Mo/imv3YmNPSw4PrnKeCQG0fXnUS/9+Io8vGRcv0bN8\n" +
703
"p1YdWENftmDoNTJ3O6TNlXb90jKWgAirCXNBUompPtHKkO592eDyGcT1h8qjrKlm\n" +
704
"Kw=="),
705
706
CA_RSA_2048(
707
"RSA",
708
// SHA256withRSA, 2048 bits
709
// Validity
710
// Not Before: May 22 07:18:16 2018 GMT
711
// Not After : May 17 07:18:16 2038 GMT
712
// Subject Key Identifier:
713
// 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
714
"-----BEGIN CERTIFICATE-----\n" +
715
"MIIDSTCCAjGgAwIBAgIJAI4ZF3iy8zG+MA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
716
"BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
717
"aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMDsxCzAJBgNVBAYT\n" +
718
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
719
"ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALpMcY7aWieXDEM1/YJf\n" +
720
"JW27b4nRIFZyEYhEloyGsKTuQiiQjc8cqRZFNXe2vwziDB4IyTEl0Hjl5QF6ZaQE\n" +
721
"huPzzwvQm1pv64KrRXrmj3FisQK8B5OWLty9xp6xDqsaMRoyObLK+oIb20T5fSlE\n" +
722
"evmo1vYjnh8CX0Yzx5Gr5ye6YSEHQvYOWEws8ad17OlyToR2KMeC8w4qo6rs59pW\n" +
723
"g7Mxn9vo22ImDzrtAbTbXbCias3xlE0Bp0h5luyf+5U4UgksoL9B9r2oP4GrLNEV\n" +
724
"oJk57t8lwaR0upiv3CnS8LcJELpegZub5ggqLY8ZPYFQPjlK6IzLOm6rXPgZiZ3m\n" +
725
"RL0CAwEAAaNQME4wHQYDVR0OBBYEFA3dk8n+S701t+iZeJD721o92xVMMB8GA1Ud\n" +
726
"IwQYMBaAFA3dk8n+S701t+iZeJD721o92xVMMAwGA1UdEwQFMAMBAf8wDQYJKoZI\n" +
727
"hvcNAQELBQADggEBAJTRC3rKUUhVH07/1+stUungSYgpM08dY4utJq0BDk36BbmO\n" +
728
"0AnLDMbkwFdHEoqF6hQIfpm7SQTmXk0Fss6Eejm8ynYr6+EXiRAsaXOGOBCzF918\n" +
729
"/RuKOzqABfgSU4UBKECLM5bMfQTL60qx+HdbdVIpnikHZOFfmjCDVxoHsGyXc1LW\n" +
730
"Jhkht8IGOgc4PMGvyzTtRFjz01kvrVQZ75aN2E0GQv6dCxaEY0i3ypSzjUWAKqDh\n" +
731
"3e2OLwUSvumcdaxyCdZAOUsN6pDBQ+8VRG7KxnlRlY1SMEk46QgQYLbPDe/+W/yH\n" +
732
"ca4PejicPeh+9xRAwoTpiE2gulfT7Lm+fVM7Ruc=\n" +
733
"-----END CERTIFICATE-----",
734
"MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC6THGO2lonlwxD\n" +
735
"Nf2CXyVtu2+J0SBWchGIRJaMhrCk7kIokI3PHKkWRTV3tr8M4gweCMkxJdB45eUB\n" +
736
"emWkBIbj888L0Jtab+uCq0V65o9xYrECvAeTli7cvcaesQ6rGjEaMjmyyvqCG9tE\n" +
737
"+X0pRHr5qNb2I54fAl9GM8eRq+cnumEhB0L2DlhMLPGndezpck6EdijHgvMOKqOq\n" +
738
"7OfaVoOzMZ/b6NtiJg867QG0212womrN8ZRNAadIeZbsn/uVOFIJLKC/Qfa9qD+B\n" +
739
"qyzRFaCZOe7fJcGkdLqYr9wp0vC3CRC6XoGbm+YIKi2PGT2BUD45SuiMyzpuq1z4\n" +
740
"GYmd5kS9AgMBAAECggEAFHSoU2MuWwJ+2jJnb5U66t2V1bAcuOE1g5zkWvG/G5z9\n" +
741
"rq6Qo5kmB8f5ovdx6tw3MGUOklLwnRXBG3RxDJ1iokz3AvkY1clMNsDPlDsUrQKF\n" +
742
"JSO4QUBQTPSZhnsyfR8XHSU+qJ8Y+ohMfzpVv95BEoCzebtXdVgxVegBlcEmVHo2\n" +
743
"kMmkRN+bYNsr8eb2r+b0EpyumS39ZgKYh09+cFb78y3T6IFMGcVJTP6nlGBFkmA/\n" +
744
"25pYeCF2tSki08qtMJZQAvKfw0Kviibk7ZxRbJqmc7B1yfnOEHP6ftjuvKl2+RP/\n" +
745
"+5P5f8CfIP6gtA0LwSzAqQX/hfIKrGV5j0pCqrD0kQKBgQDeNR6Xi4sXVq79lihO\n" +
746
"a1bSeV7r8yoQrS8x951uO+ox+UIZ1MsAULadl7zB/P0er92p198I9M/0Jth3KBuS\n" +
747
"zj45mucvpiiGvmQlMKMEfNq4nN7WHOu55kufPswQB2mR4J3xmwI+4fM/nl1zc82h\n" +
748
"De8JSazRldJXNhfx0RGFPmgzbwKBgQDWoVXrXLbCAn41oVnWB8vwY9wjt92ztDqJ\n" +
749
"HMFA/SUohjePep9UDq6ooHyAf/Lz6oE5NgeVpPfTDkgvrCFVKnaWdwALbYoKXT2W\n" +
750
"9FlyJox6eQzrtHAacj3HJooXWuXlphKSizntfxj3LtMR9BmrmRJOfK+SxNOVJzW2\n" +
751
"+MowT20EkwKBgHmpB8jdZBgxI7o//m2BI5Y1UZ1KE5vx1kc7VXzHXSBjYqeV9FeF\n" +
752
"2ZZLP9POWh/1Fh4pzTmwIDODGT2UPhSQy0zq3O0fwkyT7WzXRknsuiwd53u/dejg\n" +
753
"iEL2NPAJvulZ2+AuiHo5Z99LK8tMeidV46xoJDDUIMgTG+UQHNGhK5gNAoGAZn/S\n" +
754
"Cn7SgMC0CWSvBHnguULXZO9wH1wZAFYNLL44OqwuaIUFBh2k578M9kkke7woTmwx\n" +
755
"HxQTjmWpr6qimIuY6q6WBN8hJ2Xz/d1fwhYKzIp20zHuv5KDUlJjbFfqpsuy3u1C\n" +
756
"kts5zwI7pr1ObRbDGVyOdKcu7HI3QtR5qqyjwaUCgYABo7Wq6oHva/9V34+G3Goh\n" +
757
"63bYGUnRw2l5BD11yhQv8XzGGZFqZVincD8gltNThB0Dc/BI+qu3ky4YdgdZJZ7K\n" +
758
"z51GQGtaHEbrHS5caV79yQ8QGY5mUVH3E+VXSxuIqb6pZq2DH4sTAEFHyncddmOH\n" +
759
"zoXBInYwRG9KE/Bw5elhUw=="),
760
761
CA_DSA_2048(
762
"DSA",
763
// SHA256withDSA, 2048 bits
764
// Validity
765
// Not Before: May 22 07:18:18 2018 GMT
766
// Not After : May 17 07:18:18 2038 GMT
767
// Subject Key Identifier:
768
// 76:66:9E:F7:3B:DD:45:E5:3B:D9:72:3C:3F:F0:54:39:86:31:26:53
769
"-----BEGIN CERTIFICATE-----\n" +
770
"MIIErjCCBFSgAwIBAgIJAOktYLNCbr02MAsGCWCGSAFlAwQDAjA7MQswCQYDVQQG\n" +
771
"EwJVUzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2\n" +
772
"Y2UwHhcNMTgwNTIyMDcxODE4WhcNMzgwNTE3MDcxODE4WjA7MQswCQYDVQQGEwJV\n" +
773
"UzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2Y2Uw\n" +
774
"ggNHMIICOQYHKoZIzjgEATCCAiwCggEBAO5GyPhSm0ze3LSu+gicdULLj05iOfTL\n" +
775
"UvZQ29sYz41zmqrLBQbdKiHqgJu2Re9sgTb5suLNjF047TOLPnU3jhPtWm2X8Xzi\n" +
776
"VGIcHym/Q/MeZxStt/88seqroI3WOKzIML2GcrishT+lcGrtH36Tf1+ue2Snn3PS\n" +
777
"WyxygNqPjllP5uUjYmFLvAf4QLMldkd/D2VxcwsHjB8y5iUZsXezc/LEhRZS/02m\n" +
778
"ivqlRw3AMkq/OVe/ZtxFWsP0nsfxEGdZuaUFpppGfixxFvymrB3+J51cTt+pZBDq\n" +
779
"D2y0DYfc+88iCs4jwHTfcDIpLb538HBjBj2rEgtQESQmB0ooD/+wsPsCIQC1bYch\n" +
780
"gElNtDYL3FgpLgNSUYp7gIWv9ehaC7LO2z7biQKCAQBitvFOnDkUja8NAF7lDpOV\n" +
781
"b5ipQ8SicBLW3kQamxhyuyxgZyy/PojZ/oPorkqW/T/A0rhnG6MssEpAtdiwVB+c\n" +
782
"rBYGo3bcwmExJhdOJ6dYuKFppPWhCwKMHs9npK+lqBMl8l5j58xlcFeC7ZfGf8GY\n" +
783
"GkhFW0c44vEQhMMbac6ZTTP4mw+1t7xJfmDMlLEyIpTXaAAk8uoVLWzQWnR40sHi\n" +
784
"ybvS0u3JxQkb7/y8tOOZu8qlz/YOS7lQ6UxUGX27Ce1E0+agfPphetoRAlS1cezq\n" +
785
"Wa7r64Ga0nkj1kwkcRqjgTiJx0NwnUXr78VAXFhVF95+O3lfqhvdtEGtkhDGPg7N\n" +
786
"A4IBBgACggEBAMmSHQK0w2i+iqUjOPzn0yNEZrzepLlLeQ1tqtn0xnlv5vBAeefD\n" +
787
"Pm9dd3tZOjufVWP7hhEz8xPobb1CS4e3vuQiv5UBfhdPL3f3l9T7JMAKPH6C9Vve\n" +
788
"OQXE5eGqbjsySbcmseHoYUt1WCSnSda1opX8zchX04e7DhGfE2/L9flpYEoSt8lI\n" +
789
"vMNjgOwvKdW3yvPt1/eBBHYNFG5gWPv/Q5KoyCtHS03uqGm4rNc/wZTIEEfd66C+\n" +
790
"QRaUltjOaHmtwOdDHaNqwhYZSVOip+Mo+TfyzHFREcdHLapo7ZXqbdYkRGxRR3d+\n" +
791
"3DfHaraJO0OKoYlPkr3JMvM/MSGR9AnZOcejUDBOMB0GA1UdDgQWBBR2Zp73O91F\n" +
792
"5TvZcjw/8FQ5hjEmUzAfBgNVHSMEGDAWgBR2Zp73O91F5TvZcjw/8FQ5hjEmUzAM\n" +
793
"BgNVHRMEBTADAQH/MAsGCWCGSAFlAwQDAgNHADBEAiBzriYE41M2y9Hy5ppkL0Qn\n" +
794
"dIlNc8JhXT/PHW7GDtViagIgMko8Qoj9gDGPK3+O9E8DC3wGiiF9CObM4LN387ok\n" +
795
"J+g=\n" +
796
"-----END CERTIFICATE-----",
797
"MIICZQIBADCCAjkGByqGSM44BAEwggIsAoIBAQDuRsj4UptM3ty0rvoInHVCy49O" +
798
"Yjn0y1L2UNvbGM+Nc5qqywUG3Soh6oCbtkXvbIE2+bLizYxdOO0ziz51N44T7Vpt" +
799
"l/F84lRiHB8pv0PzHmcUrbf/PLHqq6CN1jisyDC9hnK4rIU/pXBq7R9+k39frntk" +
800
"p59z0lsscoDaj45ZT+blI2JhS7wH+ECzJXZHfw9lcXMLB4wfMuYlGbF3s3PyxIUW" +
801
"Uv9Npor6pUcNwDJKvzlXv2bcRVrD9J7H8RBnWbmlBaaaRn4scRb8pqwd/iedXE7f" +
802
"qWQQ6g9stA2H3PvPIgrOI8B033AyKS2+d/BwYwY9qxILUBEkJgdKKA//sLD7AiEA" +
803
"tW2HIYBJTbQ2C9xYKS4DUlGKe4CFr/XoWguyzts+24kCggEAYrbxTpw5FI2vDQBe" +
804
"5Q6TlW+YqUPEonAS1t5EGpsYcrssYGcsvz6I2f6D6K5Klv0/wNK4ZxujLLBKQLXY" +
805
"sFQfnKwWBqN23MJhMSYXTienWLihaaT1oQsCjB7PZ6SvpagTJfJeY+fMZXBXgu2X" +
806
"xn/BmBpIRVtHOOLxEITDG2nOmU0z+JsPtbe8SX5gzJSxMiKU12gAJPLqFS1s0Fp0" +
807
"eNLB4sm70tLtycUJG+/8vLTjmbvKpc/2Dku5UOlMVBl9uwntRNPmoHz6YXraEQJU" +
808
"tXHs6lmu6+uBmtJ5I9ZMJHEao4E4icdDcJ1F6+/FQFxYVRfefjt5X6ob3bRBrZIQ" +
809
"xj4OzQQjAiEAsceWOM8do4etxp2zgnoNXV8PUUyqWhz1+0srcKV7FR4="),
810
811
CA_DSA_1024(
812
"DSA",
813
// dsaWithSHA1, 1024 bits
814
// Validity
815
// Not Before: Apr 24 12:25:43 2020 GMT
816
// Not After : Apr 22 12:25:43 2030 GMT
817
// Authority Key Identifier:
818
// E1:3C:01:52:EB:D1:38:F7:CF:F1:E3:5E:DB:54:75:7F:5E:AB:2D:36
819
"-----BEGIN CERTIFICATE-----\n" +
820
"MIIC9TCCArWgAwIBAgIUd52yKk0OxQuxdaYRAfq5VLuF1ZAwCQYHKoZIzjgEAzAu\n" +
821
"MQswCQYDVQQGEwJVUzENMAsGA1UECgwESmF2YTEQMA4GA1UECwwHU3VuSlNTRTAe\n" +
822
"Fw0yMDA0MjQxMjI1NDJaFw0zMDA0MjIxMjI1NDJaMC4xCzAJBgNVBAYTAlVTMQ0w\n" +
823
"CwYDVQQKDARKYXZhMRAwDgYDVQQLDAdTdW5KU1NFMIIBtjCCASsGByqGSM44BAEw\n" +
824
"ggEeAoGBAKgyb2XpANq43T8yBf5v0PTBOddLPxd0f0FotASron5rQr86JjBTfgIW\n" +
825
"oE4u7nYlO6bp/M4Dw6qZr+HaDu9taIDOj6LL51eUShVsOgS7XZcUzLT8vPnkEDDo\n" +
826
"u326x0B7fuNCbMLm+ipM2d4FhLUTt4Qb5TcY6l7dOGHeWiL7nl43AhUAoGr8DY2m\n" +
827
"WHZPHk2XbZ5wpaM2lLcCgYBKiFbFFViH/ylHJRPtYtjtJw4ls1scbVP4TRHnKoZc\n" +
828
"HPAird1fDYgGC2b0GQNAMABhI+L+ogxS7qakySpJCheuN25AjiSyilygQdlXoWRt\n" +
829
"Mggsh8EQZT7iP4V4e9m3xRHzb5ECvsSTdZB1BQMcC90W2Avq+orqgBnr2in9UEd8\n" +
830
"qwOBhAACgYAgVWxjYWlWIv7s4BnNMQoPKppi205f3aC6wv6Rqk4BnYYYrFONEmzQ\n" +
831
"hzj6lSXfxLpTu4lg2zNeIraZggoS0ztkbZNNADEmAHx+OLshiJJxu2/KfoopJOZg\n" +
832
"8ARmuaKOkWbkW9y4hWhfBlVwZbckG3Eibff0xronIXXy7B7UKaccyqNTMFEwHQYD\n" +
833
"VR0OBBYEFOE8AVLr0Tj3z/HjXttUdX9eqy02MB8GA1UdIwQYMBaAFOE8AVLr0Tj3\n" +
834
"z/HjXttUdX9eqy02MA8GA1UdEwEB/wQFMAMBAf8wCQYHKoZIzjgEAwMvADAsAhRC\n" +
835
"YLduLniBEJ51SfBWIkvNW6OG7QIUSKaTY6rgEFDEMoTqOjFChR22nkk=\n" +
836
"-----END CERTIFICATE-----",
837
"MIIBSgIBADCCASsGByqGSM44BAEwggEeAoGBAKgyb2XpANq43T8yBf5v0PTBOddL\n" +
838
"Pxd0f0FotASron5rQr86JjBTfgIWoE4u7nYlO6bp/M4Dw6qZr+HaDu9taIDOj6LL\n" +
839
"51eUShVsOgS7XZcUzLT8vPnkEDDou326x0B7fuNCbMLm+ipM2d4FhLUTt4Qb5TcY\n" +
840
"6l7dOGHeWiL7nl43AhUAoGr8DY2mWHZPHk2XbZ5wpaM2lLcCgYBKiFbFFViH/ylH\n" +
841
"JRPtYtjtJw4ls1scbVP4TRHnKoZcHPAird1fDYgGC2b0GQNAMABhI+L+ogxS7qak\n" +
842
"ySpJCheuN25AjiSyilygQdlXoWRtMggsh8EQZT7iP4V4e9m3xRHzb5ECvsSTdZB1\n" +
843
"BQMcC90W2Avq+orqgBnr2in9UEd8qwQWAhQ7rSn+WvIxeuZ/CK4p04eMe5JzpA=="),
844
845
CA_ED25519(
846
"EdDSA",
847
// ED25519
848
// Validity
849
// Not Before: May 24 23:32:35 2020 GMT
850
// Not After : May 22 23:32:35 2030 GMT
851
// X509v3 Authority Key Identifier:
852
// keyid:06:76:DB:88:EB:61:55:4C:C9:63:41:C2:A0:A8:57:3F:D7:F1:B8:EC
853
"-----BEGIN CERTIFICATE-----\n" +
854
"MIIByTCCAXugAwIBAgIUCyxKvhErehsygx50JYArsHby9hAwBQYDK2VwMDsxCzAJ\n" +
855
"BgNVBAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3Qg\n" +
856
"U2VyaXZjZTAeFw0yMDA1MjQyMzMyMzVaFw0zMDA1MjIyMzMyMzVaMDsxCzAJBgNV\n" +
857
"BAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
858
"aXZjZTAqMAUGAytlcAMhAKdotuYIkH8PYbopSLbaf1BtqUY2d6AbTgK2prMzQ6B3\n" +
859
"o4GQMIGNMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAZ224jrYVVMyWNBwqCo\n" +
860
"Vz/X8bjsMB8GA1UdIwQYMBaAFAZ224jrYVVMyWNBwqCoVz/X8bjsMA4GA1UdDwEB\n" +
861
"/wQEAwIBhjAqBgNVHSUBAf8EIDAeBggrBgEFBQcDAwYIKwYBBQUHAwgGCCsGAQUF\n" +
862
"BwMJMAUGAytlcANBADVAArvME8xFigFhCCCOTBoy/4ldGkDZQ/GT3Q6xnAP558FU\n" +
863
"0G32OprKQZP43D9bmFU0LMgCVM9bHWU+bu/10AU=\n" +
864
"-----END CERTIFICATE-----",
865
"MC4CAQAwBQYDK2VwBCIEII/VYp8nu/eqq2L5y7/3IzavBgis4LWP6Rikv0N8SpgL"),
866
867
CA_ED448(
868
"EdDSA",
869
// ED448
870
// Validity
871
// Not Before: May 24 23:23:43 2020 GMT
872
// Not After : May 22 23:23:43 2030 GMT
873
// X509v3 Authority Key Identifier:
874
// keyid:F5:D5:9D:FB:6F:B7:50:29:DF:F0:B8:83:10:5F:9B:C4:A8:1C:E9:F4
875
"-----BEGIN CERTIFICATE-----\n" +
876
"MIICFDCCAZSgAwIBAgIUKcmLeKilq0LN40sniBJO7F1gb/owBQYDK2VxMDsxCzAJ\n" +
877
"BgNVBAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3Qg\n" +
878
"U2VyaXZjZTAeFw0yMDA1MjQyMzIzNDNaFw0zMDA1MjIyMzIzNDNaMDsxCzAJBgNV\n" +
879
"BAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
880
"aXZjZTBDMAUGAytlcQM6APYP8iSXS8xPVDike5RgCByfTtg4GGtpYfoBtt6G5szA\n" +
881
"55ExAKjm03wtk29nEPU2mCHF2QgfBzUrgKOBkDCBjTAPBgNVHRMBAf8EBTADAQH/\n" +
882
"MB0GA1UdDgQWBBT11Z37b7dQKd/wuIMQX5vEqBzp9DAfBgNVHSMEGDAWgBT11Z37\n" +
883
"b7dQKd/wuIMQX5vEqBzp9DAOBgNVHQ8BAf8EBAMCAYYwKgYDVR0lAQH/BCAwHgYI\n" +
884
"KwYBBQUHAwMGCCsGAQUFBwMIBggrBgEFBQcDCTAFBgMrZXEDcwAlRXA2gPb52yV3\n" +
885
"MKJErjmKlYSFExj5w5jafbbd0QgI1yDs+qSaZLjQ8ljwabmLDg+KR+167m0djQDI\n" +
886
"OOoVuL7bgM0RL836KnuuBzm+gTdPp0gCXy3k9lL0KA0V2YLJHXXzu3suu+7rdgoP\n" +
887
"plCh2hWdLgA=\n" +
888
"-----END CERTIFICATE-----",
889
"MEcCAQAwBQYDK2VxBDsEOd6/hRZqkUyTlJSwdN5gO/HnoWYda1fD83YUm5j6m2Bg\n" +
890
"hAQi+QadFsQLD7R6PI/4Q0twXqlKnxU5Ug=="),
891
892
EE_ECDSA_SECP256R1(
893
"EC",
894
// SHA256withECDSA, curve secp256r1
895
// Validity
896
// Not Before: May 22 07:18:16 2018 GMT
897
// Not After : May 17 07:18:16 2038 GMT
898
// Authority Key Identifier:
899
// 60:CF:BD:73:FF:FA:1A:30:D2:A4:EC:D3:49:71:46:EF:1A:35:A0:86
900
"-----BEGIN CERTIFICATE-----\n" +
901
"MIIBqjCCAVCgAwIBAgIJAPLY8qZjgNRAMAoGCCqGSM49BAMCMDsxCzAJBgNVBAYT\n" +
902
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
903
"ZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYTAlVT\n" +
904
"MQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZjZTEY\n" +
905
"MBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD\n" +
906
"QgAEb+9n05qfXnfHUb0xtQJNS4JeSi6IjOfW5NqchvKnfJey9VkJzR7QHLuOESdf\n" +
907
"xlR7q8YIWgih3iWLGfB+wxHiOqMjMCEwHwYDVR0jBBgwFoAUYM+9c//6GjDSpOzT\n" +
908
"SXFG7xo1oIYwCgYIKoZIzj0EAwIDSAAwRQIgWpRegWXMheiD3qFdd8kMdrkLxRbq\n" +
909
"1zj8nQMEwFTUjjQCIQDRIrAjZX+YXHN9b0SoWWLPUq0HmiFIi8RwMnO//wJIGQ==\n" +
910
"-----END CERTIFICATE-----",
911
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgn5K03bpTLjEtFQRa\n" +
912
"JUtx22gtmGEvvSUSQdimhGthdtihRANCAARv72fTmp9ed8dRvTG1Ak1Lgl5KLoiM\n" +
913
"59bk2pyG8qd8l7L1WQnNHtAcu44RJ1/GVHurxghaCKHeJYsZ8H7DEeI6"),
914
915
EE_ECDSA_SECP384R1(
916
"EC",
917
// SHA384withECDSA, curve secp384r1
918
// Validity
919
// Not Before: Jun 24 08:15:06 2019 GMT
920
// Not After : Jun 19 08:15:06 2039 GMT
921
// Authority Key Identifier:
922
// 40:2D:AA:EE:66:AA:33:27:AD:9B:5D:52:9B:60:67:6A:2B:AD:52:D2
923
"-----BEGIN CERTIFICATE-----\n" +
924
"MIICEjCCAZegAwIBAgIUS3F0AqAXWRg07CnbknJzxofyBQMwCgYIKoZIzj0EAwMw\n" +
925
"OzELMAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0Ug\n" +
926
"VGVzdCBTZXJpdmNlMB4XDTE5MDYyNDA4MTUwNloXDTM5MDYxOTA4MTUwNlowVTEL\n" +
927
"MAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0UgVGVz\n" +
928
"dCBTZXJpdmNlMRgwFgYDVQQDDA9SZWdyZXNzaW9uIFRlc3QwdjAQBgcqhkjOPQIB\n" +
929
"BgUrgQQAIgNiAARqElz8b6T07eyKomIinhztV3/3XBk9bKGtJ0W+JOltjuhMmP/w\n" +
930
"G8ASSevpgqgpi6EzpBZaaJxE3zNfkNnxXOZmQi2Ypd1uK0zRdbEOKg0XOcTTZwEj\n" +
931
"iLjYmt3O0pwpklijQjBAMB0GA1UdDgQWBBRALaruZqozJ62bXVKbYGdqK61S0jAf\n" +
932
"BgNVHSMEGDAWgBRKS1IUCtHWn/mZdXSTKjRHEhVr9TAKBggqhkjOPQQDAwNpADBm\n" +
933
"AjEArVDFKf48xijN6huVUJzKCOP0zlWB5Js+DItIkZmLQuhciPLhLIB/rChf3Y4C\n" +
934
"xuP4AjEAmfLhQRI0O3pifpYzYSVh2G7/jHNG4eO+2dvgAcU+Lh2IIj/cpLaPFSvL\n" +
935
"J8FXY9Nj\n" +
936
"-----END CERTIFICATE-----",
937
"MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDASuI9EtK29APXPipkc\n" +
938
"qDA+qwlewMjv/OcjUJ77kP1Vz62oVF9iY9SRIyFIUju8wt+hZANiAARqElz8b6T0\n" +
939
"7eyKomIinhztV3/3XBk9bKGtJ0W+JOltjuhMmP/wG8ASSevpgqgpi6EzpBZaaJxE\n" +
940
"3zNfkNnxXOZmQi2Ypd1uK0zRdbEOKg0XOcTTZwEjiLjYmt3O0pwpklg="),
941
942
EE_ECDSA_SECP521R1(
943
"EC",
944
// SHA512withECDSA, curve secp521r1
945
// Validity
946
// Not Before: Jun 24 08:15:06 2019 GMT
947
// Not After : Jun 19 08:15:06 2039 GMT
948
// Authority Key Identifier:
949
// 7B:AA:79:A4:49:DD:59:34:F0:86:6C:51:C7:30:F4:CE:C5:81:8A:28
950
"-----BEGIN CERTIFICATE-----\n" +
951
"MIICXDCCAb2gAwIBAgIUck4QTsbHNqUfPxfGPJLYbedFPdswCgYIKoZIzj0EAwQw\n" +
952
"OzELMAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0Ug\n" +
953
"VGVzdCBTZXJpdmNlMB4XDTE5MDYyNDA4MTUwNloXDTM5MDYxOTA4MTUwNlowVTEL\n" +
954
"MAkGA1UEBhMCVVMxDTALBgNVBAoMBEphdmExHTAbBgNVBAsMFFN1bkpTU0UgVGVz\n" +
955
"dCBTZXJpdmNlMRgwFgYDVQQDDA9SZWdyZXNzaW9uIFRlc3QwgZswEAYHKoZIzj0C\n" +
956
"AQYFK4EEACMDgYYABAGa2zDLhYQHHCLI3YBqFYJTzrnDIjzwXrxhcRTS8DYkcrjZ\n" +
957
"+Fih1YyNhix0sdjH+3EqElXAHHuVzn3n3hPOtQCWlQCICkErB34S0cvmtRkeW8Fi\n" +
958
"hrR5tvJEzEZjPSgwn81kKyhV2L70je6i7Cw884Va8bODckpgw0vTmbQb7T9dupkv\n" +
959
"1aNCMEAwHQYDVR0OBBYEFHuqeaRJ3Vk08IZsUccw9M7FgYooMB8GA1UdIwQYMBaA\n" +
960
"FEAivFrtaq2pQJ4cW4pEQML3aym9MAoGCCqGSM49BAMEA4GMADCBiAJCAb33KHdY\n" +
961
"WDbusORWoY8Euglpd5zsF15hJsk7wtpD5HST1/NWmdCx405w+TV6a9Gr4VPHeaIQ\n" +
962
"99i/+f237ALL5p6IAkIBbwwFL1vt3c/bx+niyuffQPNjly80rdC9puqAqriSiboS\n" +
963
"efhxjidJ9HLaIRCMEPyd6vAsC8mO8YvL1uCuEQLsiGM=\n" +
964
"-----END CERTIFICATE-----",
965
"MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIB8C/2OX2Dt9vFszzV\n" +
966
"hcAe0CbkMlvu9uQ/L7Vz88heuIj0rUZIPGshvgIJt1hCMT8HZxYHvDa4lbUvqjFB\n" +
967
"+zafvPWhgYkDgYYABAGa2zDLhYQHHCLI3YBqFYJTzrnDIjzwXrxhcRTS8DYkcrjZ\n" +
968
"+Fih1YyNhix0sdjH+3EqElXAHHuVzn3n3hPOtQCWlQCICkErB34S0cvmtRkeW8Fi\n" +
969
"hrR5tvJEzEZjPSgwn81kKyhV2L70je6i7Cw884Va8bODckpgw0vTmbQb7T9dupkv\n" +
970
"1Q=="),
971
972
EE_RSA_2048(
973
"RSA",
974
// SHA256withRSA, 2048 bits
975
// Validity
976
// Not Before: May 22 07:18:16 2018 GMT
977
// Not After : May 17 07:18:16 2038 GMT
978
// Authority Key Identifier:
979
// 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
980
"-----BEGIN CERTIFICATE-----\n" +
981
"MIIDNjCCAh6gAwIBAgIJAO2+yPcFryUTMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
982
"BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
983
"aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0zODA1MTcwNzE4MTZaMFUxCzAJBgNVBAYT\n" +
984
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
985
"ZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOC\n" +
986
"AQ8AMIIBCgKCAQEAszfBobWfZIp8AgC6PiWDDavP65mSvgCXUGxACbxVNAfkLhNR\n" +
987
"QOsHriRB3X1Q3nvO9PetC6wKlvE9jlnDDj7D+1j1r1CHO7ms1fq8rfcQYdkanDtu\n" +
988
"4AlHo8v+SSWX16MIXFRYDj2VVHmyPtgbltcg4zGAuwT746FdLI94uXjJjq1IOr/v\n" +
989
"0VIlwE5ORWH5Xc+5Tj+oFWK0E4a4GHDgtKKhn2m72hN56/GkPKGkguP5NRS1qYYV\n" +
990
"/EFkdyQMOV8J1M7HaicSft4OL6eKjTrgo93+kHk+tv0Dc6cpVBnalX3TorG8QI6B\n" +
991
"cHj1XQd78oAlAC+/jF4pc0mwi0un49kdK9gRfQIDAQABoyMwITAfBgNVHSMEGDAW\n" +
992
"gBQN3ZPJ/ku9NbfomXiQ+9taPdsVTDANBgkqhkiG9w0BAQsFAAOCAQEApXS0nKwm\n" +
993
"Kp8gpmO2yG1rpd1+2wBABiMU4JZaTqmma24DQ3RzyS+V2TeRb29dl5oTUEm98uc0\n" +
994
"GPZvhK8z5RFr4YE17dc04nI/VaNDCw4y1NALXGs+AHkjoPjLyGbWpi1S+gfq2sNB\n" +
995
"Ekkjp6COb/cb9yiFXOGVls7UOIjnVZVd0r7KaPFjZhYh82/f4PA/A1SnIKd1+nfH\n" +
996
"2yk7mSJNC7Z3qIVDL8MM/jBVwiC3uNe5GPB2uwhd7k5LGAVN3j4HQQGB0Sz+VC1h\n" +
997
"92oi6xDa+YBva2fvHuCd8P50DDjxmp9CemC7rnZ5j8egj88w14X44Xjb/Fd/ApG9\n" +
998
"e57NnbT7KM+Grw==\n" +
999
"-----END CERTIFICATE-----",
1000
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzN8GhtZ9kinwC\n" +
1001
"ALo+JYMNq8/rmZK+AJdQbEAJvFU0B+QuE1FA6weuJEHdfVDee870960LrAqW8T2O\n" +
1002
"WcMOPsP7WPWvUIc7uazV+ryt9xBh2RqcO27gCUejy/5JJZfXowhcVFgOPZVUebI+\n" +
1003
"2BuW1yDjMYC7BPvjoV0sj3i5eMmOrUg6v+/RUiXATk5FYfldz7lOP6gVYrQThrgY\n" +
1004
"cOC0oqGfabvaE3nr8aQ8oaSC4/k1FLWphhX8QWR3JAw5XwnUzsdqJxJ+3g4vp4qN\n" +
1005
"OuCj3f6QeT62/QNzpylUGdqVfdOisbxAjoFwePVdB3vygCUAL7+MXilzSbCLS6fj\n" +
1006
"2R0r2BF9AgMBAAECggEASIkPkMCuw4WdTT44IwERus3IOIYOs2IP3BgEDyyvm4B6\n" +
1007
"JP/iihDWKfA4zEl1Gqcni1RXMHswSglXra682J4kui02Ov+vzEeJIY37Ibn2YnP5\n" +
1008
"ZjRT2s9GtI/S2o4hl8A/mQb2IMViFC+xKehTukhV4j5d6NPKk0XzLR7gcMjnYxwn\n" +
1009
"l21fS6D2oM1xRG/di7sL+uLF8EXLRzfiWDNi12uQv4nwtxPKvuKhH6yzHt7YqMH0\n" +
1010
"46pmDKDaxV4w1JdycjCb6NrCJOYZygoQobuZqOQ30UZoZsPJrtovkncFr1e+lNcO\n" +
1011
"+aWDfOLCtTH046dEQh5oCShyXMybNlry/QHsOtHOwQKBgQDh2iIjs+FPpQy7Z3EX\n" +
1012
"DGEvHYqPjrYO9an2KSRr1m9gzRlWYxKY46WmPKwjMerYtra0GP+TBHrgxsfO8tD2\n" +
1013
"wUAII6sd1qup0a/Sutgf2JxVilLykd0+Ge4/Cs51tCdJ8EqDV2B6WhTewOY2EGvg\n" +
1014
"JiKYkeNwgRX/9M9CFSAMAk0hUQKBgQDLJAartL3DoGUPjYtpJnfgGM23yAGl6G5r\n" +
1015
"NSXDn80BiYIC1p0bG3N0xm3yAjqOtJAUj9jZbvDNbCe3GJfLARMr23legX4tRrgZ\n" +
1016
"nEdKnAFKAKL01oM+A5/lHdkwaZI9yyv+hgSVdYzUjB8rDmzeVQzo1BT7vXypt2yV\n" +
1017
"6O1OnUpCbQKBgA/0rzDChopv6KRcvHqaX0tK1P0rYeVQqb9ATNhpf9jg5Idb3HZ8\n" +
1018
"rrk91BNwdVz2G5ZBpdynFl9G69rNAMJOCM4KZw5mmh4XOEq09Ivba8AHU7DbaTv3\n" +
1019
"7QL7KnbaUWRB26HHzIMYVh0el6T+KADf8NXCiMTr+bfpfbL3dxoiF3zhAoGAbCJD\n" +
1020
"Qse1dBs/cKYCHfkSOsI5T6kx52Tw0jS6Y4X/FOBjyqr/elyEexbdk8PH9Ar931Qr\n" +
1021
"NKMvn8oA4iA/PRrXX7M2yi3YQrWwbkGYWYjtzrzEAdzmg+5eARKAeJrZ8/bg9l3U\n" +
1022
"ttKaItJsDPlizn8rngy3FsJpR9aSAMK6/+wOiYkCgYEA1tZkI1rD1W9NYZtbI9BE\n" +
1023
"qlJVFi2PBOJMKNuWdouPX3HLQ72GJSQff2BFzLTELjweVVJ0SvY4IipzpQOHQOBy\n" +
1024
"5qh/p6izXJZh3IHtvwVBjHoEVplg1b2+I5e3jDCfqnwcQw82dW5SxOJMg1h/BD0I\n" +
1025
"qAL3go42DYeYhu/WnECMeis="),
1026
1027
EE_EC_RSA_SECP256R1(
1028
"EC",
1029
// SHA256withRSA, curve secp256r1
1030
// Validity
1031
// Not Before: May 22 07:18:16 2018 GMT
1032
// Not After : May 21 07:18:16 2028 GMT
1033
// Authority Key Identifier:
1034
// 0D:DD:93:C9:FE:4B:BD:35:B7:E8:99:78:90:FB:DB:5A:3D:DB:15:4C
1035
"-----BEGIN CERTIFICATE-----\n" +
1036
"MIICazCCAVOgAwIBAgIJAO2+yPcFryUUMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNV\n" +
1037
"BAYTAlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
1038
"aXZjZTAeFw0xODA1MjIwNzE4MTZaFw0yODA1MjEwNzE4MTZaMFUxCzAJBgNVBAYT\n" +
1039
"AlVTMQ0wCwYDVQQKDARKYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2VyaXZj\n" +
1040
"ZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MFkwEwYHKoZIzj0CAQYIKoZIzj0D\n" +
1041
"AQcDQgAE59MERNTlVZ1eeps8Z3Oue5ZkgQdPtD+WIE6tj3PbIKpxGPDxvfNP959A\n" +
1042
"yQjEK/ehWQVrCMmNoEkIzY+IIBgB06MjMCEwHwYDVR0jBBgwFoAUDd2Tyf5LvTW3\n" +
1043
"6Jl4kPvbWj3bFUwwDQYJKoZIhvcNAQELBQADggEBAFOTVEqs70ykhZiIdrEsF1Ra\n" +
1044
"I3B2rLvwXZk52uSltk2/bzVvewA577ZCoxQ1pL7ynkisPfBN1uVYtHjM1VA3RC+4\n" +
1045
"+TAK78dnI7otYjWoHp5rvs4l6c/IbOspS290IlNuDUxMErEm5wxIwj+Aukx/1y68\n" +
1046
"hOyCvHBLMY2c1LskH1MMBbDuS1aI+lnGpToi+MoYObxGcV458vxuT8+wwV8Fkpvd\n" +
1047
"ll8IIFmeNPRv+1E+lXbES6CSNCVaZ/lFhPgdgYKleN7sfspiz50DG4dqafuEAaX5\n" +
1048
"xaK1NWXJxTRz0ROH/IUziyuDW6jphrlgit4+3NCzp6vP9hAJQ8Vhcj0n15BKHIQ=\n" +
1049
"-----END CERTIFICATE-----",
1050
"MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGVc7hICpmp91jbYe\n" +
1051
"nrr8nYHD37RZP3VENY+szuA7WjuhRANCAATn0wRE1OVVnV56mzxnc657lmSBB0+0\n" +
1052
"P5YgTq2Pc9sgqnEY8PG980/3n0DJCMQr96FZBWsIyY2gSQjNj4ggGAHT"),
1053
1054
EE_DSA_2048(
1055
"DSA",
1056
// SHA256withDSA, 2048 bits
1057
// Validity
1058
// Not Before: May 22 07:18:20 2018 GMT
1059
// Not After : May 17 07:18:20 2038 GMT
1060
// Authority Key Identifier:
1061
// 76:66:9E:F7:3B:DD:45:E5:3B:D9:72:3C:3F:F0:54:39:86:31:26:53
1062
"-----BEGIN CERTIFICATE-----\n" +
1063
"MIIEnDCCBEGgAwIBAgIJAP/jh1qVhNVjMAsGCWCGSAFlAwQDAjA7MQswCQYDVQQG\n" +
1064
"EwJVUzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2\n" +
1065
"Y2UwHhcNMTgwNTIyMDcxODIwWhcNMzgwNTE3MDcxODIwWjBVMQswCQYDVQQGEwJV\n" +
1066
"UzENMAsGA1UECgwESmF2YTEdMBsGA1UECwwUU3VuSlNTRSBUZXN0IFNlcml2Y2Ux\n" +
1067
"GDAWBgNVBAMMD1JlZ3Jlc3Npb24gVGVzdDCCA0cwggI6BgcqhkjOOAQBMIICLQKC\n" +
1068
"AQEAmlavgoJrMcjqWRVcDE2dmWAPREgnzQvneEDef68cprDzjSwvOs5QeFyx75ib\n" +
1069
"ado1e6jO/rW1prCGWHDD1oA/Tn4Pk3vu0nUxzvl1qATc+aJbpUU5Op0bvp6LbCsQ\n" +
1070
"QslV9FeRh7Eb7bP6gpc/kHCBzEgC1VCK7prccXWy+t6SMOHbND3h+UbckfSaUuaV\n" +
1071
"sVJNTD1D6GElfRj4Nmz1BGPfSYvKorwNZEU3gXwFgtDoAcGx7tcyClLpDHfqRfw/\n" +
1072
"7yiqLyeiP7D4hl5lMNouJWDlAdMFp0FMgS3s9VDFinIcr6VtBWMTG7+4+czHAB+3\n" +
1073
"fvrwlqNzhBn3uFHrekN/w8fNxwIhAJo7Sae1za7IMW0Q6hE5B4b+s2B/FaKPoA4E\n" +
1074
"jtZu13B9AoIBAQCOZqLMKfvqZWUgT0PQ3QjR7dAFdd06I9Y3+TOQzZk1+j+vw/6E\n" +
1075
"X4vFItX4gihb/u5Q9CdmpwhVGi7bvo+7+/IKeTgoQ6f5+PSug7SrWWUQ5sPwaZui\n" +
1076
"zXZJ5nTeZDucFc2yFx0wgnjbPwiUxZklOT7xGiOMtzOTa2koCz5KuIBL+/wPKKxm\n" +
1077
"ypo9VoY9xfbdU6LMXZv/lpD5XTM9rYHr/vUTNkukvV6Hpm0YMEWhVZKUJiqCqTqG\n" +
1078
"XHaleOxSw6uQWB/+TznifcC7gB48UOQjCqOKf5VuwQneJLhlhU/jhRV3xtr+hLZa\n" +
1079
"hW1wYhVi8cjLDrZFKlgEQqhB4crnJU0mJY+tA4IBBQACggEAID0ezl00/X8mv7eb\n" +
1080
"bzovum1+DEEP7FM57k6HZEG2N3ve4CW+0m9Cd+cWPz8wkZ+M0j/Eqa6F0IdbkXEc\n" +
1081
"Q7CuzvUyJ57xQ3L/WCgXsiS+Bh8O4Mz7GwW22CGmHqafbVv+hKBfr8MkskO6GJUt\n" +
1082
"SUF/CVLzB4gMIvZMH26tBP2xK+i7FeEK9kT+nGdzQSZBAhFYpEVCBplHZO24/OYq\n" +
1083
"1DNoU327nUuXIhmsfA8N0PjiWbIZIjTPwBGr9H0LpATI7DIDNcvRRvtROP+pBU9y\n" +
1084
"fuykPkptg9C0rCM9t06bukpOSaEz/2VIQdLE8fHYFA6pHZ6CIc2+5cfvMgTPhcjz\n" +
1085
"W2jCt6MjMCEwHwYDVR0jBBgwFoAUdmae9zvdReU72XI8P/BUOYYxJlMwCwYJYIZI\n" +
1086
"AWUDBAMCA0gAMEUCIQCeI5fN08b9BpOaHdc3zQNGjp24FOL/RxlBLeBAorswJgIg\n" +
1087
"JEZ8DhYxQy1O7mmZ2UIT7op6epWMB4dENjs0qWPmcKo=\n" +
1088
"-----END CERTIFICATE-----",
1089
"MIICZQIBADCCAjoGByqGSM44BAEwggItAoIBAQCaVq+CgmsxyOpZFVwMTZ2ZYA9E\n" +
1090
"SCfNC+d4QN5/rxymsPONLC86zlB4XLHvmJtp2jV7qM7+tbWmsIZYcMPWgD9Ofg+T\n" +
1091
"e+7SdTHO+XWoBNz5olulRTk6nRu+notsKxBCyVX0V5GHsRvts/qClz+QcIHMSALV\n" +
1092
"UIrumtxxdbL63pIw4ds0PeH5RtyR9JpS5pWxUk1MPUPoYSV9GPg2bPUEY99Ji8qi\n" +
1093
"vA1kRTeBfAWC0OgBwbHu1zIKUukMd+pF/D/vKKovJ6I/sPiGXmUw2i4lYOUB0wWn\n" +
1094
"QUyBLez1UMWKchyvpW0FYxMbv7j5zMcAH7d++vCWo3OEGfe4Uet6Q3/Dx83HAiEA\n" +
1095
"mjtJp7XNrsgxbRDqETkHhv6zYH8Voo+gDgSO1m7XcH0CggEBAI5moswp++plZSBP\n" +
1096
"Q9DdCNHt0AV13Toj1jf5M5DNmTX6P6/D/oRfi8Ui1fiCKFv+7lD0J2anCFUaLtu+\n" +
1097
"j7v78gp5OChDp/n49K6DtKtZZRDmw/Bpm6LNdknmdN5kO5wVzbIXHTCCeNs/CJTF\n" +
1098
"mSU5PvEaI4y3M5NraSgLPkq4gEv7/A8orGbKmj1Whj3F9t1Tosxdm/+WkPldMz2t\n" +
1099
"gev+9RM2S6S9XoembRgwRaFVkpQmKoKpOoZcdqV47FLDq5BYH/5POeJ9wLuAHjxQ\n" +
1100
"5CMKo4p/lW7BCd4kuGWFT+OFFXfG2v6EtlqFbXBiFWLxyMsOtkUqWARCqEHhyucl\n" +
1101
"TSYlj60EIgIgLfA75+8KcKxdN8mr6gzGjQe7jPFGG42Ejhd7Q2F4wuw="),
1102
1103
EE_DSA_1024(
1104
"DSA",
1105
// dsaWithSHA1, 1024 bits
1106
// Validity
1107
// Not Before: Apr 24 12:25:43 2020 GMT
1108
// Not After : Apr 22 12:25:43 2030 GMT
1109
// Authority Key Identifier:
1110
// E1:3C:01:52:EB:D1:38:F7:CF:F1:E3:5E:DB:54:75:7F:5E:AB:2D:36
1111
"-----BEGIN CERTIFICATE-----\n" +
1112
"MIIDADCCAr+gAwIBAgIUd2XJ5F2VTbk9a92w/NzLXR5zjUQwCQYHKoZIzjgEAzAu\n" +
1113
"MQswCQYDVQQGEwJVUzENMAsGA1UECgwESmF2YTEQMA4GA1UECwwHU3VuSlNTRTAe\n" +
1114
"Fw0yMDA0MjQxMjI1NDNaFw0zMDA0MjIxMjI1NDNaMEgxCzAJBgNVBAYTAlVTMQ0w\n" +
1115
"CwYDVQQKDARKYXZhMRAwDgYDVQQLDAdTdW5KU1NFMRgwFgYDVQQDDA9SZWdyZXNz\n" +
1116
"aW9uIFRlc3QwggG3MIIBLAYHKoZIzjgEATCCAR8CgYEA7fSkxYISlMJT+i8N5VOb\n" +
1117
"lHhjrPYAy3oR2/YXQW6T0hCMhm8jmxgk1bDId9ZKHrxsM05EkCtRYaqag4ZZeGde\n" +
1118
"ywv3IwwYqCQfGtkPwT9QAsdSABYwGOrlhEtZtBG1yQ44c+Rz/Vs+PtkAyZbf5VG1\n" +
1119
"iSxFb9bI5QFJWJ9a2VpZh58CFQCCGALQoK4MsQP8V72WlB7Bvt9erwKBgQDCxu0G\n" +
1120
"M2iZr0J8DaAo9/ChS4m7E7h6Jz9KOm2cFhzYGekkUXNzny7nyz6Qpgbuf8KNFKjt\n" +
1121
"qoUDC8tlcVQAUlTcESC0TZXR3h21hl9wzIBhE+kJ1j8v1KAxfOaJOxObk5QEvIaA\n" +
1122
"5j+jiHGwRS5tDqywOatz+emwMZv1wKnCNBElNgOBhAACgYBHjuQKucCuuvy/4DpG\n" +
1123
"rSIzdueK+HrzOW8h2pfvz3lzpsyV6XJPC6we9CjaQjU01VcjwN2PoYtbGyml0pbK\n" +
1124
"We4sdgn6LDL1aCM/WKRSxGHVTx+wkhKQ719YtiC0T6sA+eLirc6VT3/6+FbQWC+2\n" +
1125
"bG7N19sGpV/RAXMBpRXUnBJSQaNCMEAwHQYDVR0OBBYEFNNZxyxuQmKvWowofr/S\n" +
1126
"HdCIS+W8MB8GA1UdIwQYMBaAFOE8AVLr0Tj3z/HjXttUdX9eqy02MAkGByqGSM44\n" +
1127
"BAMDMAAwLQIUUzzMhZ9St/Vo/YdgNTHdTw4cm14CFQCE6tWG157Wl5YFyYsGHsLY\n" +
1128
"NN8uCA==\n" +
1129
"-----END CERTIFICATE-----",
1130
"MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAO30pMWCEpTCU/ovDeVTm5R4Y6z2\n" +
1131
"AMt6Edv2F0Fuk9IQjIZvI5sYJNWwyHfWSh68bDNORJArUWGqmoOGWXhnXssL9yMM\n" +
1132
"GKgkHxrZD8E/UALHUgAWMBjq5YRLWbQRtckOOHPkc/1bPj7ZAMmW3+VRtYksRW/W\n" +
1133
"yOUBSVifWtlaWYefAhUAghgC0KCuDLED/Fe9lpQewb7fXq8CgYEAwsbtBjNoma9C\n" +
1134
"fA2gKPfwoUuJuxO4eic/SjptnBYc2BnpJFFzc58u58s+kKYG7n/CjRSo7aqFAwvL\n" +
1135
"ZXFUAFJU3BEgtE2V0d4dtYZfcMyAYRPpCdY/L9SgMXzmiTsTm5OUBLyGgOY/o4hx\n" +
1136
"sEUubQ6ssDmrc/npsDGb9cCpwjQRJTYEFgIUNRiLmNzfTYOuVsjkySPzP5gPImM="),
1137
1138
EE_ED25519(
1139
"EdDSA",
1140
// ED25519
1141
// Validity
1142
// Not Before: May 24 23:32:36 2020 GMT
1143
// Not After : May 22 23:32:36 2030 GMT
1144
// X509v3 Authority Key Identifier:
1145
// keyid:06:76:DB:88:EB:61:55:4C:C9:63:41:C2:A0:A8:57:3F:D7:F1:B8:EC
1146
"-----BEGIN CERTIFICATE-----\n" +
1147
"MIIBlDCCAUagAwIBAgIUFTt/jcgQ65nhTG8LkrWFJhhEGuwwBQYDK2VwMDsxCzAJ\n" +
1148
"BgNVBAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3Qg\n" +
1149
"U2VyaXZjZTAeFw0yMDA1MjQyMzMyMzZaFw0zMDA1MjIyMzMyMzZaMFUxCzAJBgNV\n" +
1150
"BAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
1151
"aXZjZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MCowBQYDK2VwAyEAGAYQmKb7\n" +
1152
"WNYpVxIdsc49lI1emNjF06/Jl85zlG0wc9OjQjBAMB0GA1UdDgQWBBQkJ2E4/S8Z\n" +
1153
"EIM1v9uTc0eYtYNk3zAfBgNVHSMEGDAWgBQGdtuI62FVTMljQcKgqFc/1/G47DAF\n" +
1154
"BgMrZXADQQCVZnl/AyIEtZ8r45e/hcfxwuezgRX+7e9NHZFV1A/TMGcBRORDfDUi\n" +
1155
"bbh72K528fjT7P4/WoXvm1zJKOAzUOUL\n" +
1156
"-----END CERTIFICATE-----",
1157
"MC4CAQAwBQYDK2VwBCIEIGBmdh4tfc0lng/LWokhfFLlo0ZlmTn2lbI639qou2KP"),
1158
1159
EE_ED448(
1160
"EdDSA",
1161
// ED448
1162
// Validity
1163
// Not Before: May 24 23:23:43 2020 GMT
1164
// Not After : May 22 23:23:43 2030 GMT
1165
// X509v3 Authority Key Identifier:
1166
// keyid:F5:D5:9D:FB:6F:B7:50:29:DF:F0:B8:83:10:5F:9B:C4:A8:1C:E9:F4
1167
"-----BEGIN CERTIFICATE-----\n" +
1168
"MIIB3zCCAV+gAwIBAgIUNlWzFrH2+BILqM3SNYQjKoY98S8wBQYDK2VxMDsxCzAJ\n" +
1169
"BgNVBAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3Qg\n" +
1170
"U2VyaXZjZTAeFw0yMDA1MjQyMzIzNDNaFw0zMDA1MjIyMzIzNDNaMFUxCzAJBgNV\n" +
1171
"BAYTAlVTMQ0wCwYDVQQKDARqYXZhMR0wGwYDVQQLDBRTdW5KU1NFIFRlc3QgU2Vy\n" +
1172
"aXZjZTEYMBYGA1UEAwwPUmVncmVzc2lvbiBUZXN0MEMwBQYDK2VxAzoAoIubPNAg\n" +
1173
"F11u3MQ5d9wujg10+80I0xzYzTqzzXrfJNtw+eU8NbUk86xiCvlMzJRH0Oo3DbY8\n" +
1174
"NAKAo0IwQDAdBgNVHQ4EFgQUUiI1+qT1x+HsDgfZRIU6hUaAbmUwHwYDVR0jBBgw\n" +
1175
"FoAU9dWd+2+3UCnf8LiDEF+bxKgc6fQwBQYDK2VxA3MAx8P0mle08s5YDd/p58dt\n" +
1176
"yORqvDPwo5IYPasqN8Zeen1B9u1xF/kvDGFxCJ6D9Gi4ynnDx0FZFMkA83evZcxJ\n" +
1177
"+X+swt7FyHwXrdkZcvjRKEcsWhkj+0FlxYF/NZzLTGuGIPYJnRLEwf/zr+5NDxKs\n" +
1178
"fCoA\n" +
1179
"-----END CERTIFICATE-----",
1180
"MEcCAQAwBQYDK2VxBDsEOfbhmUSuKP9WCO7Nr6JxVq5rfJESk1MNMyYhC134SiAP\n" +
1181
"Suw0Cu7RZVadpfPR7Kiwb2b/JXjMdY1HAA==");
1182
1183
final String keyAlgo;
1184
final String certStr;
1185
final String privKeyStr;
1186
1187
Cert(String keyAlgo, String certStr, String privKeyStr) {
1188
this.keyAlgo = keyAlgo;
1189
this.certStr = certStr;
1190
this.privKeyStr = privKeyStr;
1191
}
1192
}
1193
}
1194
1195