|
@@ -30,7 +30,7 @@
|
|
/* FIXME: remove this and use the value in domains instead */
|
|
/* FIXME: remove this and use the value in domains instead */
|
|
#define VERIFY_DEPTH_S 3
|
|
#define VERIFY_DEPTH_S 3
|
|
|
|
|
|
-/* This callback is called during each verification process,
|
|
|
|
|
|
+/* This callback is called during each verification process,
|
|
at each step during the chain of certificates (this function
|
|
at each step during the chain of certificates (this function
|
|
is not the certificate_verification one!). */
|
|
is not the certificate_verification one!). */
|
|
int verify_callback(int pre_verify_ok, X509_STORE_CTX *ctx) {
|
|
int verify_callback(int pre_verify_ok, X509_STORE_CTX *ctx) {
|
|
@@ -44,49 +44,54 @@ int verify_callback(int pre_verify_ok, X509_STORE_CTX *ctx) {
|
|
LOG(L_NOTICE, "tls_init: verify_callback: cert chain too long ( depth > VERIFY_DEPTH_S)\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: cert chain too long ( depth > VERIFY_DEPTH_S)\n");
|
|
pre_verify_ok=0;
|
|
pre_verify_ok=0;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if( pre_verify_ok ) {
|
|
if( pre_verify_ok ) {
|
|
LOG(L_NOTICE, "tls_init: verify_callback: preverify is good: verify return: %d\n", pre_verify_ok);
|
|
LOG(L_NOTICE, "tls_init: verify_callback: preverify is good: verify return: %d\n", pre_verify_ok);
|
|
return pre_verify_ok;
|
|
return pre_verify_ok;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
err_cert = X509_STORE_CTX_get_current_cert(ctx);
|
|
err_cert = X509_STORE_CTX_get_current_cert(ctx);
|
|
- err = X509_STORE_CTX_get_error(ctx);
|
|
|
|
|
|
+ err = X509_STORE_CTX_get_error(ctx);
|
|
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
|
|
X509_NAME_oneline(X509_get_subject_name(err_cert),buf,sizeof buf);
|
|
-
|
|
|
|
|
|
+
|
|
LOG(L_NOTICE, "tls_init: verify_callback: subject = %s\n", buf);
|
|
LOG(L_NOTICE, "tls_init: verify_callback: subject = %s\n", buf);
|
|
- LOG(L_NOTICE, "tls_init: verify_callback: verify error:num=%d:%s\n", err, X509_verify_cert_error_string(err));
|
|
|
|
- LOG(L_NOTICE, "tls_init: verify_callback: error code is %d\n", ctx->error);
|
|
|
|
-
|
|
|
|
- switch (ctx->error) {
|
|
|
|
|
|
+ LOG(L_NOTICE, "tls_init: verify_callback: verify error - num=%d:%s\n", err,
|
|
|
|
+ X509_verify_cert_error_string(err));
|
|
|
|
+ LOG(L_NOTICE, "tls_init: verify_callback: error code is %d (depth: %d)\n",
|
|
|
|
+ err, depth);
|
|
|
|
+
|
|
|
|
+ switch (err) {
|
|
|
|
+ case X509_V_OK:
|
|
|
|
+ LOG(L_NOTICE, "tls_init: verify_callback: all ok\n");
|
|
|
|
+ break;
|
|
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
|
|
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
|
|
- X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,sizeof buf);
|
|
|
|
|
|
+ X509_NAME_oneline(X509_get_issuer_name(err_cert),buf,sizeof buf);
|
|
LOG(L_NOTICE, "tls_init: verify_callback: issuer= %s\n",buf);
|
|
LOG(L_NOTICE, "tls_init: verify_callback: issuer= %s\n",buf);
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
|
|
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
|
|
case X509_V_ERR_CERT_NOT_YET_VALID:
|
|
case X509_V_ERR_CERT_NOT_YET_VALID:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: notBefore\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: notBefore\n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
|
|
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
|
|
case X509_V_ERR_CERT_HAS_EXPIRED:
|
|
case X509_V_ERR_CERT_HAS_EXPIRED:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: notAfter\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: notAfter\n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_CERT_SIGNATURE_FAILURE:
|
|
case X509_V_ERR_CERT_SIGNATURE_FAILURE:
|
|
case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
|
|
case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: unable to decrypt cert signature\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: unable to decrypt cert signature\n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
|
|
case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: unable to decode issuer public key\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: unable to decode issuer public key\n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_OUT_OF_MEM:
|
|
case X509_V_ERR_OUT_OF_MEM:
|
|
ERR("tls_init: verify_callback: Out of memory \n");
|
|
ERR("tls_init: verify_callback: Out of memory \n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
|
|
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
|
|
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
|
|
case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: Self signed certificate issue\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: Self signed certificate issue\n");
|
|
@@ -110,12 +115,14 @@ int verify_callback(int pre_verify_ok, X509_STORE_CTX *ctx) {
|
|
case X509_V_ERR_CERT_REJECTED:
|
|
case X509_V_ERR_CERT_REJECTED:
|
|
LOG(L_NOTICE, "tls_init: verify_callback: certificate rejected\n");
|
|
LOG(L_NOTICE, "tls_init: verify_callback: certificate rejected\n");
|
|
break;
|
|
break;
|
|
-
|
|
|
|
|
|
+
|
|
default:
|
|
default:
|
|
- LOG(L_NOTICE, "tls_init: verify_callback: something wrong with the cert ... error code is %d (check x509_vfy.h)\n", ctx->error);
|
|
|
|
|
|
+ LOG(L_NOTICE, "tls_init: verify_callback: something wrong with the"
|
|
|
|
+ " cert ... error code is %d (check x509_vfy.h)\n",
|
|
|
|
+ err);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
LOG(L_NOTICE, "tls_init: verify_callback: verify return:%d\n", pre_verify_ok);
|
|
LOG(L_NOTICE, "tls_init: verify_callback: verify return:%d\n", pre_verify_ok);
|
|
return(pre_verify_ok);
|
|
return(pre_verify_ok);
|
|
}
|
|
}
|