Skip to content

Commit e1bcbb1

Browse files
committed
Fix GnuTLS certvalid certificate validation
1 parent 8a737f4 commit e1bcbb1

4 files changed

Lines changed: 38 additions & 2 deletions

File tree

src/tcp.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,6 +2743,14 @@ relpTcpVerifyCertificateCallback(gnutls_session_t session)
27432743
r = relpTcpChkPeerFingerprint(pThis, cert);
27442744
} else if(pThis->authmode == eRelpAuthMode_Name){
27452745
r = relpTcpChkPeerName(pThis, (void*)cert);
2746+
} else if(pThis->authmode == eRelpAuthMode_CertValid) {
2747+
unsigned int status = 0;
2748+
r = gnutls_certificate_verify_peers2(pThis->session, &status);
2749+
if(r < 0 || status != 0) {
2750+
callOnAuthErr(pThis, "", "certificate validation failed",
2751+
RELP_RET_AUTH_CERT_INVL);
2752+
r = GNUTLS_E_CERTIFICATE_ERROR;
2753+
}
27462754
}
27472755

27482756
if(r != 0) goto done;

tests/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ TLS_TESTS= \
3030
tls-basic-tlscommand.sh \
3131
tls-basic-tlscommand-ciphers.sh \
3232
tls-basic-certchain.sh \
33+
tls-certvalid-untrusted.sh \
3334
tls-basic-certvalid-mixed.sh \
3435
tls-receiver-abort.sh \
3536
tls-missing-param-sender.sh \

tests/tls-basic-certchain.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/bin/bash
22
. ${srcdir:=$(pwd)}/test-framework.sh
33
function actual_test() {
4-
startup_receiver -l $TEST_TLS_LIB -T -a "certvalid" -y ${srcdir}/tls-certs/ossl-server-certchain.pem -z ${srcdir}/tls-certs/ossl-server-key.pem -e error.out.log
4+
startup_receiver -l $TEST_TLS_LIB -T -a "certvalid" -x ${srcdir}/tls-certs/ossl-ca.pem -y ${srcdir}/tls-certs/ossl-server-certchain.pem -z ${srcdir}/tls-certs/ossl-server-key.pem -e error.out.log
55

66
echo 'Send Message...'
7-
./send -l $TEST_TLS_LIB -t 127.0.0.1 -p $TESTPORT -m "testmessage" -T -a "certvalid" -y ${srcdir}/tls-certs/ossl-client-certchain.pem -z ${srcdir}/tls-certs/ossl-client-key.pem $OPT_VERBOSE 1>>${OUTFILE} 2>&1
7+
./send -l $TEST_TLS_LIB -t 127.0.0.1 -p $TESTPORT -m "testmessage" -T -a "certvalid" -x ${srcdir}/tls-certs/ossl-ca.pem -y ${srcdir}/tls-certs/ossl-client-certchain.pem -z ${srcdir}/tls-certs/ossl-client-key.pem $OPT_VERBOSE 1>>${OUTFILE} 2>&1
88

99
stop_receiver
1010
check_output "testmessage"

tests/tls-certvalid-untrusted.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/bash
2+
. ${srcdir:=$(pwd)}/test-framework.sh
3+
function actual_test() {
4+
startup_receiver -l $TEST_TLS_LIB -T -a "certvalid" \
5+
-x ${srcdir}/tls-certs/ossl-ca.pem \
6+
-y ${srcdir}/tls-certs/ossl-server-cert.pem \
7+
-z ${srcdir}/tls-certs/ossl-server-key.pem \
8+
-e error.out.log
9+
10+
echo 'Send Message with expired client certificate...'
11+
./send -l $TEST_TLS_LIB -t 127.0.0.1 -p $TESTPORT -m "testmessage" -T -a "certvalid" \
12+
-x ${srcdir}/tls-certs/ossl-ca.pem \
13+
-y ${srcdir}/tls-certs/ossl-clientbrok-cert.pem \
14+
-z ${srcdir}/tls-certs/ossl-clientbrok-key.pem \
15+
$OPT_VERBOSE 1>>${OUTFILE} 2>&1
16+
if [ $? -eq 0 ]; then
17+
printf 'FAIL: send succeeded with an invalid certificate in certvalid mode\n'
18+
stop_receiver
19+
exit 1
20+
fi
21+
22+
stop_receiver
23+
check_output "certificate validation failed" error.out.log
24+
}
25+
26+
do_tls_subtests
27+
terminate

0 commit comments

Comments
 (0)