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

📄 x509.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 3 页
字号:
			clrreject= ++num;		else if (strcmp(*argv,"-alias") == 0)			aliasout= ++num;		else if (strcmp(*argv,"-CAcreateserial") == 0)			CA_createserial= ++num;		else if (strcmp(*argv,"-clrext") == 0)			clrext = 1;#if 1 /* stay backwards-compatible with 0.9.5; this should go away soon */		else if (strcmp(*argv,"-crlext") == 0)			{			BIO_printf(bio_err,"use -clrext instead of -crlext\n");			clrext = 1;			}#endif		else if (strcmp(*argv,"-ocspid") == 0)			ocspid= ++num;		else if ((md_alg=EVP_get_digestbyname(*argv + 1)))			{			/* ok */			digest=md_alg;			}		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,"%s",*pp);		goto end;		}#ifndef OPENSSL_NO_ENGINE        e = setup_engine(bio_err, engine, 0);#endif	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;		extconf = NCONF_new(NULL);		if (!NCONF_load(extconf, 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 = NCONF_get_string(extconf, "default", "extensions");			if (!extsect)				{				ERR_clear_error();				extsect = "default";				}			}		X509V3_set_ctx_test(&ctx2);		X509V3_set_nconf(&ctx2, extconf);		if (!X509V3_EXT_add_nconf(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 (sno == NULL)			{			sno = ASN1_INTEGER_new();			if (!sno || !rand_serial(NULL, sno))				goto end;			if (!X509_set_serialNumber(x, sno)) 				goto end;			ASN1_INTEGER_free(sno);			sno = NULL;			}		else if (!X509_set_serialNumber(x, sno)) 			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,NULL,e,"Certificate");	if (x == NULL) goto end;	if (CA_flag)		{		xca=load_cert(bio_err,CAfile,CAformat,NULL,e,"CA Certificate");		if (xca == NULL) goto end;		}	if (!noout || text || next_serial)		{		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 OPENSSL_SYS_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,					X509_get_serialNumber(x));				BIO_printf(STDout,"\n");				}			else if (next_serial == i)				{				BIGNUM *bnser;				ASN1_INTEGER *ser;				ser = X509_get_serialNumber(x);				bnser = ASN1_INTEGER_to_BN(ser, NULL);				if (!bnser)					goto end;				if (!BN_add_word(bnser, 1))					goto end;				ser = BN_to_ASN1_INTEGER(bnser, NULL);				if (!ser)					goto end;				BN_free(bnser);				i2a_ASN1_INTEGER(out, ser);				ASN1_INTEGER_free(ser);				BIO_puts(out, "\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 (subject_hash == i)				{				BIO_printf(STDout,"%08lx\n",X509_subject_name_hash(x));				}			else if (issuer_hash == i)				{				BIO_printf(STDout,"%08lx\n",X509_issuer_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 OPENSSL_NO_RSA				if (pkey->type == EVP_PKEY_RSA)					BN_print(STDout,pkey->pkey.rsa->n);				else#endif#ifndef OPENSSL_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,sizeof buf);				BIO_printf(STDout,"/* subject:%s */\n",buf);				m=X509_NAME_oneline(					X509_get_issuer_name(x),buf,					sizeof buf);				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);

⌨️ 快捷键说明

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