int verify_err = SSL_get_verify_result(client.ssl);
拿到非X509_V_OK结果后,需由客户端/服务端应用层来决定是否中止TLS流程,在一些场景下,openSSL库并不会通过Alert Message来反馈证书验证失败的结果,具体如下:
场景1:当服务端只发送合法的用户证书时,客户端设置根证书和二级证书:
r = SSL_CTX_load_verify_locations(k->ctx, "/data/user/0/cn.areful.openssl/files/TEST Root CA.pem", NULL); //根证书r = SSL_CTX_load_verify_locations(k->ctx, "/data/user/0/cn.areful.openssl/files/TEST USER CA.pem", NULL); //二级证书
verify_err = X509_V_OK
场景2:当服务端只发送合法的用户证书时,客户端仅设置根证书或者未设置根证书及二级证书:
verify_err = X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
场景3:当服务端只发送合法的用户证书时,客户端仅设置二级证书:
verify_err = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
场景4:当服务端只发送过期的用户证书时,客户端仅设置根证书:
verify_err = X509_V_ERR_CERT_HAS_EXPIRED
场景5:当服务端发送证书链(包括根证书,二级证书,用户证书)时,客户端未设置根证书及二级证书:
verify_err = X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
场景6:当服务端只发送经过篡改签名数据或者篡改时间的用户证书时,客户端设置根证书和二级证书:
verify_err = X509_V_ERR_CERT_SIGNATURE_FAILURE
且在客户端发完证书后,收到服务端发来的Alert Message:15030300020233
场景7:当服务端只发送经过篡改公钥数据的用户证书时,客户端设置根证书和二级证书:
verify_err = X509_V_ERR_CERT_SIGNATURE_FAILURE
且收到客户端发来的Alert Message:15030300020233
网友评论