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

📄 ssltest.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 4 页
字号:
/* ssl/ssltest.c *//* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. *  * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to.  The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code.  The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). *  * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *    "This product includes cryptographic software written by *     Eric Young (eay@cryptsoft.com)" *    The word 'cryptographic' can be left out if the rouines from the library *    being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from  *    the apps directory (application code) you must include an acknowledgement: *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" *  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed.  i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] *//* ==================================================================== * Copyright (c) 1998-2000 The OpenSSL Project.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com).  This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * *//* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECC cipher suite support in OpenSSL originally developed by  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */#define _BSD_SOURCE 1		/* Or gethostname won't be declared properly				   on Linux and GNU platforms. */#include <assert.h>#include <errno.h>#include <limits.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define USE_SOCKETS#include "e_os.h"#define _XOPEN_SOURCE 500	/* Or isascii won't be declared properly on				   VMS (at least with DECompHP C).  */#include <ctype.h>#include <openssl/bio.h>#include <openssl/crypto.h>#include <openssl/evp.h>#include <openssl/x509.h>#include <openssl/x509v3.h>#include <openssl/ssl.h>#ifndef OPENSSL_NO_ENGINE#include <openssl/engine.h>#endif#include <openssl/err.h>#include <openssl/rand.h>#ifndef OPENSSL_NO_RSA#include <openssl/rsa.h>#endif#ifndef OPENSSL_NO_DSA#include <openssl/dsa.h>#endif#ifndef OPENSSL_NO_DH#include <openssl/dh.h>#endif#include <openssl/bn.h>#define _XOPEN_SOURCE_EXTENDED	1 /* Or gethostname won't be declared properly				     on Compaq platforms (at least with DEC C).				     Do not try to put it earlier, or IPv6 includes				     get screwed...				  */#ifdef OPENSSL_SYS_WINDOWS#include <winsock.h>#else#include OPENSSL_UNISTD#endif#ifdef OPENSSL_SYS_VMS#  define TEST_SERVER_CERT "SYS$DISK:[-.APPS]SERVER.PEM"#  define TEST_CLIENT_CERT "SYS$DISK:[-.APPS]CLIENT.PEM"#elif defined(OPENSSL_SYS_WINCE)#  define TEST_SERVER_CERT "\\OpenSSL\\server.pem"#  define TEST_CLIENT_CERT "\\OpenSSL\\client.pem"#elif defined(OPENSSL_SYS_NETWARE)#  define TEST_SERVER_CERT "\\openssl\\apps\\server.pem"#  define TEST_CLIENT_CERT "\\openssl\\apps\\client.pem"#else#  define TEST_SERVER_CERT "../apps/server.pem"#  define TEST_CLIENT_CERT "../apps/client.pem"#endif/* There is really no standard for this, so let's assign some tentative   numbers.  In any case, these numbers are only for this test */#define COMP_RLE	255#define COMP_ZLIB	1static int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);#ifndef OPENSSL_NO_RSAstatic RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export,int keylength);static void free_tmp_rsa(void);#endifstatic int MS_CALLBACK app_verify_callback(X509_STORE_CTX *ctx, void *arg);#define APP_CALLBACK_STRING "Test Callback Argument"struct app_verify_arg	{	char *string;	int app_verify;	int allow_proxy_certs;	char *proxy_auth;	char *proxy_cond;	};#ifndef OPENSSL_NO_DHstatic DH *get_dh512(void);static DH *get_dh1024(void);static DH *get_dh1024dsa(void);#endifstatic BIO *bio_err=NULL;static BIO *bio_stdout=NULL;static char *cipher=NULL;static int verbose=0;static int debug=0;#if 0/* Not used yet. */#ifdef FIONBIOstatic int s_nbio=0;#endif#endifstatic const char rnd_seed[] = "string to make the random number generator think it has entropy";int doit_biopair(SSL *s_ssl,SSL *c_ssl,long bytes,clock_t *s_time,clock_t *c_time);int doit(SSL *s_ssl,SSL *c_ssl,long bytes);static int do_test_cipherlist(void);static void sv_usage(void)	{	fprintf(stderr,"usage: ssltest [args ...]\n");	fprintf(stderr,"\n");	fprintf(stderr," -server_auth  - check server certificate\n");	fprintf(stderr," -client_auth  - do client authentication\n");	fprintf(stderr," -proxy        - allow proxy certificates\n");	fprintf(stderr," -proxy_auth <val> - set proxy policy rights\n");	fprintf(stderr," -proxy_cond <val> - experssion to test proxy policy rights\n");	fprintf(stderr," -v            - more output\n");	fprintf(stderr," -d            - debug output\n");	fprintf(stderr," -reuse        - use session-id reuse\n");	fprintf(stderr," -num <val>    - number of connections to perform\n");	fprintf(stderr," -bytes <val>  - number of bytes to swap between client/server\n");#ifndef OPENSSL_NO_DH	fprintf(stderr," -dhe1024      - use 1024 bit key (safe prime) for DHE\n");	fprintf(stderr," -dhe1024dsa   - use 1024 bit key (with 160-bit subprime) for DHE\n");	fprintf(stderr," -no_dhe       - disable DHE\n");#endif#ifndef OPENSSL_NO_ECDH	fprintf(stderr," -no_ecdhe     - disable ECDHE\n");#endif#ifndef OPENSSL_NO_SSL2	fprintf(stderr," -ssl2         - use SSLv2\n");#endif#ifndef OPENSSL_NO_SSL3	fprintf(stderr," -ssl3         - use SSLv3\n");#endif#ifndef OPENSSL_NO_TLS1	fprintf(stderr," -tls1         - use TLSv1\n");#endif	fprintf(stderr," -CApath arg   - PEM format directory of CA's\n");	fprintf(stderr," -CAfile arg   - PEM format file of CA's\n");	fprintf(stderr," -cert arg     - Server certificate file\n");	fprintf(stderr," -key arg      - Server key file (default: same as -cert)\n");	fprintf(stderr," -c_cert arg   - Client certificate file\n");	fprintf(stderr," -c_key arg    - Client key file (default: same as -c_cert)\n");	fprintf(stderr," -cipher arg   - The cipher list\n");	fprintf(stderr," -bio_pair     - Use BIO pairs\n");	fprintf(stderr," -f            - Test even cases that can't work\n");	fprintf(stderr," -time         - measure processor time used by client and server\n");	fprintf(stderr," -zlib         - use zlib compression\n");	fprintf(stderr," -rle          - use rle compression\n");#ifndef OPENSSL_NO_ECDH	fprintf(stderr," -named_curve arg  - Elliptic curve name to use for ephemeral ECDH keys.\n" \	               "                 Use \"openssl ecparam -list_curves\" for all names\n"  \	               "                 (default is sect163r2).\n");#endif	fprintf(stderr," -test_cipherlist - verifies the order of the ssl cipher lists\n");	}static void print_details(SSL *c_ssl, const char *prefix)	{	SSL_CIPHER *ciph;	X509 *cert;			ciph=SSL_get_current_cipher(c_ssl);	BIO_printf(bio_stdout,"%s%s, cipher %s %s",		prefix,		SSL_get_version(c_ssl),		SSL_CIPHER_get_version(ciph),		SSL_CIPHER_get_name(ciph));	cert=SSL_get_peer_certificate(c_ssl);	if (cert != NULL)		{		EVP_PKEY *pkey = X509_get_pubkey(cert);		if (pkey != NULL)			{			if (0) 				;#ifndef OPENSSL_NO_RSA			else if (pkey->type == EVP_PKEY_RSA && pkey->pkey.rsa != NULL				&& pkey->pkey.rsa->n != NULL)				{				BIO_printf(bio_stdout, ", %d bit RSA",					BN_num_bits(pkey->pkey.rsa->n));				}#endif#ifndef OPENSSL_NO_DSA			else if (pkey->type == EVP_PKEY_DSA && pkey->pkey.dsa != NULL				&& pkey->pkey.dsa->p != NULL)				{				BIO_printf(bio_stdout, ", %d bit DSA",					BN_num_bits(pkey->pkey.dsa->p));				}#endif			EVP_PKEY_free(pkey);			}		X509_free(cert);		}	/* The SSL API does not allow us to look at temporary RSA/DH keys,	 * otherwise we should print their lengths too */	BIO_printf(bio_stdout,"\n");	}static void lock_dbg_cb(int mode, int type, const char *file, int line)	{	static int modes[CRYPTO_NUM_LOCKS]; /* = {0, 0, ... } */	const char *errstr = NULL;	int rw;		rw = mode & (CRYPTO_READ|CRYPTO_WRITE);	if (!((rw == CRYPTO_READ) || (rw == CRYPTO_WRITE)))		{		errstr = "invalid mode";		goto err;		}	if (type < 0 || type >= CRYPTO_NUM_LOCKS)		{		errstr = "type out of bounds";		goto err;		}	if (mode & CRYPTO_LOCK)		{		if (modes[type])			{			errstr = "already locked";			/* must not happen in a single-threaded program			 * (would deadlock) */			goto err;			}		modes[type] = rw;		}	else if (mode & CRYPTO_UNLOCK)		{		if (!modes[type])			{			errstr = "not locked";			goto err;			}				if (modes[type] != rw)			{			errstr = (rw == CRYPTO_READ) ?				"CRYPTO_r_unlock on write lock" :				"CRYPTO_w_unlock on read lock";			}		modes[type] = 0;		}	else		{		errstr = "invalid mode";		goto err;		} err:	if (errstr)		{		/* we cannot use bio_err here */		fprintf(stderr, "openssl (lock_dbg_cb): %s (mode=%d, type=%d) at %s:%d\n",			errstr, mode, type, file, line);		}	}int main(int argc, char *argv[])	{	char *CApath=NULL,*CAfile=NULL;	int badop=0;	int bio_pair=0;	int force=0;	int tls1=0,ssl2=0,ssl3=0,ret=1;	int client_auth=0;	int server_auth=0,i;	struct app_verify_arg app_verify_arg =		{ APP_CALLBACK_STRING, 0, 0, NULL, NULL };	char *server_cert=TEST_SERVER_CERT;	char *server_key=NULL;	char *client_cert=TEST_CLIENT_CERT;	char *client_key=NULL;#ifndef OPENSSL_NO_ECDH	char *named_curve = NULL;#endif	SSL_CTX *s_ctx=NULL;	SSL_CTX *c_ctx=NULL;	SSL_METHOD *meth=NULL;	SSL *c_ssl,*s_ssl;	int number=1,reuse=0;	long bytes=256L;#ifndef OPENSSL_NO_DH	DH *dh;	int dhe1024 = 0, dhe1024dsa = 0;#endif#ifndef OPENSSL_NO_ECDH	EC_KEY *ecdh = NULL;#endif	int no_dhe = 0;	int no_ecdhe = 0;	int print_time = 0;	clock_t s_time = 0, c_time = 0;	int comp = 0;#ifndef OPENSSL_NO_COMP	COMP_METHOD *cm = NULL;#endif	STACK_OF(SSL_COMP) *ssl_comp_methods = NULL;	int test_cipherlist = 0;	verbose = 0;	debug = 0;	cipher = 0;	bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);		CRYPTO_set_locking_callback(lock_dbg_cb);	/* enable memory leak checking unless explicitly disabled */	if (!((getenv("OPENSSL_DEBUG_MEMORY") != NULL) && (0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off"))))		{		CRYPTO_malloc_debug_init();		CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);		}	else		{		/* OPENSSL_DEBUG_MEMORY=off */		CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0);		}	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);	RAND_seed(rnd_seed, sizeof rnd_seed);	bio_stdout=BIO_new_fp(stdout,BIO_NOCLOSE);	argc--;	argv++;	while (argc >= 1)		{		if	(strcmp(*argv,"-server_auth") == 0)			server_auth=1;		else if	(strcmp(*argv,"-client_auth") == 0)			client_auth=1;		else if (strcmp(*argv,"-proxy_auth") == 0)			{			if (--argc < 1) goto bad;			app_verify_arg.proxy_auth= *(++argv);			}		else if (strcmp(*argv,"-proxy_cond") == 0)			{			if (--argc < 1) goto bad;			app_verify_arg.proxy_cond= *(++argv);			}		else if	(strcmp(*argv,"-v") == 0)			verbose=1;		else if	(strcmp(*argv,"-d") == 0)			debug=1;		else if	(strcmp(*argv,"-reuse") == 0)			reuse=1;		else if	(strcmp(*argv,"-dhe1024") == 0)			{#ifndef OPENSSL_NO_DH			dhe1024=1;#else			fprintf(stderr,"ignoring -dhe1024, since I'm compiled without DH\n");#endif			}		else if	(strcmp(*argv,"-dhe1024dsa") == 0)			{#ifndef OPENSSL_NO_DH			dhe1024dsa=1;#else			fprintf(stderr,"ignoring -dhe1024, since I'm compiled without DH\n");#endif			}		else if	(strcmp(*argv,"-no_dhe") == 0)			no_dhe=1;		else if	(strcmp(*argv,"-no_ecdhe") == 0)			no_ecdhe=1;		else if	(strcmp(*argv,"-ssl2") == 0)			ssl2=1;		else if	(strcmp(*argv,"-tls1") == 0)			tls1=1;		else if	(strcmp(*argv,"-ssl3") == 0)			ssl3=1;		else if	(strncmp(*argv,"-num",4) == 0)			{			if (--argc < 1) goto bad;			number= atoi(*(++argv));			if (number == 0) number=1;			}		else if	(strcmp(*argv,"-bytes") == 0)			{			if (--argc < 1) goto bad;			bytes= atol(*(++argv));			if (bytes == 0L) bytes=1L;			i=strlen(argv[0]);			if (argv[0][i-1] == 'k') bytes*=1024L;			if (argv[0][i-1] == 'm') bytes*=1024L*1024L;			}		else if	(strcmp(*argv,"-cert") == 0)			{			if (--argc < 1) goto bad;			server_cert= *(++argv);			}		else if	(strcmp(*argv,"-s_cert") == 0)			{			if (--argc < 1) goto bad;			server_cert= *(++argv);			}		else if	(strcmp(*argv,"-key") == 0)			{			if (--argc < 1) goto bad;			server_key= *(++argv);			}		else if	(strcmp(*argv,"-s_key") == 0)			{			if (--argc < 1) goto bad;			server_key= *(++argv);			}		else if	(strcmp(*argv,"-c_cert") == 0)			{			if (--argc < 1) goto bad;			client_cert= *(++argv);			}		else if	(strcmp(*argv,"-c_key") == 0)			{			if (--argc < 1) goto bad;			client_key= *(++argv);			}		else if	(strcmp(*argv,"-cipher") == 0)			{			if (--argc < 1) goto bad;			cipher= *(++argv);			}		else if	(strcmp(*argv,"-CApath") == 0)			{			if (--argc < 1) goto bad;			CApath= *(++argv);			}		else if	(strcmp(*argv,"-CAfile") == 0)			{			if (--argc < 1) goto bad;			CAfile= *(++argv);			}		else if	(strcmp(*argv,"-bio_pair") == 0)			{			bio_pair = 1;			}		else if	(strcmp(*argv,"-f") == 0)			{			force = 1;			}		else if	(strcmp(*argv,"-time") == 0)

⌨️ 快捷键说明

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