Skip to content

Commit 13380bf

Browse files
author
Yashwant Sahu
committed
Bug #22295186: CERTIFICATE VALIDATION BUG IN MYSQL MAY ALLOW MITM
1 parent 863f7ce commit 13380bf

8 files changed

+230
-26
lines changed
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDWzCCAkOgAwIBAgIJAO/QdKLEDQdXMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNV
3+
BAYTAklOMREwDwYDVQQIDAhLYXJuYXRrYTESMBAGA1UEBwwJQmFuZ2Fsb3JlMQ4w
4+
DAYDVQQKDAVNeVNRTDAeFw0xNjAxMDUxMDA1MDhaFw0yNTExMTMxMDA1MDhaMEQx
5+
CzAJBgNVBAYTAklOMREwDwYDVQQIDAhLYXJuYXRrYTESMBAGA1UEBwwJQmFuZ2Fs
6+
b3JlMQ4wDAYDVQQKDAVNeVNRTDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
7+
ggEBAKdOCuS2CzfBTJ2x8SAzY0J7cYJfNJvMDF1cvANnhkIhtnkWt/HZ5DJ9NxeX
8+
q5h7FJLAi4gddqdk/tvQJw0V6gZepJr/mKVnMPivF5+oHPc9ZJQMX6B3FBNwWylm
9+
ACd5GKx8I/H/MXyuhQTcoV//Ab+2pI8RHeYbBsm3lHH+tX7bRU6mUFjneqMpiCkb
10+
JHt6BWZiWR10O6pMuGQ9+dDdsLhEV1fj3CctEPwW6rs4IZzD8xl5n+8cy7qu6eYH
11+
Wt/snwsTzkrufeMRqTtqelxON9eoQwYOR1oH3vNEVlcbuoJAvaWOqBROUBdf12SP
12+
TYSdP9nlRh7lTKQOywN4kYt6LqUCAwEAAaNQME4wHQYDVR0OBBYEFJ4c9tKaUU0P
13+
EjBq5G207jjXI7RAMB8GA1UdIwQYMBaAFJ4c9tKaUU0PEjBq5G207jjXI7RAMAwG
14+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABRnUyj21oFi0SGJg/K5+8Lc
15+
4n6OwVU/NgLOysIB0baIP/Rqeaze59xG/v9FPQgBlWcJK3RabOywx5bxAxdcus+1
16+
yp5j4h37Qq1/qkgqmevvdSAPa0OBQbLb+58/naV+ywUpCYZ6flLdCMH3fXuDSlSq
17+
qrCznextjojtWbnzrBmCmJmXWGd2gSaJDvb90ZZp/Elt3vN1sgjW0M/JEkb4MJ1r
18+
6nfD/FHr2lUwBHm2yk7Blovx7x4d/Ip3pglk63cNO/Rn0SBTdoVDS2LB9du3Phq2
19+
TZiL3NrRMGUNwmdaavyrJxaPq5D+Sfa4LYP3MMYD4KhLogNzIl299n5joyizlJw=
20+
-----END CERTIFICATE-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDJzCCAg8CAQEwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCSU4xETAPBgNV
3+
BAgMCEthcm5hdGthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDjAMBgNVBAoMBU15U1FM
4+
MB4XDTE2MDEwNTEwMDgyN1oXDTI1MTExMzEwMDgyN1owbzELMAkGA1UEBhMCSU4x
5+
EjAQBgNVBAgMCTpLYXJuYXRrYTETMBEGA1UEBwwKOkJhbmdhbG9yZTEPMA0GA1UE
6+
CgwGOk15U1FMMRcwFQYDVQQLDA4vQ049bG9jYWxob3N0LzENMAsGA1UEAwwEZmFp
7+
bDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3wnWuJodzZYq9TAJRm
8+
HU7995FA3TEWdUinYTgGP79aTVQ4M9aeINlB6whWXOI8seh9Ja7C6kMzqOgYbgCl
9+
WlDPAVJWktFYeWXOLxbpzh1KWkS6jBkWT02t7H7JcYbil7xjlJUxLz4UOOUDUDIP
10+
6yqdA9VE3osESttjzj57Zm2xPqzbIHVJfORn7EexH4pryS7439p6i4XtfL31NJ8V
11+
07M3j3a8GqbcEqXYvcUCrLnywDQ1igP817b6ta52nbgYWiqdn0mJs535UJ/p/rSl
12+
D4Ae/6G3BSEY7whir6xY6vsd4KJ6w+wRCHnY0ky6OdDJVJLH1iqh7si7P3RBGkxw
13+
Y7MCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAggbw1jj2b7H5KDdeGJGIoOGkQAcs
14+
GNSJussCfdk7qnzYXKmjyNppC86jjaOrXona5f+SNCuujdu86Tv8V69EH57k4lUc
15+
DW7J4AD3vUb/tBzB0tsI/76Z4gm1XoCsnCGGpWd8GQAg/QNn/ZfJB2Vb/9ObN6rH
16+
0HV7ouB6OGZSsb71+grKiN6mDyB1lZynCGvqBxOCKFISfcRbCNFHo/pONlHaNGPE
17+
vjDH1bPZbEHj8owYgkdcQe0a8EbJYeQfm6fH8V8bmUcG7N60DrCnq4l1qwwVkh1S
18+
7RpIDgrWkU+esIIdYZIIbtDxQP1Sm7kUh++7b+bcHnyw3KtDVSCw7MIedA==
19+
-----END CERTIFICATE-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDEzCCAfsCAQEwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCSU4xETAPBgNV
3+
BAgMCEthcm5hdGthMRIwEAYDVQQHDAlCYW5nYWxvcmUxDjAMBgNVBAoMBU15U1FM
4+
MB4XDTE2MDEwNTEwMDU1OVoXDTI1MTExMzEwMDU1OVowWzELMAkGA1UEBhMCSU4x
5+
EjAQBgNVBAgMCTpLYXJuYXRrYTETMBEGA1UEBwwKOkJhbmdhbG9yZTEPMA0GA1UE
6+
CgwGOk15U1FMMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUA
7+
A4IBDwAwggEKAoIBAQDAmkbUwDe+nrqL8A8uwlIZk74HHCDjUAWrskKF9leEIQsB
8+
5exFZ8JEo1u6mdR4laQWsxizGdTPqIEidkDyyEMh4+joHgyQEPD/G3rFVW8yEFHb
9+
42O04O96BEPFXNPDRuX3MxI+lGbYDjxTS/WhVub4/3SqLjC28FJmEUXIHA0/A+c5
10+
hlYXK0u+aPAqXxHIjBgB4BxxHXZKqecmvR3LhXoVmhJmndsVfKajB27nDKc8/OTI
11+
H2SXb6h3nRPDXRfwB/C5i+004tEsVeIgkYshcCgLSyDdeVieUP2pm3EAmDSjmtLF
12+
6CgY/EBSfH+JCKFUk75bA4k8CCGzBfIeOcsKHwgFAgMBAAEwDQYJKoZIhvcNAQEL
13+
BQADggEBAInDuHtDkeT6dkWmRJCP56c4xiQqib2QuYUuMSrAhf07xlLHc6iHnD2X
14+
hCWCrja6uwF90DnPjeouKMAUe5txq/uKA8/Y/NfXN6nPiAeHLI0qnTv7Mr9TQ8zU
15+
DNDwRz6onlI2cS4GhrwAnlpiaxu7AjMUWHtfBFGFrgn3PawjDQpsBZNcxw1QsLc0
16+
E0hFrWLOd0vDETEhoRge88N7a0jqK0Rd9cvRWnvjI+IsjQMLZzKufivIHPzI9K+9
17+
Wtp8iRHcaBr5DpsBjgsO7dqVRbsNyaWsdHdLt+CQSGXpv7P6fq3K6nJFTBeIgSfS
18+
gflrHVKYZRkKDDDpX4yHNdnIqrvy4RU=
19+
-----END CERTIFICATE-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEpQIBAAKCAQEAvfCda4mh3Nlir1MAlGYdTv33kUDdMRZ1SKdhOAY/v1pNVDgz
3+
1p4g2UHrCFZc4jyx6H0lrsLqQzOo6BhuAKVaUM8BUlaS0Vh5Zc4vFunOHUpaRLqM
4+
GRZPTa3sfslxhuKXvGOUlTEvPhQ45QNQMg/rKp0D1UTeiwRK22POPntmbbE+rNsg
5+
dUl85GfsR7EfimvJLvjf2nqLhe18vfU0nxXTszePdrwaptwSpdi9xQKsufLANDWK
6+
A/zXtvq1rnaduBhaKp2fSYmznflQn+n+tKUPgB7/obcFIRjvCGKvrFjq+x3gonrD
7+
7BEIedjSTLo50MlUksfWKqHuyLs/dEEaTHBjswIDAQABAoIBAQCSUyNzDPydXvsf
8+
hhoUOParPAvU4tuETYDdD9Vdi7Lgf3jDQOjulbNIq/ec3KuBvrBwIrk9APvn+YxO
9+
AUP9S2Vgi5jBDeDdVgNv4n90b3pSJk2UVQJI8V72wN5Ibnf/KeErSKvWo6V5daq/
10+
AuZtKsZIdd3WFtA62HuyuBjTGc23Alj1C0EKnN0Rx1uBwDvx/OVQ266Us/x8jJqW
11+
ZxIOfcvfNzBQEa5hAzbQCReVaC+rBLRAcMM2yGP7aDa+8cRkwuVlSqpX8CXBdLoU
12+
PqmU49etcW72Rb1AFt9WgEu1Oh9UYbHFSB+FEbO8IGcGBsuYHf9zkxQyjpy/iKyT
13+
H5dTu7YBAoGBAOWqEGepZVrfB+P6X18n3vbJhgYmF0sa0mCmwkFYgk36yNqsZ8at
14+
lQjm5mbn4wjEKHIcQ/T1taq73W471M+PxMnn0WTwoG5jsyarZGgy6/95YXiyZtQe
15+
qgA4P3aKkCteRP22DjG7uxmm9Hoqx8Z31vfRTLAHN1IEHPHHkg/J3gPTAoGBANO4
16+
aqKeY4vcDvVkvxVbADrw++tZGwA+RuxfO4HKKru59VdA2PsAxhXwb3Dfejwj7hYW
17+
yE9edHjGpMr1+dpf8YJYs7qjajHe1HxBOYqQGHycIdw+Gv56R4HpaS9eW3x8l/Pi
18+
b4xnAodv2qIriACOe7br+rll4wKX46Wt64zdvpShAoGAT0r3HQM0Vjp4u/J+qRjX
19+
9za+yjKuiiS5i9snaG5JlujGHhG2Rrc5pHgsBk17alRnbnZp1BJdZZQ1MFEB+aO2
20+
mssp1YLqsRJFEU3NfdhO+MaMq6JUtFnd8fN5ndDbU83ZXgtUPUGGqKWm9OL+VHyd
21+
wLQHmSL0q6F16Ngxirf0qjcCgYEAtSmiJVA+gdhk/FmeoBlkEwtNpM50Kjsf2PaM
22+
Jrzk4Al5A5Y7lFvPI8q+sOio4XklKsWH1VJPe2EOdZUQnGlocE6SS+u03MN9Mm1l
23+
XUl7inTXDGwgEQx0z5b4KE4nHlhGdauWI5+pLFbrz8RL9Z32AkneGnIyU2/AnW46
24+
lijQAMECgYEAmgp/88ndIw49RCtMhYhtXQ87AsEAP6kzXQyKppDkn0os+xI5igIL
25+
i/UDxB33hx3yjrUZwoGDV9MwlMhZNX5Tf5bwjPmmh1NR6KdEpPt5AkklX4s6uil2
26+
Bxl1P5l1jl/PbEYtv5LDZKIPANWRzViMSIWqjUWlbdqE7/vjx+Oo+cc=
27+
-----END RSA PRIVATE KEY-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAwJpG1MA3vp66i/APLsJSGZO+Bxwg41AFq7JChfZXhCELAeXs
3+
RWfCRKNbupnUeJWkFrMYsxnUz6iBInZA8shDIePo6B4MkBDw/xt6xVVvMhBR2+Nj
4+
tODvegRDxVzTw0bl9zMSPpRm2A48U0v1oVbm+P90qi4wtvBSZhFFyBwNPwPnOYZW
5+
FytLvmjwKl8RyIwYAeAccR12SqnnJr0dy4V6FZoSZp3bFXymowdu5wynPPzkyB9k
6+
l2+od50Tw10X8AfwuYvtNOLRLFXiIJGLIXAoC0sg3XlYnlD9qZtxAJg0o5rSxego
7+
GPxAUnx/iQihVJO+WwOJPAghswXyHjnLCh8IBQIDAQABAoIBAHPQUSc9LkgBSks7
8+
XuXPE28t1+aOk3gcdkx4NGg5aQaal/PcPea+LaL4WAAs4AZidPjxWLjZn43+1SfT
9+
09opcbS/Rx3Mc+FtTn0YGQrwBJ0mExMV+K6bU2Ubi2TyHKQfzciHfUEEG5Nve/ba
10+
hikuCFVRxuVOQRzABcw6NqvNsmlg892lfw6/+RDwMBcz7ocwzmiOUoIxgjyFo9G4
11+
aJvRmHLij5892H6qveik+A/Xr+8leGQHiQET2wW/F9MFP5ypIT7aeE6remeZH7fG
12+
f4/Zfei/TE4xK2ElNR/91byzeKIVY4vjtTndAiBuqpfYuICb40MC02LNW5Oe6VN2
13+
3mQ6EgECgYEA7O4ndBnbs/00gyTGyNg6I+3wRTibhNH4R8RZFJiLfKRKOlUiLhUo
14+
+bQeO4bCQ6YY++TYDvMEXTlA3jow9R9Mj2AWc6bNmQmJd/065QyFHftywT66I+V4
15+
rz1ohSJyHXcv4DxqNk3o3Vb4N8GFjZKcodSgTv2Lk+9ipDYFcQiZop0CgYEA0BrF
16+
SIyLTnjoVht/7RbIGEqhMQUiz5mx7qQ1TPB+YTG77G2xXJNg5d6S7WT4LN+cqbxN
17+
YdndIbW4NdV7bH7FlG9q7jfkuZ+AY2BPU047tcDeyO0HYYEhVY+EyZqHci/26mvt
18+
JrawdqS5HQS1y/rKfytm7YBGTvqoNZHvOHc6aokCgYEAxcjlbJkte+pyzMuFmiJP
19+
HrFBczeXM+BoJ9j0GCpjvvAS+vEYsGl/pDvFRSHwx7I/hv/5kTkzOnNSAHGJbwbq
20+
zYGEHJVxakC43k6pvI2gDnBa0pD/qHmmLnvP5dvkcU6Oy90DOUP+kc9JNJo7V/y8
21+
/qdWD7q+qwcaTETAdCSexE0CgYA/DN1Y7bwHOnqqHArWOmDFe1b7EyNI4rgWJYpA
22+
lVy09eyJ5XInKj/hZV3+rujCL723b2XCj89/tx7osJWEeaRDJL6xDh4uXzT25uch
23+
xkIw/w6Asc/aqtT+p00EB92hqwaUX76qTA+K4r1zHUo3UvSnMu8sZgDnTOpJ0L05
24+
zmXUgQKBgDT+IFrAzOty4B0mJncTCC/TulpW704bEZwNJfQSdtiBQr/vqoXygBQc
25+
bHfpncpSfhzHB5lhRUv02TqXgl53D70nM7JD5nx98WYTTBxsbvxPlt4gBRZkfgq5
26+
tHKclAArc1SbfW5Z8oYyl7h33LQJK116QSyiIIGieH5VXNPwnqUs
27+
-----END RSA PRIVATE KEY-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#T1: Host name (/CN=localhost/) as OU name in the server certificate, server certificate verification should fail.
2+
#T2: Host name (localhost) as common name in the server certificate, server certificate verification should pass.
3+
Variable_name Value
4+
Ssl_version TLS_VERSION
5+
# restart server using restart
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Want to skip this test from Valgrind execution
2+
--source include/no_valgrind_without_big.inc
3+
# This test should work in embedded server after we fix mysqltest
4+
-- source include/not_embedded.inc
5+
-- source include/have_ssl_communication.inc
6+
# Save the initial number of concurrent sessions
7+
--source include/count_sessions.inc
8+
9+
let $ssl_verify_fail_path = --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-key=$MYSQL_TEST_DIR/std_data/server-key-verify-fail.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert-verify-fail.pem;
10+
let $ssl_verify_pass_path = --ssl --ssl-ca=$MYSQL_TEST_DIR/std_data/ca-cert-verify.pem --ssl-key=$MYSQL_TEST_DIR/std_data/server-key-verify-pass.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/server-cert-verify-pass.pem;
11+
12+
let $tls_default= TLSv1.1;
13+
let $openssl= query_get_value("SHOW STATUS LIKE 'Rsa_public_key'", Variable_name, 1);
14+
if ($openssl == 'Rsa_public_key'){
15+
let $tls_default= TLSv1.2;
16+
}
17+
18+
--echo #T1: Host name (/CN=localhost/) as OU name in the server certificate, server certificate verification should fail.
19+
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
20+
--shutdown_server
21+
--source include/wait_until_disconnected.inc
22+
23+
--exec echo "restart:" $ssl_verify_fail_path > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
24+
--enable_reconnect
25+
--source include/wait_until_connected_again.inc
26+
27+
--error 1
28+
--exec $MYSQL --protocol=tcp --ssl-verify-server-cert -e "SHOW STATUS like 'Ssl_version'"
29+
30+
--echo #T2: Host name (localhost) as common name in the server certificate, server certificate verification should pass.
31+
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
32+
--shutdown_server
33+
--source include/wait_until_disconnected.inc
34+
35+
--exec echo "restart:" $ssl_verify_pass_path > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
36+
--enable_reconnect
37+
--source include/wait_until_connected_again.inc
38+
39+
--replace_result $tls_default TLS_VERSION
40+
--exec $MYSQL --protocol=tcp --ssl-verify-server-cert -e "SHOW STATUS like 'Ssl_version'"
41+
42+
--echo # restart server using restart
43+
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
44+
--shutdown_server
45+
--source include/wait_until_disconnected.inc
46+
47+
--exec echo "restart: " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
48+
--enable_reconnect
49+
--source include/wait_until_connected_again.inc

sql-common/client.c

+64-26
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -1885,63 +1885,101 @@ mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused)))
18851885
static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const char **errptr)
18861886
{
18871887
SSL *ssl;
1888-
X509 *server_cert;
1889-
char *cp1, *cp2;
1890-
char buf[256];
1888+
X509 *server_cert= NULL;
1889+
char *cn= NULL;
1890+
int cn_loc= -1;
1891+
ASN1_STRING *cn_asn1= NULL;
1892+
X509_NAME_ENTRY *cn_entry= NULL;
1893+
X509_NAME *subject= NULL;
1894+
int ret_validation= 1;
1895+
18911896
DBUG_ENTER("ssl_verify_server_cert");
18921897
DBUG_PRINT("enter", ("server_hostname: %s", server_hostname));
18931898

18941899
if (!(ssl= (SSL*)vio->ssl_arg))
18951900
{
18961901
*errptr= "No SSL pointer found";
1897-
DBUG_RETURN(1);
1902+
goto error;
18981903
}
18991904

19001905
if (!server_hostname)
19011906
{
19021907
*errptr= "No server hostname supplied";
1903-
DBUG_RETURN(1);
1908+
goto error;
19041909
}
19051910

19061911
if (!(server_cert= SSL_get_peer_certificate(ssl)))
19071912
{
19081913
*errptr= "Could not get server certificate";
1909-
DBUG_RETURN(1);
1914+
goto error;
19101915
}
19111916

19121917
if (X509_V_OK != SSL_get_verify_result(ssl))
19131918
{
19141919
*errptr= "Failed to verify the server certificate";
1915-
X509_free(server_cert);
1916-
DBUG_RETURN(1);
1920+
goto error;
19171921
}
19181922
/*
19191923
We already know that the certificate exchanged was valid; the SSL library
19201924
handled that. Now we need to verify that the contents of the certificate
19211925
are what we expect.
19221926
*/
19231927

1924-
X509_NAME_oneline(X509_get_subject_name(server_cert), buf, sizeof(buf));
1925-
X509_free (server_cert);
1928+
/*
1929+
Some notes for future development
1930+
We should check host name in alternative name first and then if needed check in common name.
1931+
Currently yssl doesn't support alternative name.
1932+
openssl 1.0.2 support X509_check_host method for host name validation, we may need to start using
1933+
X509_check_host in the future.
1934+
*/
19261935

1927-
DBUG_PRINT("info", ("hostname in cert: %s", buf));
1928-
cp1= strstr(buf, "/CN=");
1929-
if (cp1)
1936+
subject= X509_get_subject_name((X509 *) server_cert);
1937+
// Find the CN location in the subject
1938+
cn_loc= X509_NAME_get_index_by_NID(subject, NID_commonName, -1);
1939+
if (cn_loc < 0)
19301940
{
1931-
cp1+= 4; /* Skip the "/CN=" that we found */
1932-
/* Search for next / which might be the delimiter for email */
1933-
cp2= strchr(cp1, '/');
1934-
if (cp2)
1935-
*cp2= '\0';
1936-
DBUG_PRINT("info", ("Server hostname in cert: %s", cp1));
1937-
if (!strcmp(cp1, server_hostname))
1938-
{
1939-
/* Success */
1940-
DBUG_RETURN(0);
1941-
}
1941+
*errptr= "Failed to get CN location in the certificate subject";
1942+
goto error;
1943+
}
1944+
1945+
// Get the CN entry for given location
1946+
cn_entry= X509_NAME_get_entry(subject, cn_loc);
1947+
if (cn_entry == NULL)
1948+
{
1949+
*errptr= "Failed to get CN entry using CN location";
1950+
goto error;
19421951
}
1952+
1953+
// Get CN from common name entry
1954+
cn_asn1 = X509_NAME_ENTRY_get_data(cn_entry);
1955+
if (cn_asn1 == NULL)
1956+
{
1957+
*errptr= "Failed to get CN from CN entry";
1958+
goto error;
1959+
}
1960+
1961+
cn= (char *) ASN1_STRING_data(cn_asn1);
1962+
1963+
// There should not be any NULL embedded in the CN
1964+
if ((size_t)ASN1_STRING_length(cn_asn1) != strlen(cn))
1965+
{
1966+
*errptr= "NULL embedded in the certificate CN";
1967+
goto error;
1968+
}
1969+
1970+
DBUG_PRINT("info", ("Server hostname in cert: %s", cn));
1971+
if (!strcmp(cn, server_hostname))
1972+
{
1973+
/* Success */
1974+
ret_validation= 0;
1975+
}
1976+
19431977
*errptr= "SSL certificate validation failure";
1944-
DBUG_RETURN(1);
1978+
1979+
error:
1980+
if (server_cert != NULL)
1981+
X509_free (server_cert);
1982+
DBUG_RETURN(ret_validation);
19451983
}
19461984

19471985
#endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */

0 commit comments

Comments
 (0)