ASN1_UTCTIME_print(bio_err,X509_get_notBefore(ctx->current_cert));
ASN1_TIME_print(bio_err,X509_get_notBefore(ctx->current_cert));
int MS_CALLBACK verify_callback(ok, ctx)int ok;X509_STORE_CTX *ctx;	{	char buf[256];	X509 *err_cert;	int err,depth;	err_cert=X509_STORE_CTX_get_current_cert(ctx);	err=	X509_STORE_CTX_get_error(ctx);	depth=	X509_STORE_CTX_get_error_depth(ctx);	X509_NAME_oneline(X509_get_subject_name(err_cert),buf,256);	BIO_printf(bio_err,"depth=%d %s\n",depth,buf);	if (!ok)		{		BIO_printf(bio_err,"verify error:num=%d:%s\n",err,			X509_verify_cert_error_string(err));		if (verify_depth >= depth)			{			ok=1;			verify_error=X509_V_OK;			}		else			{			ok=0;			verify_error=X509_V_ERR_CERT_CHAIN_TOO_LONG;			}		}	switch (ctx->error)		{	case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:		X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert),buf,256);		BIO_printf(bio_err,"issuer= %s\n",buf);		break;	case X509_V_ERR_CERT_NOT_YET_VALID:	case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:		BIO_printf(bio_err,"notBefore=");		ASN1_UTCTIME_print(bio_err,X509_get_notBefore(ctx->current_cert));		BIO_printf(bio_err,"\n");		break;	case X509_V_ERR_CERT_HAS_EXPIRED:	case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:		BIO_printf(bio_err,"notAfter=");		ASN1_UTCTIME_print(bio_err,X509_get_notAfter(ctx->current_cert));		BIO_printf(bio_err,"\n");		break;		}	BIO_printf(bio_err,"verify return:%d\n",ok);	return(ok);	}