亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ssl.c

?? OpenVPN is a robust and highly flexible tunneling application that uses all of the encryption, authe
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* *  OpenVPN -- An application to securely tunnel IP networks *             over a single TCP/UDP port, with support for SSL/TLS-based *             session authentication and key exchange, *             packet encryption, packet authentication, and *             packet compression. * *  Copyright (C) 2002-2004 James Yonan <jim@yonan.net> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program (see the file COPYING included with this *  distribution); if not, write to the Free Software Foundation, Inc., *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* * The routines in this file deal with dynamically negotiating * the data channel HMAC and cipher keys through a TLS session. * * Both the TLS session and the data channel are multiplexed * over the same TCP/UDP port. */#ifdef WIN32#include "config-win32.h"#else#include "config.h"#endif#if defined(USE_CRYPTO) && defined(USE_SSL)#include "syshead.h"#include "ssl.h"#include "error.h"#include "common.h"#include "integer.h"#include "socket.h"#include "thread.h"#include "misc.h"#include "fdmisc.h"#include "interval.h"#include "options.h"#include "memdbg.h"#ifdef MEASURE_TLS_HANDSHAKE_STATSstatic int tls_handshake_success; /* GLOBAL */static int tls_handshake_error;   /* GLOBAL */static int tls_packets_generated; /* GLOBAL */static int tls_packets_sent;      /* GLOBAL */#define INCR_SENT       ++tls_packets_sent#define INCR_GENERATED  ++tls_packets_generated#define INCR_SUCCESS    ++tls_handshake_success#define INCR_ERROR      ++tls_handshake_errorvoidshow_tls_performance_stats(void){  msg (D_TLS_DEBUG_LOW, "TLS Handshakes, success=%f%% (good=%d, bad=%d), retransmits=%f%%",       (double) tls_handshake_success / (tls_handshake_success + tls_handshake_error) * 100.0,       tls_handshake_success, tls_handshake_error,       (double) (tls_packets_sent - tls_packets_generated) / tls_packets_generated * 100.0);}#else#define INCR_SENT#define INCR_GENERATED#define INCR_SUCCESS#define INCR_ERROR#endif#ifdef BIO_DEBUGstatic FILE *biofp;                            /* GLOBAL */static bool biofp_toggle;                      /* GLOBAL */static time_t biofp_last_open;                 /* GLOBAL */static const int biofp_reopen_interval = 600;  /* GLOBAL */static voidclose_biofp(){  if (biofp)    {      ASSERT (!fclose (biofp));      biofp = NULL;    }}static voidopen_biofp(){  const time_t current = time (NULL);  const pid_t pid = getpid ();  if (biofp_last_open + biofp_reopen_interval < current)    close_biofp();  if (!biofp)    {      char fn[256];      openvpn_snprintf(fn, sizeof(fn), "bio/%d-%d.log", pid, biofp_toggle);      biofp = fopen (fn, "w");      ASSERT (biofp);      biofp_last_open = time (NULL);      biofp_toggle ^= 1;    }}static voidbio_debug_data (const char *mode, BIO *bio, uint8_t *buf, int len, const char *desc){  if (len > 0)    {      open_biofp();      fprintf(biofp, "BIO_%s %s time=" time_format " bio=" ptr_format " len=%d data=%s\n",	      mode, desc, time (NULL), bio, len, format_hex (buf, len, 0));      fflush (biofp);    }}static voidbio_debug_oc (const char *mode, BIO *bio){  open_biofp();  fprintf(biofp, "BIO %s time=" time_format " bio=" ptr_format "\n",	  mode, time (NULL), bio);  fflush (biofp);}#endif/* * Max number of bytes we will add * for data structures common to both * data and control channel packets. * (opcode only).  */voidtls_adjust_frame_parameters(struct frame *frame){  frame_add_to_extra_frame (frame, 1); /* space for opcode */}/* * Max number of bytes we will add * to control channel packet.  */static voidtls_init_control_channel_frame_parameters(const struct frame *data_channel_frame,					  struct frame *frame){  /*   * frame->extra_frame is already initialized with tls_auth buffer requirements,   * if --tls-auth is enabled.   */  /* inherit link MTU and extra_link from data channel */  frame->link_mtu = data_channel_frame->link_mtu;  frame->extra_link = data_channel_frame->extra_link;  /* set extra_frame */  tls_adjust_frame_parameters (frame);  reliable_ack_adjust_frame_parameters (frame, CONTROL_SEND_ACK_MAX);  frame_add_to_extra_frame (frame, SID_SIZE + sizeof (packet_id_type));  /* set dynamic link MTU to minimum value */  frame_set_mtu_dynamic (frame, 0, SET_MTU_TUN);}/* * Allocate space in SSL objects * in which to store a struct tls_session * pointer back to parent. */static int mydata_index; /* GLOBAL */static voidssl_set_mydata_index (){  mydata_index = SSL_get_ex_new_index (0, "struct session *", NULL, NULL, NULL);  ASSERT (mydata_index >= 0);}voidinit_ssl_lib (){  SSL_library_init ();  SSL_load_error_strings ();  OpenSSL_add_all_algorithms ();  init_crypto_lib();  /*   * If you build the OpenSSL library and OpenVPN with   * CRYPTO_MDEBUG, you will get a listing of OpenSSL   * memory leaks on program termination.   */#ifdef CRYPTO_MDEBUG  CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);#endif  ssl_set_mydata_index ();}voidfree_ssl_lib (){#ifdef CRYPTO_MDEBUG  FILE* fp = fopen ("sdlog", "w");  ASSERT (fp);  CRYPTO_mem_leaks_fp (fp);  fclose (fp);#endif  uninit_crypto_lib ();  EVP_cleanup ();  ERR_free_strings ();}/* * OpenSSL library calls back here if the private key * is protected by a password. */intpem_password_callback (char *buf, int size, int rwflag, void *u){#ifdef HAVE_GETPASS  static char passbuf[256];  if (!strlen (passbuf))    {      char *gp = getpass ("Enter PEM pass phrase:");      if (!gp)	msg (M_FATAL, "TLS Error: Error reading PEM pass phrase for private key");      strncpynt (passbuf, gp, sizeof (passbuf));      memset (gp, 0, strlen (gp));    }  if (buf)    {      if (!strlen (passbuf))	msg (M_FATAL, "TLS Error: Need PEM pass phrase for private key");      strncpynt (buf, passbuf, size);      CLEAR (passbuf);      return strlen (buf);    }#else  msg (M_FATAL, "Sorry but I can't read a password from the console because this operating system or C library doesn't support the getpass() function");#endif  return 0;}/* * OpenSSL callback to get a temporary RSA key, mostly * used for export ciphers. */static RSA *tmp_rsa_cb (SSL * s, int is_export, int keylength){  static RSA *rsa_tmp = NULL;  if (rsa_tmp == NULL)    {      msg (D_HANDSHAKE, "Generating temp (%d bit) RSA key", keylength);      rsa_tmp = RSA_generate_key (keylength, RSA_F4, NULL, NULL);    }  return (rsa_tmp);}/* * Extract common name from an X509 subject name. */static voidextract_common_name (char *out, int size, const char *subject){  /*   * Example subject:   *   * /C=US/ST=CO/L=Denver/O=NTLP/CN=Test-CA/Email=jim@yonan.net   *   * The common name is 'Test-CA'   */  char c;  int state = 0;  ASSERT (size > 0);  out[--size] = '\0';  do {    c = *subject++;    if (state == 4)      {	if (c == '/')	  c = '\0';	if (size > 0)	  {	    *out++ = c;	    --size;	  }	else	  break;      }    else if (c == '/')      state = 1;    else if (state == 1)      {	if (c == 'C')	  state = 2;	else	  state = 0;      }    else if (state == 2)      {	if (c == 'N')	  state = 3;	else	  state = 0;      }    else if (state == 3)      {	if (c == '=')	  state = 4;	else	  state = 0;      }  } while (c != '\0');}static voidsetenv_untrusted (struct tls_session *session){  setenv_sockaddr ("untrusted", &session->untrusted_sockaddr);}/* * Our verify callback function -- check * that an incoming peer certificate is good. */static intverify_callback (int preverify_ok, X509_STORE_CTX * ctx){  char subject[256];  char envname[64];  SSL *ssl;  struct tls_session *session;  const struct tls_options *opt;  const int max_depth = 8;  /* acquire script mutex */  mutex_lock_static (L_SCRIPT);  /*   * Retrieve the pointer to the SSL of the connection currently treated   * and the application specific data stored into the SSL object.   */  ssl = X509_STORE_CTX_get_ex_data (ctx, SSL_get_ex_data_X509_STORE_CTX_idx());  ASSERT (ssl);  session = (struct tls_session *) SSL_get_ex_data (ssl, mydata_index);  ASSERT (session);  opt = session->opt;  ASSERT (opt);  X509_NAME_oneline (X509_get_subject_name (ctx->current_cert), subject,		     sizeof (subject));  subject[sizeof (subject) - 1] = '\0';  safe_string (subject);#if 0 /* print some debugging info */  msg (D_LOW, "LOCAL OPT: %s", opt->local_options);  msg (D_LOW, "X509: %s", subject);#endif  if (!preverify_ok)    {      /* Remote site specified a certificate, but it's not correct */      msg (D_TLS_ERRORS, "VERIFY ERROR: depth=%d, error=%s: %s",	   ctx->error_depth, X509_verify_cert_error_string (ctx->error), subject);      goto err;			/* Reject connection */    }  if (ctx->error_depth >= max_depth)    msg (M_WARN, "TLS Warning: Convoluted certificate chain detected with depth [%d] greater than %d", ctx->error_depth, max_depth);  /* export subject name string as environmental variable */  session->verify_maxlevel = max_int (session->verify_maxlevel, ctx->error_depth);  openvpn_snprintf (envname, sizeof(envname), "tls_id_%d", ctx->error_depth);  setenv_str (envname, subject);  /* export serial number as environmental variable */  {    const int serial = (int) ASN1_INTEGER_get (X509_get_serialNumber (ctx->current_cert));    openvpn_snprintf (envname, sizeof(envname), "tls_serial_%d", ctx->error_depth);    setenv_int (envname, serial);  }  /* export current untrusted IP */  setenv_untrusted (session);    if (opt->verify_x509name && ctx->error_depth == 0)    {      if (strcmp (opt->verify_x509name, subject) == 0)	msg (D_HANDSHAKE, "VERIFY X509NAME OK: %s", subject);      else	{	  msg (D_HANDSHAKE, "VERIFY X509NAME ERROR: %s, must be %s",	       subject, opt->verify_x509name);	  goto err;		/* Reject connection */	}    }  if (opt->verify_command)    {      char command[512];      struct buffer out;      int ret;      setenv_str ("script_type", "tls-verify");      buf_set_write (&out, (uint8_t*)command, sizeof (command));      buf_printf (&out, "%s %d %s",		  opt->verify_command,		  ctx->error_depth,		  subject);      msg (D_TLS_DEBUG, "TLS: executing verify command: %s", command);      ret = openvpn_system (command);      if (system_ok (ret))	{	  msg (D_HANDSHAKE, "VERIFY SCRIPT OK: depth=%d, %s",	       ctx->error_depth, subject);	}      else	{	  if (!system_executed (ret))	    msg (M_ERR, "Verify command failed to execute: %s", command);	  msg (D_HANDSHAKE, "VERIFY SCRIPT ERROR: depth=%d, %s",	       ctx->error_depth, subject);	  goto err;		/* Reject connection */	}    }    if (opt->crl_file)    {      X509_CRL *crl=NULL;      X509_REVOKED *revoked;      BIO *in=NULL;      int n,i,retval = 0;      in=BIO_new(BIO_s_file());      if (in == NULL) {	msg (M_ERR, "CRL: BIO err");	goto end;      }      if (BIO_read_filename(in, opt->crl_file) <= 0) {	msg (M_ERR, "CRL: cannot read: %s", opt->crl_file);	goto end;      }      crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);      if (crl == NULL) {	msg (M_ERR, "CRL: cannot read CRL from file %s", opt->crl_file);	goto end;      }      n = sk_num(X509_CRL_get_REVOKED(crl));      for (i = 0; i < n; i++) {	revoked = (X509_REVOKED *)sk_value(X509_CRL_get_REVOKED(crl), i);	if (ASN1_INTEGER_cmp(revoked->serialNumber, X509_get_serialNumber(ctx->current_cert)) == 0) {	  msg (D_HANDSHAKE, "CRL CHECK FAILED: %s is REVOKED",subject);	  goto end;	}      }      retval = 1;      msg (D_HANDSHAKE, "CRL CHECK OK: %s",subject);    end:      BIO_free(in);      if (!retval)	goto err;    }  msg (D_HANDSHAKE, "VERIFY OK: depth=%d, %s", ctx->error_depth, subject);  /* save common name in session object */  if (ctx->error_depth == 0)    {      char common_name[TLS_CN_LEN];      extract_common_name (common_name, TLS_CN_LEN, subject);      if (session->common_name)	free (session->common_name);      session->common_name = string_alloc (common_name, NULL);    }    mutex_unlock_static (L_SCRIPT);  return 1;			/* Accept connection */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97久久超碰国产精品| 99国产精品99久久久久久| 日韩一区在线看| 国产色一区二区| 欧美xfplay| 精品少妇一区二区三区免费观看| 欧美一区二区在线看| 91精品国产高清一区二区三区| 欧美午夜片在线看| 欧美色手机在线观看| 欧美日韩国产另类一区| 欧美群妇大交群中文字幕| 欧美视频一区二区在线观看| 欧美人与性动xxxx| 日韩免费在线观看| 久久色.com| 看国产成人h片视频| 91在线国产福利| av一本久道久久综合久久鬼色| 成人av免费在线播放| www.亚洲色图| 欧美在线看片a免费观看| 欧美影院精品一区| 7777精品伊人久久久大香线蕉完整版| 欧美高清精品3d| 亚洲精品一区二区三区在线观看| 26uuuu精品一区二区| 亚洲欧洲一区二区三区| 亚洲福利视频导航| 午夜精品久久久久久久蜜桃app| 亚洲丝袜精品丝袜在线| 天堂av在线一区| 国产精品18久久久| 色成年激情久久综合| 欧美日韩和欧美的一区二区| 4438成人网| 国产精品毛片a∨一区二区三区| 一区二区三区在线免费视频| 乱一区二区av| 色狠狠色狠狠综合| 精品日韩99亚洲| 亚洲综合一区二区三区| 极品美女销魂一区二区三区| 色综合久久久久久久久| 日韩一区二区三区四区| 亚洲日本在线天堂| 激情久久五月天| 欧美又粗又大又爽| 欧美国产激情一区二区三区蜜月| 亚洲国产欧美在线| 成人动漫av在线| 欧美一卡二卡在线| 日韩理论片一区二区| 久久综合综合久久综合| 欧美曰成人黄网| 亚洲日本va午夜在线影院| 久久99热这里只有精品| 精品视频在线免费看| 国产精品电影一区二区三区| 精品中文字幕一区二区| 欧美久久一二区| 亚洲综合视频在线| 色哟哟精品一区| 亚洲国产成人私人影院tom| 精品无码三级在线观看视频| 一区二区三区欧美亚洲| 一区二区三区中文字幕精品精品 | 久久新电视剧免费观看| 亚洲精品日韩专区silk | 国产丝袜在线精品| 日本美女一区二区| 欧美日韩国产另类不卡| 日韩av一区二区三区四区| 久久亚洲精精品中文字幕早川悠里| 国产精品素人视频| 国产原创一区二区| 日韩欧美国产高清| 青青草精品视频| 555www色欧美视频| 日韩电影在线免费| 日韩一区二区三区四区五区六区| 日本欧美一区二区三区乱码| 欧美日本一道本在线视频| 婷婷开心激情综合| 日韩欧美一区电影| 国产综合色在线| 欧美国产日本韩| 色噜噜夜夜夜综合网| 亚洲一区二区欧美| 91精品国产综合久久精品麻豆| 美日韩一级片在线观看| 久久综合给合久久狠狠狠97色69| 国产精品一区在线| 亚洲欧洲日产国产综合网| 91极品美女在线| 轻轻草成人在线| 国产欧美精品国产国产专区| 成人午夜av电影| 一区二区三区 在线观看视频| 欧美精品久久一区| 久久97超碰国产精品超碰| 欧美精彩视频一区二区三区| 色噜噜狠狠色综合中国| 捆绑紧缚一区二区三区视频| 国产精品区一区二区三| 欧美三级资源在线| 韩国欧美国产一区| 悠悠色在线精品| 日韩午夜在线观看| av一二三不卡影片| 免费成人深夜小野草| 成人在线视频一区二区| 亚洲黄色尤物视频| 久久综合色之久久综合| 97久久精品人人做人人爽| 午夜欧美视频在线观看| 久久久精品影视| 欧美三级日本三级少妇99| 激情综合色播激情啊| 亚洲欧美视频在线观看视频| 欧美美女直播网站| 成人综合在线观看| 免费欧美在线视频| 亚洲色图欧洲色图婷婷| 欧美成人一区二区三区片免费 | 成人av片在线观看| 日韩av在线播放中文字幕| 18成人在线视频| 久久久综合视频| 日韩一级欧美一级| 欧美性生交片4| 99久久777色| 国产a区久久久| 免费的国产精品| 亚洲6080在线| 亚洲影院理伦片| 亚洲视频免费观看| 国产日韩av一区| 久久这里只有精品6| 欧美日韩国产成人在线免费| 亚洲综合在线免费观看| 亚洲成精国产精品女| 日本一区二区三区电影| 91精品国产综合久久久蜜臀图片| 91啦中文在线观看| 白白色 亚洲乱淫| 成人在线视频一区二区| 韩国女主播成人在线| 国内精品伊人久久久久av一坑| 免费成人在线播放| 久久国产视频网| 久久er99精品| 首页国产丝袜综合| 天天爽夜夜爽夜夜爽精品视频| 亚洲最大成人网4388xx| 亚洲视频小说图片| 亚洲欧美色综合| 亚洲乱码国产乱码精品精小说 | 国产精品毛片久久久久久久| 26uuu国产电影一区二区| 久久影院视频免费| 国产午夜精品在线观看| 欧美高清在线视频| 中文久久乱码一区二区| 国产精品久久久久aaaa| 亚洲男人电影天堂| 午夜国产不卡在线观看视频| 视频一区视频二区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 久久电影国产免费久久电影| 国产精品一区二区三区乱码 | 欧美人与z0zoxxxx视频| 日韩一区二区影院| 久久久久久久av麻豆果冻| 国产精品理论在线观看| 亚洲欧美一区二区三区极速播放| 一区二区在线观看视频在线观看| 亚洲国产精品久久久久婷婷884 | 国产精品乱码妇女bbbb| 伊人一区二区三区| 麻豆精品蜜桃视频网站| 国产精品资源在线观看| 91麻豆精品视频| 欧美一区二区视频网站| 国产三级一区二区| 亚洲精品久久嫩草网站秘色| 欧美激情一区二区三区不卡| 国产91丝袜在线观看| va亚洲va日韩不卡在线观看| 欧美午夜免费电影| 久久综合九色综合欧美就去吻| 国产精品久久久久四虎| 亚洲午夜日本在线观看| 国产成人亚洲精品青草天美| 91麻豆免费观看| 欧美激情综合在线| 日韩国产在线观看| 91亚洲国产成人精品一区二三| 日韩一区二区三区免费观看| 亚洲色图丝袜美腿|