⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x509.c

📁 数字证书处理程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			}		else			{			BIO_printf(bio_err,"unknown option %s\n",*argv);			badops=1;			break;			}		argc--;		argv++;		}	if (badops)		{bad:		for (pp=x509_usage; (*pp != NULL); pp++)			BIO_printf(bio_err,*pp);		goto end;		}	if (need_rand)		app_RAND_load_file(NULL, bio_err, 0);	ERR_load_crypto_strings();	if (!app_passwd(bio_err, passargin, NULL, &passin, NULL))		{		BIO_printf(bio_err, "Error getting password\n");		goto end;		}	if (!X509_STORE_set_default_paths(ctx))		{		ERR_print_errors(bio_err);		goto end;		}	if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM))		{ CAkeyfile=CAfile; }	else if ((CA_flag) && (CAkeyfile == NULL))		{		BIO_printf(bio_err,"need to specify a CAkey if using the CA command\n");		goto end;		}	if (extfile)		{		long errorline = -1;		X509V3_CTX ctx2;		if (!(extconf=CONF_load(NULL,extfile,&errorline)))			{			if (errorline <= 0)				BIO_printf(bio_err,					"error loading the config file '%s'\n",								extfile);                	else                        	BIO_printf(bio_err,				       "error on line %ld of config file '%s'\n"							,errorline,extfile);			goto end;			}		if (!extsect && !(extsect = CONF_get_string(extconf, "default",					 "extensions"))) extsect = "default";		X509V3_set_ctx_test(&ctx2);		X509V3_set_conf_lhash(&ctx2, extconf);		if (!X509V3_EXT_add_conf(extconf, &ctx2, extsect, NULL))			{			BIO_printf(bio_err,				"Error Loading extension section %s\n",								 extsect);			ERR_print_errors(bio_err);			goto end;			}		}	if (reqfile)		{		EVP_PKEY *pkey;		X509_CINF *ci;		BIO *in;		if (!sign_flag && !CA_flag)			{			BIO_printf(bio_err,"We need a private key to sign with\n");			goto end;			}		in=BIO_new(BIO_s_file());		if (in == NULL)			{			ERR_print_errors(bio_err);			goto end;			}		if (infile == NULL)			BIO_set_fp(in,stdin,BIO_NOCLOSE|BIO_FP_TEXT);		else			{			if (BIO_read_filename(in,infile) <= 0)				{				perror(infile);				BIO_free(in);				goto end;				}			}		req=PEM_read_bio_X509_REQ(in,NULL,NULL,NULL);		BIO_free(in);		if (req == NULL)			{			ERR_print_errors(bio_err);			goto end;			}		if (	(req->req_info == NULL) ||			(req->req_info->pubkey == NULL) ||			(req->req_info->pubkey->public_key == NULL) ||			(req->req_info->pubkey->public_key->data == NULL))			{			BIO_printf(bio_err,"The certificate request appears to corrupted\n");			BIO_printf(bio_err,"It does not contain a public key\n");			goto end;			}		if ((pkey=X509_REQ_get_pubkey(req)) == NULL)	                {	                BIO_printf(bio_err,"error unpacking public key\n");	                goto end;	                }		i=X509_REQ_verify(req,pkey);		EVP_PKEY_free(pkey);		if (i < 0)			{			BIO_printf(bio_err,"Signature verification error\n");			ERR_print_errors(bio_err);			goto end;			}	        if (i == 0)			{			BIO_printf(bio_err,"Signature did not match the certificate request\n");			goto end;			}		else			BIO_printf(bio_err,"Signature ok\n");		print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), nmflag);		if ((x=X509_new()) == NULL) goto end;		ci=x->cert_info;		if (!ASN1_INTEGER_set(X509_get_serialNumber(x),0)) goto end;		if (!X509_set_issuer_name(x,req->req_info->subject)) goto end;		if (!X509_set_subject_name(x,req->req_info->subject)) goto end;		X509_gmtime_adj(X509_get_notBefore(x),0);	        X509_gmtime_adj(X509_get_notAfter(x),(long)60*60*24*days);		pkey = X509_REQ_get_pubkey(req);		X509_set_pubkey(x,pkey);		EVP_PKEY_free(pkey);		}	else		x=load_cert(bio_err,infile,informat);	if (x == NULL) goto end;	if (CA_flag)		{		xca=load_cert(bio_err,CAfile,CAformat);		if (xca == NULL) goto end;		}	if (!noout || text)		{		OBJ_create("2.99999.3",			"SET.ex3","SET x509v3 extension 3");		out=BIO_new(BIO_s_file());		if (out == NULL)			{			ERR_print_errors(bio_err);			goto end;			}		if (outfile == NULL)			{			BIO_set_fp(out,stdout,BIO_NOCLOSE);#ifdef VMS			{			BIO *tmpbio = BIO_new(BIO_f_linebuffer());			out = BIO_push(tmpbio, out);			}#endif			}		else			{			if (BIO_write_filename(out,outfile) <= 0)				{				perror(outfile);				goto end;				}			}		}	if (alias) X509_alias_set1(x, (unsigned char *)alias, -1);	if (clrtrust) X509_trust_clear(x);	if (clrreject) X509_reject_clear(x);	if (trust)		{		for (i = 0; i < sk_ASN1_OBJECT_num(trust); i++)			{			objtmp = sk_ASN1_OBJECT_value(trust, i);			X509_add1_trust_object(x, objtmp);			}		}	if (reject)		{		for (i = 0; i < sk_ASN1_OBJECT_num(reject); i++)			{			objtmp = sk_ASN1_OBJECT_value(reject, i);			X509_add1_reject_object(x, objtmp);			}		}	if (num)		{		for (i=1; i<=num; i++)			{			if (issuer == i)				{				print_name(STDout, "issuer= ",					X509_get_issuer_name(x), nmflag);				}			else if (subject == i) 				{				print_name(STDout, "subject= ",					X509_get_subject_name(x), nmflag);				}			else if (serial == i)				{				BIO_printf(STDout,"serial=");				i2a_ASN1_INTEGER(STDout,x->cert_info->serialNumber);				BIO_printf(STDout,"\n");				}			else if (email == i) 				{				int j;				STACK *emlst;				emlst = X509_get1_email(x);				for (j = 0; j < sk_num(emlst); j++)					BIO_printf(STDout, "%s\n", sk_value(emlst, j));				X509_email_free(emlst);				}			else if (aliasout == i)				{				unsigned char *alstr;				alstr = X509_alias_get0(x, NULL);				if (alstr) BIO_printf(STDout,"%s\n", alstr);				else BIO_puts(STDout,"<No Alias>\n");				}			else if (hash == i)				{				BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));				}			else if (pprint == i)				{				X509_PURPOSE *ptmp;				int j;				BIO_printf(STDout, "Certificate purposes:\n");				for (j = 0; j < X509_PURPOSE_get_count(); j++)					{					ptmp = X509_PURPOSE_get0(j);					purpose_print(STDout, x, ptmp);					}				}			else				if (modulus == i)				{				EVP_PKEY *pkey;				pkey=X509_get_pubkey(x);				if (pkey == NULL)					{					BIO_printf(bio_err,"Modulus=unavailable\n");					ERR_print_errors(bio_err);					goto end;					}				BIO_printf(STDout,"Modulus=");#ifndef NO_RSA				if (pkey->type == EVP_PKEY_RSA)					BN_print(STDout,pkey->pkey.rsa->n);				else#endif#ifndef NO_DSA				if (pkey->type == EVP_PKEY_DSA)					BN_print(STDout,pkey->pkey.dsa->pub_key);				else#endif					BIO_printf(STDout,"Wrong Algorithm type");				BIO_printf(STDout,"\n");				EVP_PKEY_free(pkey);				}			else				if (pubkey == i)				{				EVP_PKEY *pkey;				pkey=X509_get_pubkey(x);				if (pkey == NULL)					{					BIO_printf(bio_err,"Error getting public key\n");					ERR_print_errors(bio_err);					goto end;					}				PEM_write_bio_PUBKEY(STDout, pkey);				EVP_PKEY_free(pkey);				}			else				if (C == i)				{				unsigned char *d;				char *m;				int y,z;				X509_NAME_oneline(X509_get_subject_name(x),					buf,256);				BIO_printf(STDout,"/* subject:%s */\n",buf);				m=X509_NAME_oneline(					X509_get_issuer_name(x),buf,256);				BIO_printf(STDout,"/* issuer :%s */\n",buf);				z=i2d_X509(x,NULL);				m=OPENSSL_malloc(z);				d=(unsigned char *)m;				z=i2d_X509_NAME(X509_get_subject_name(x),&d);				BIO_printf(STDout,"unsigned char XXX_subject_name[%d]={\n",z);				d=(unsigned char *)m;				for (y=0; y<z; y++)					{					BIO_printf(STDout,"0x%02X,",d[y]);					if ((y & 0x0f) == 0x0f) BIO_printf(STDout,"\n");					}				if (y%16 != 0) BIO_printf(STDout,"\n");				BIO_printf(STDout,"};\n");				z=i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x),&d);				BIO_printf(STDout,"unsigned char XXX_public_key[%d]={\n",z);				d=(unsigned char *)m;				for (y=0; y<z; y++)					{					BIO_printf(STDout,"0x%02X,",d[y]);					if ((y & 0x0f) == 0x0f)						BIO_printf(STDout,"\n");					}				if (y%16 != 0) BIO_printf(STDout,"\n");				BIO_printf(STDout,"};\n");				z=i2d_X509(x,&d);				BIO_printf(STDout,"unsigned char XXX_certificate[%d]={\n",z);				d=(unsigned char *)m;				for (y=0; y<z; y++)					{					BIO_printf(STDout,"0x%02X,",d[y]);					if ((y & 0x0f) == 0x0f)						BIO_printf(STDout,"\n");					}				if (y%16 != 0) BIO_printf(STDout,"\n");				BIO_printf(STDout,"};\n");				OPENSSL_free(m);				}			else if (text == i)				{				X509_print(out,x);				}			else if (startdate == i)				{				BIO_puts(STDout,"notBefore=");				ASN1_TIME_print(STDout,X509_get_notBefore(x));				BIO_puts(STDout,"\n");				}			else if (enddate == i)				{				BIO_puts(STDout,"notAfter=");				ASN1_TIME_print(STDout,X509_get_notAfter(x));				BIO_puts(STDout,"\n");				}			else if (fingerprint == i)				{				int j;				unsigned int n;				unsigned char md[EVP_MAX_MD_SIZE];				if (!X509_digest(x,digest,md,&n))					{					BIO_printf(bio_err,"out of memory\n");					goto end;					}				BIO_printf(STDout,"%s Fingerprint=",						OBJ_nid2sn(EVP_MD_type(digest)));				for (j=0; j<(int)n; j++)					{					BIO_printf(STDout,"%02X%c",md[j],

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -