diff --git a/libratbox/src/openssl.c b/libratbox/src/openssl.c index 850318b2d..8044be1d7 100644 --- a/libratbox/src/openssl.c +++ b/libratbox/src/openssl.c @@ -33,6 +33,7 @@ #include #include #include +#include #include static SSL_CTX *ssl_server_ctx; @@ -661,12 +662,15 @@ rb_get_ssl_certfp(rb_fde_t *F, uint8_t certfp[RB_SSL_CERTFP_LEN]) if(cert != NULL) { res = SSL_get_verify_result((SSL *) F->ssl); - if(res == X509_V_OK || - res == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN || - res == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE || - res == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) + if( + res == X509_V_OK || + res == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN || + res == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE || + res == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || + res == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY) { - memcpy(certfp, cert->sha1_hash, RB_SSL_CERTFP_LEN); + unsigned int certfp_length = RB_SSL_CERTFP_LEN; + X509_digest(cert, EVP_sha1(), certfp, &certfp_length); X509_free(cert); return 1; }