欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TLS OpenSSL 证书验证

程序员文章站 2022-03-06 18:58:16
...
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