Skip to content
/ server Public

Commit a04ccfe

Browse files
tonychen2001vaintroub
authored andcommitted
Add MTR to verify TLS with chain of trust
Add tests to verify that TLS configurations with certificate chain of trust are supported. The contents of the commit are inspired from the MySQL project: mysql/mysql-server@969afef Credits to salman.s.khan@oracle.com All new code of the whole pull request, including one or several files that are either new files or modified ones, are contributed under the BSD-new license. I am contributing on behalf of my employer Amazon Web Services, Inc.
1 parent a9006bd commit a04ccfe

File tree

12 files changed

+598
-0
lines changed

12 files changed

+598
-0
lines changed

mysql-test/lib/generate-ssl-certs.sh

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,156 @@ rm -fv crldir/*
6464
cp -v client-cert.crl crldir/`openssl x509 -in client-cert.pem -noout -issuer_hash`.r0
6565

6666
rm -rf demoCA
67+
68+
# --- Certificate Chain ---
69+
# These tests are inspired from the following commit from MySQL Server
70+
# https://github.com/mysql/mysql-server/commit/969afef933f1872c5f38ea93047ef05c4509c335
71+
#
72+
# Credits to salman.s.khan@oracle.com
73+
#
74+
# -------------------------------------------------------------------------------------
75+
#
76+
# STEPS TO GENERATE THE FOLLOWING CHAINED CERTIFICATES WHICH IS USED IN THE TEST CASE :
77+
#
78+
# +---------+
79+
# | Root CA |
80+
# +---------+
81+
# |
82+
# /------------+-----------\
83+
# | |
84+
# +------------------+ +------------------+
85+
# | Intermediate CA1 | | Intermediate CA2 |
86+
# +------------------+ +------------------+
87+
# | |
88+
# +-------------+ +-------------+
89+
# | Server | | Client |
90+
# | certificate | | certificate |
91+
# +-------------+ +-------------+
92+
93+
cd cachain
94+
95+
mkdir ca
96+
mkdir server
97+
mkdir clients
98+
99+
mkdir ca/root.certs
100+
touch ca/root.index.txt
101+
touch ca/root.index.txt.attr
102+
echo '01' > ca/root.serial
103+
104+
cat > ca/root.cfg << EOF
105+
[ ca ]
106+
default_ca = CA_default
107+
[ CA_default ]
108+
dir = $PWD/ca
109+
certs = \$dir/certs
110+
database = \$dir/root.index.txt
111+
serial = \$dir/root.serial
112+
policy= policy_match
113+
[ policy_match ]
114+
organizationName = match
115+
organizationalUnitName = optional
116+
commonName = supplied
117+
emailAddress = optional
118+
[ v3_ca ]
119+
subjectKeyIdentifier=hash
120+
authorityKeyIdentifier=keyid:always,issuer
121+
basicConstraints = critical,CA:TRUE
122+
keyUsage = critical,keyCertSign,cRLSign
123+
[ v3_ca_intermediate ]
124+
subjectKeyIdentifier=hash
125+
authorityKeyIdentifier=keyid:always,issuer
126+
basicConstraints = critical,CA:TRUE,pathlen:0
127+
keyUsage = critical,keyCertSign,cRLSign
128+
EOF
129+
130+
# Generate Root CA key and cert
131+
openssl genrsa -out ca/root.key 4096
132+
openssl req -new -x509 '-sha256' -key ca/root.key -out ca/root.crt -days 7200 -subj "/O=MariaDB/OU=MariaDB/CN=Root CA" -config ca/root.cfg -extensions v3_ca
133+
134+
# Generate Intermediate CA1 key and cert
135+
openssl genrsa -out ca/intermediate_ca1.key 4096
136+
openssl req -new '-sha256' -key ca/intermediate_ca1.key -out ca/intermediate_ca1.csr -subj "/O=MariaDB/OU=MariaDB/CN=Intermediate CA1"
137+
138+
openssl ca -batch -days 7200 -notext -md sha256 -in ca/intermediate_ca1.csr -out ca/intermediate_ca1.crt -keyfile ca/root.key -cert ca/root.crt -outdir ca/root.certs/ -config ca/root.cfg -extensions v3_ca_intermediate
139+
140+
mkdir ca/intermediate_ca1.certs
141+
touch ca/intermediate_ca1.index.txt
142+
touch ca/intermediate_ca1.index.txt.attr
143+
echo '01' > ca/intermediate_ca1.serial
144+
145+
cat > ca/intermediate_ca1.cfg << EOF
146+
[ ca ]
147+
default_ca = CA_default
148+
[ CA_default ]
149+
dir = $PWD/ca
150+
certs = \$dir/intermediate_ca1.certs
151+
database = \$dir/intermediate_ca1.index.txt
152+
serial = \$dir/intermediate_ca1.serial
153+
policy= policy_match
154+
[ policy_match ]
155+
commonName = supplied
156+
[ alt_names ]
157+
DNS.1 = localhost
158+
IP.1 = 127.0.0.1
159+
[ server_cert ]
160+
basicConstraints = CA:FALSE
161+
keyUsage = critical,digitalSignature,keyEncipherment
162+
extendedKeyUsage = serverAuth
163+
subjectAltName = @alt_names
164+
EOF
165+
166+
# Generate Server key and cert
167+
openssl genrsa -out server/server.key 4096
168+
openssl req -new '-sha256' -key server/server.key -out server/server.csr -subj "/CN=localhost"
169+
170+
openssl ca -batch -days 7200 -notext -md sha256 -in server/server.csr -out server/server.crt -keyfile ca/intermediate_ca1.key -cert ca/intermediate_ca1.crt -outdir ca/intermediate_ca1.certs/ -config ca/intermediate_ca1.cfg -extensions server_cert
171+
172+
# Generate Intermediate CA2 key and cert
173+
openssl genrsa -out ca/intermediate_ca2.key 4096
174+
175+
openssl req -new '-sha256' -key ca/intermediate_ca2.key -out ca/intermediate_ca2.csr -subj "/O=MariaDB/OU=MariaDB/CN=Intermediate CA2"
176+
openssl ca -batch -days 7200 -notext -md sha256 -in ca/intermediate_ca2.csr -out ca/intermediate_ca2.crt -keyfile ca/root.key -cert ca/root.crt -outdir ca/root.certs/ -config ca/root.cfg -extensions v3_ca_intermediate
177+
178+
mkdir ca/intermediate_ca2.certs
179+
touch ca/intermediate_ca2.index.txt
180+
touch ca/intermediate_ca2.index.txt.attr
181+
echo '01' > ca/intermediate_ca2.serial
182+
183+
cat > ca/intermediate_ca2.cfg << EOF
184+
[ ca ]
185+
default_ca = CA_default
186+
[ CA_default ]
187+
dir = $PWD/ca
188+
certs = \$dir/intermediate_ca2.certs
189+
database = \$dir/intermediate_ca2.index.txt
190+
serial = \$dir/intermediate_ca2.serial
191+
policy= policy_match
192+
[ policy_match ]
193+
commonName = supplied
194+
[ client_cert ]
195+
basicConstraints = CA:FALSE
196+
keyUsage = critical,digitalSignature,keyEncipherment
197+
extendedKeyUsage = clientAuth
198+
EOF
199+
200+
# Generate Client key and cert
201+
openssl genrsa -out clients/client.key 4096
202+
openssl req -new '-sha256' -key clients/client.key -out clients/client.csr -subj "/CN=client"
203+
204+
openssl ca -batch -days 7200 -notext -md sha256 -in clients/client.csr -out clients/client.crt -keyfile ca/intermediate_ca2.key -cert ca/intermediate_ca2.crt -outdir ca/intermediate_ca2.certs/ -config ca/intermediate_ca2.cfg -extensions client_cert
205+
206+
cat server/server.crt ca/intermediate_ca1.crt > server/server.cachain
207+
208+
cat clients/client.crt ca/intermediate_ca2.crt > clients/client.cachain
209+
210+
cat ca/root.crt ca/intermediate_ca1.crt > ca/root_intermediate_ca1.crt
211+
212+
# Generate Unrelated Root CA key and cert
213+
openssl genrsa -out ca/unrelated_root.key 4096
214+
openssl req -new -x509 '-sha256' -key ca/unrelated_root.key -out ca/unrelated_root.crt -days 7200 -subj "/O=MariaDB/OU=MariaDB/CN=Root CA" -config ca/root.cfg -extensions v3_ca
215+
216+
cp -v ca/root.crt ca/root_intermediate_ca1.crt ca/unrelated_root.crt server/server.key server/server.cachain clients/client.key clients/client.cachain ./
217+
rm -rf ca server clients
218+
219+
cd ..
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
--ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/root.crt
2+
--ssl-key=$MYSQL_TEST_DIR/std_data/cachain/server.key
3+
--ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/server.cachain
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
call mtr.add_suppression("Server SSL certificate doesn't verify");
2+
CREATE USER 'user1'@'%' REQUIRE SSL;
3+
Variable_name Value
4+
Ssl_version TLS
5+
6+
Restart server and provide ssl-ca comprising intermediate_ca1 in addition to the root ca.
7+
Variable_name Value
8+
Ssl_version TLS
9+
10+
Restart server and provide unrelated ssl-ca at server startup
11+
ERROR 2026 (HY000): TLS/SSL error:
12+
DROP USER 'user1';
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# These tests are inspired from the following commit from MySQL Server
2+
# https://github.com/mysql/mysql-server/commit/969afef933f1872c5f38ea93047ef05c4509c335
3+
4+
# Credits to salman.s.khan@oracle.com
5+
6+
#####################################################################################
7+
# This test verifies MariaDB can handle chained ssl certificate
8+
# This test uses chained ssl certificates which is depicted as
9+
# below:-
10+
#
11+
# +---------+
12+
# | Root CA |
13+
# +---------+
14+
# |
15+
# /------------+-----------\
16+
# | |
17+
# +------------------+ +------------------+
18+
# | Intermediate CA1 | | Intermediate CA2 |
19+
# +------------------+ +------------------+
20+
# | |
21+
# +-------------+ +-------------+
22+
# | Server | | Client |
23+
# | certificate | | certificate |
24+
# +-------------+ +-------------+
25+
#
26+
# certificates that may be helpful for chain construction.
27+
# In order to validate server cert correctly, we need to
28+
# provide the trusted root certificate and the untrusted
29+
# intermediate certificates as part of ssl-ca. Hence
30+
# root_intermediate_ca1.crt (trusted root certificate +
31+
# untrusted intermediate ca1 certificate) is passed as with
32+
# --ssl-ca option
33+
34+
--source include/not_embedded.inc
35+
--source include/have_ssl_communication.inc
36+
37+
#Suppress warning by the server certificate verification check: unrelated CA
38+
call mtr.add_suppression("Server SSL certificate doesn't verify");
39+
40+
CREATE USER 'user1'@'%' REQUIRE SSL;
41+
42+
--replace_result TLSv1.3 TLS TLSv1.2 TLS
43+
--exec $MYSQL --host=localhost -P $MASTER_MYPORT --user=user1 --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/root.crt --ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/client.cachain --ssl-key=$MYSQL_TEST_DIR/std_data/cachain/client.key -e "SHOW STATUS LIKE 'ssl_version'"
44+
45+
--echo
46+
--echo Restart server and provide ssl-ca comprising intermediate_ca1 in addition to the root ca.
47+
--write_line wait $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
48+
--shutdown_server
49+
--source include/wait_until_disconnected.inc
50+
51+
--write_line "restart:--ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/root_intermediate_ca1.crt --ssl-key=$MYSQL_TEST_DIR/std_data/cachain/server.key --ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/server.cachain" $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
52+
--enable_reconnect
53+
--source include/wait_until_connected_again.inc
54+
55+
--replace_result TLSv1.3 TLS TLSv1.2 TLS
56+
--exec $MYSQL --host=localhost -P $MASTER_MYPORT --user=user1 --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/root.crt --ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/client.cachain --ssl-key=$MYSQL_TEST_DIR/std_data/cachain/client.key -e "SHOW STATUS LIKE 'ssl_version'"
57+
58+
--echo
59+
--echo Restart server and provide unrelated ssl-ca at server startup
60+
--write_line wait $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
61+
--shutdown_server
62+
--source include/wait_until_disconnected.inc
63+
64+
--write_line "restart:--ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/unrelated_root.crt --ssl-key=$MYSQL_TEST_DIR/std_data/cachain/server.key --ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/server.cachain" $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
65+
--enable_reconnect
66+
--source include/wait_until_connected_again.inc
67+
68+
--replace_regex /(ERROR 2026 \(HY000\): TLS\/SSL error:).*/\1/
69+
--error 1
70+
--exec $MYSQL --host=localhost -P $MASTER_MYPORT --user=user1 --ssl-verify-server-cert --ssl-ca=$MYSQL_TEST_DIR/std_data/cachain/unrelated_root.crt --ssl-cert=$MYSQL_TEST_DIR/std_data/cachain/client.cachain --ssl-key=$MYSQL_TEST_DIR/std_data/cachain/client.key -e "SHOW STATUS LIKE 'ssl_version'" 2>&1
71+
--echo
72+
73+
# Cleanup
74+
DROP USER 'user1';
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MRAwDgYDVQQKDAdNYXJp
3+
YURCMRAwDgYDVQQLDAdNYXJpYURCMRkwFwYDVQQDDBBJbnRlcm1lZGlhdGUgQ0Ey
4+
MB4XDTI1MTIxMjE2NTY0NFoXDTQ1MDgyOTE2NTY0NFowETEPMA0GA1UEAwwGY2xp
5+
ZW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtP9k21MRWxut47OV
6+
CjK9jn+nJHnZ0agpAJbgdvsIFKrkV4v0VHb7m5dURaqV1lF1WhrSmc8k7gcSB32O
7+
l+6Fo0OToe80KxH3NeYN5YscfnVOtrtbpwEkoYt4CFSn95TpjFrEaF0nZUwg5mJb
8+
+ZZsXzYk60GBA1It9uLMbqWAioRHbLprV6bIn0yDqKlf5JTQRk4JORxw3J66ppWC
9+
y+4OI8UmuOF4jJx3nWHTmPmtZEA7FgNisW9ReQC46+A8mdJCUqupIq6M7foG682+
10+
eKarvX1kjlOhL60PeuzazCmaGYTnkYI1wFC6Js6nE9xRTzS0UWR2UhBfgf9/FB86
11+
dqtD4qnwleW3VbnOim7XnXFrVq7yJ22sBO0KGRLRmBa2RCb8qvAogZ8zzYj/Jt4x
12+
QBHoqjFjGreaXZod0/P1yxTqgZBAz526WtH5EP4sO7xiFPvQONmrDsWAkG7PBRbw
13+
QZkpnYyH+IiGWQuL4Xsv8uSK6aKDvnXyvY97xKNQ3R4Nm/U5lsif9Uuw/dJHsIZl
14+
FkqG5m9p++7Kj5lAfliFtUmOOIHp3Vb3pMWds3muiJ5BH5g/1Ba2pe69GArWPx6P
15+
e63nhgUJ6DbUcS0xGX4lCeQg9/NPEimIk1CyqIcqSM6WN8//UUSiJuPArHxV1t5C
16+
Cv1BFIn27BPrTWGfrSEf4YThpDcCAwEAAaNyMHAwCQYDVR0TBAIwADAOBgNVHQ8B
17+
Af8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFDE0JF4hyOMP
18+
qskQdLbeJ/HEDQglMB8GA1UdIwQYMBaAFBvttDY6KgFqqyQy/GPUCB7wjMIjMA0G
19+
CSqGSIb3DQEBCwUAA4ICAQBgWR9PtXBDD6FPeZPkm5THyopYdueTHQ2MY4zH01mf
20+
tAgFJUOZGqaLPgnvhN1wd1JgU5K4kRR1MShz9JWo9B72t5PBL3Pr41xrhcoFja5C
21+
P+A4VOQ8yzQwA+V96Na11iXa+DiS6K3Vv7dp/bhAtWEk+6O/FTSdGdL5GAjbDXtd
22+
DKadvMx4tSrFZj4MW6V6xe3FzlCbg5ciEruhWUXPoW9XUOXqPScauPumXPJmYcsL
23+
OSz0br/Wh46vc6c7nYFTQd8UbyXU63/IdbTqB1AbY/uAZ47bzj9vGketKDWtYgJy
24+
uLFRybDZ5JX+S/p4kNYisfNeBwXr+Jc0ayTzWYnd2JjbIzeKBwcEsgCieT/rYJwt
25+
tUWcUb2I9936eeb7cBpqAcxaXSSABfqRdP/tIoVZrfEaufIeou/Gvglc1/PlIdlt
26+
nwURZBrwI6O2wWT6bZIlcM/kvIYpSVRV028p9SpZ9FGgn6aTYGVxcc50waWz6lSF
27+
WAaFkhiTeSQZugIPzk7SgDVsLQzL0YudAEb6afNTlF/k0qXrjjLsw1PbFJeVKkON
28+
guHQtkPAQaNgSRSPJtcG8s9+Qtcg8nGLTs33S0bY/BRF2M5v+aGVHTzlF9FNwVPx
29+
sLwekeDo75H/IMiB2CWQLsQbkwoCNIVsYaDrcfWGvaWt4OUkNKRjSTQ8OgJn4+OD
30+
hA==
31+
-----END CERTIFICATE-----
32+
-----BEGIN CERTIFICATE-----
33+
MIIFVjCCAz6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA2MRAwDgYDVQQKDAdNYXJp
34+
YURCMRAwDgYDVQQLDAdNYXJpYURCMRAwDgYDVQQDDAdSb290IENBMB4XDTI1MTIx
35+
MjE2NTY0NFoXDTQ1MDgyOTE2NTY0NFowPzEQMA4GA1UECgwHTWFyaWFEQjEQMA4G
36+
A1UECwwHTWFyaWFEQjEZMBcGA1UEAwwQSW50ZXJtZWRpYXRlIENBMjCCAiIwDQYJ
37+
KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL+xpdkcY7Xg/B+7ct45WHJtvArOwQdm
38+
vo6itdVRrXEc+MprySGjbLYvm+MB4QhI/e0Xhwvhh/6WAacSF9nu+GiWw02fZ5hR
39+
KNiepxAua+uxulPUcDapFRUt+w1H0HfB85qIChvJ1f56t+gtvLZpkNmS+p1U5wnp
40+
pFdIyBVDF3t6lr0Aoa5LRo1mbcB9MT4lJ7uMzcoTHFFQq4ROeyoRnleFGN0tIbqa
41+
njMBvN6lRpQToPfstQdD4B8LLwwYmJvPYInxJx76QV39PzPOsmq581WCMi49z3B4
42+
gBLxNP5/QfrXC6DVCFs1aq9SyuclcIcquMvgvrvQ0hI6l5xbvj6DLySUfJI1unCw
43+
GUdvg2U1DCQN3TPU3j8tHXHQJgp7y9NNCbaLKi60X+vWB3uhWnAzqV+QMvDxbA3w
44+
4PZobeBOeygst7f3020UVAcRZLpb4l/MJTzdjTVjmPz0I3wenKPj6m19BH+iVabz
45+
p4jc4wlBZuyBmhQ4UpYuCYzuIh+ki2daZc43UmdDx8sEKBooE1LBnn85pSQNwBuM
46+
Iu8FdqN/FpVlfnrbjM1sFKvDfm91knGRRQnd4R1WKm8PB0kmmQ6rq5eMc37Gn7oG
47+
cCWXomCtaVDExZ7MVscPAWVtfTpHKNkHpKh0WjEtO2+qY1Ts3h1EeJMTjp602rTo
48+
6vlmm8egTvQ9AgMBAAGjZjBkMB0GA1UdDgQWBBQb7bQ2OioBaqskMvxj1Age8IzC
49+
IzAfBgNVHSMEGDAWgBQEiu6rzWpHMQmM8hx+uT1eOZrSrDASBgNVHRMBAf8ECDAG
50+
AQH/AgEAMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAFRDs8s5g
51+
OZu+0XoDGOka5rVEcuKukOd8hM1kx5YXuFOsKISShJywCGtpBbs2acjqEjKMiiME
52+
uZSAapm/9YwQv1wM3XNqjzypxAl4ibE/5noJR7vDS0ixMgO884pDVdvHYwfw1aEJ
53+
lxMfDQkY3foMVDLNgkscHtJWH3rQ9icf6ATzvJh03Oxsk/5ku056Fs2hcNzrK0un
54+
omrycfAEIBikkqlS/OCWAHNp5nBkxcl/ZN1dO5empcbaYIuDSd9d4oPAFkbW3qoa
55+
cqOYrwWbKjlbPQ1vXmst0KmWnErWurm7e3aSkXzUTLRor12p0pfyydpQ79vNm/md
56+
uDXzhMc4/xdMQCSHMcVfbD2Oduz/Xh7G5n+NbGHNj1FzChraHj7Mr+/ls6sY8uRA
57+
oE/xB+Y+BJcJgsghUhulVFnF/tDPWDwHkSiDG8yXxaOr98/hdtdVlk2SZRmhmu5J
58+
8yVhAyPj/v7dxInQ4aE4AEkEtlSV9qHo1armzyORa9kqKbWUR9h3yba/U65citRQ
59+
sT7eDkoYueNew6mYcWrh7mCY6HflhM9Kskyem+Ev5BOPjNHyRU/yuSytfOQefa4R
60+
Zwh4oTAWlPImUlcImnDHaXTlCxu8carg87tk4RNlQX9VhsqJtZEFA9dvhfyCW1k0
61+
t9zG0FnuvV5vtSrkT/DUEnTHpSbzgO5dpU0=
62+
-----END CERTIFICATE-----
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
0txeBq/S0KIBpAsLK5G0aqD+qASd630=
52+
-----END PRIVATE KEY-----
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFXTCCA0WgAwIBAgIUMS/WV2Y7lwQy/yLQDAFU66GhILkwDQYJKoZIhvcNAQEL
3+
BQAwNjEQMA4GA1UECgwHTWFyaWFEQjEQMA4GA1UECwwHTWFyaWFEQjEQMA4GA1UE
4+
AwwHUm9vdCBDQTAeFw0yNTEyMTIxNjU2NDJaFw00NTA4MjkxNjU2NDJaMDYxEDAO
5+
BgNVBAoMB01hcmlhREIxEDAOBgNVBAsMB01hcmlhREIxEDAOBgNVBAMMB1Jvb3Qg
6+
Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC74Ifa/BBjtlkdANjj
7+
8IWn8+RL9/CODm5xURmWfJSzW4vebZZPGwkd3J5grTW3Zr+XGpXfbFPwC63pPDAu
8+
8CzVXCDNSK+Fa2usoLsnYW2CmxeMqrUeBVZk4YCZ0ztjwvvZkwrbN6L/uk0OMpy7
9+
T6c0lxysMAuTXYPGY8NNDW0tpKh2LbxzGsAkREbM17vAHveHyiJ8YmWHmUeujqir
10+
IlEcClTVEqSR8sWDwu01W/aD9u9wY1CJZyTNF3lJPZ8XqNBVZ89Ydl0y7W1oXOno
11+
b/6CTZYUxMQ/xUL00L1i+VcIKjV8jZFrFyrjJsnGlvqLlzUQ3dwFKJISIMcF9Jb2
12+
PnZTGNjhzROil3zrItjKTbScgLiWuqAh8YNmRRisDIlkMr8kFU2FjznrMkFP3LK8
13+
BPBKKwNaYzcbeR6xwMgj3rJvT5PDk0ffBn/hjyhgpVJfp10hvkFtV2kSE/ttmU0O
14+
+SQXgjXxsPs9223oTgjxt5FfZei+mdOJ69G6/boupF9eYpKe0cNLYnF0V+rFoxiK
15+
LFUQhNMJVDBca/cp791N9Nb1bhKSHnR+zQNQjBH4BAmWKzuzKLrt3L6QKK59xyy9
16+
HdbM/ohbEEKialgm/Lwrr+olcpyPMwujM5B0r9B+Z4b/oPEIsncNpCl553r7YQZ5
17+
P9PYiJ/kOBxCwnYeYlwk+KygNQIDAQABo2MwYTAdBgNVHQ4EFgQUBIruq81qRzEJ
18+
jPIcfrk9Xjma0qwwHwYDVR0jBBgwFoAUBIruq81qRzEJjPIcfrk9Xjma0qwwDwYD
19+
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
20+
AD47H7tlk1aWFEf1UK9Xnh2hELTSXX3/uE5Sxx32DINTL2wcqiLOgxTMEaNr1EeF
21+
dCkuADFclEsJfh+mWmhRsD7KKKlq4grMX9jTobfj0sd84M+d+YgkqAlP9f9b6QrX
22+
e9pv2FVCL467JARWSZRuLJ7SZOHK88ajNnAG36LFdtXBDOAcogtddRfAil/5PMP4
23+
HIgZQOG96h0yMDoIJB1RIicf8f56xsC5m1Jbz4B3V8rPcCGK9CKWLrgd0FiXZV45
24+
GMuXLsOfEaUEtMz/gRIdQlMHgTWk6Inprm9wynL51J0gE3BZIm26G1gpae3GcG5Z
25+
q8BQQbQfn6Tg/H8a+56H1CDclt9qQjRMRDH81r5w7hK1LvjKrEKjdmzmxaPAqq71
26+
Ne5gXJxYjgSwpFB5MYX4K0Do2zoqE7HhuGc/0oWhm0IrAy616tOZtmopoNiYoJ88
27+
xjHXRCKs6w6vPsNew75u5N7mU7IlCXjxVSF6cSyRd4fnBY3kRxZPJWlOe8jsIuED
28+
PZYfAI+10nOGNY7c3scvxgZCnNU0THryem0PNIM0XaM/fR+SH+Kl+V9x14sDouIS
29+
B6gCYEk2oZW7EdfLN3FXFufoIPNsR1KkDsh7RKYamMVlSsGEEFPt3h9I0c3kAaOT
30+
FHZ29DjuAuSGaEvs4NiOsYmaQP51BM1sFs/gkz678KZy
31+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)