亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩精品中文字幕一区| 国产aⅴ综合色| 麻豆成人综合网| 日韩国产欧美在线观看| 午夜精品一区二区三区电影天堂 | 亚洲一二三区不卡| 日韩高清在线一区| 国产精品一区免费在线观看| 男女视频一区二区| 国产黄色91视频| 色呦呦一区二区三区| 欧美疯狂性受xxxxx喷水图片| 欧美日韩高清影院| 久久久久亚洲综合| 一个色妞综合视频在线观看| 日本欧美大码aⅴ在线播放| 国产精品亚洲第一| 欧美一区二区三区视频| 欧美国产97人人爽人人喊| 水蜜桃久久夜色精品一区的特点| 麻豆国产精品官网| 一本色道久久综合狠狠躁的推荐| 极品美女销魂一区二区三区 | 国产精品福利在线播放| 亚洲欧美福利一区二区| 经典三级视频一区| 欧美日韩高清一区二区| 日韩伦理免费电影| 国产v综合v亚洲欧| www亚洲一区| 久久99久久久久久久久久久| 在线免费av一区| 亚洲色图在线视频| 色综合中文字幕国产| 精品久久久久一区| 激情久久五月天| 日韩手机在线导航| 免费视频一区二区| 91精品国产一区二区三区香蕉| 一区二区三区精品在线观看| 97久久精品人人做人人爽| 亚洲欧洲色图综合| 色婷婷综合激情| 亚洲第一精品在线| 91麻豆精品国产91久久久久| 三级欧美韩日大片在线看| 欧美日韩亚洲国产综合| 亚洲国产精品一区二区www| 91久久精品网| 九九热在线视频观看这里只有精品| 精品久久久久久久久久久院品网 | 久久久激情视频| 成人黄色电影在线 | 欧美成人一区二区| 成人av电影在线| 亚洲成人高清在线| 久久久精品国产免大香伊| 91在线你懂得| 久久91精品久久久久久秒播| 国产精品网曝门| 日韩免费看的电影| 99久久99精品久久久久久| 天天射综合影视| 亚洲欧美精品午睡沙发| 精品国产成人在线影院| 在线视频国内一区二区| 精品一区二区久久久| 亚洲制服丝袜在线| 中文在线一区二区| 欧美大片在线观看| 精品视频全国免费看| 不卡在线观看av| 国产一级精品在线| 麻豆91免费看| 日本午夜精品视频在线观看| 亚洲在线一区二区三区| 亚洲欧洲美洲综合色网| 久久九九久精品国产免费直播| 欧美剧情片在线观看| 欧美亚洲高清一区二区三区不卡| 国产成人aaaa| 成人av在线影院| 99久久精品免费看国产免费软件| 国产一区二区伦理片| 国产精品一二一区| 国产剧情一区二区| eeuss鲁片一区二区三区| 波多野结衣在线一区| 99热这里都是精品| 欧美中文字幕久久| 欧美一级欧美一级在线播放| 欧美人妇做爰xxxⅹ性高电影| 欧美午夜精品一区二区三区| 欧美性极品少妇| 日韩欧美激情一区| 欧美经典三级视频一区二区三区| 久久久久久久久岛国免费| 国产婷婷色一区二区三区在线| 国产欧美日韩在线| 亚洲成人综合视频| 国产精品1区2区| 欧美性做爰猛烈叫床潮| 日韩精品专区在线影院重磅| 国产精品久线在线观看| 五月婷婷激情综合网| 成人福利电影精品一区二区在线观看| 成人91在线观看| 日韩免费性生活视频播放| 亚洲人亚洲人成电影网站色| 午夜精品久久久久久久蜜桃app| 激情五月婷婷综合| 欧美在线视频全部完| 国产亚洲精久久久久久| 日韩高清不卡一区二区三区| 丁香天五香天堂综合| 日韩三级视频在线看| 亚洲欧美日韩国产一区二区三区| 久久成人久久鬼色| 欧美三级日韩三级| 一区二区三区欧美亚洲| 99精品黄色片免费大全| 国产亚洲精品超碰| 国产成人综合网站| 欧美mv和日韩mv的网站| 九九九精品视频| 日韩情涩欧美日韩视频| 日本中文字幕一区二区视频 | 国产精品久久久久一区二区三区| 国产成人综合自拍| 欧美美女bb生活片| 日本一区二区久久| 一区二区三区在线观看动漫| 日本美女一区二区| 国产精品91xxx| 欧美图区在线视频| 欧美午夜视频网站| 一区二区三区欧美激情| 91在线一区二区| 日韩精品一区二| 精品亚洲欧美一区| 国产精品久久久久久久久免费相片 | 国产成人久久精品77777最新版本| 日韩视频永久免费| 久久国产欧美日韩精品| 久久久久九九视频| 99国产精品久久久久| 亚洲精品免费在线| 日韩一区二区麻豆国产| 国产在线一区观看| 亚洲综合免费观看高清在线观看| 在线观看91视频| 国产九九视频一区二区三区| 亚洲精品视频在线| 欧美v国产在线一区二区三区| 丁香婷婷深情五月亚洲| 午夜精品久久久久久| 中文字幕免费观看一区| 制服丝袜激情欧洲亚洲| 国产sm精品调教视频网站| 亚洲国产裸拍裸体视频在线观看乱了| 欧美r级在线观看| 欧美日韩国产影片| 色哟哟欧美精品| 成人性视频免费网站| 久久成人麻豆午夜电影| 亚洲一区二区三区四区在线| 欧美国产一区在线| 亚洲精品在线网站| 日韩精品中午字幕| 欧美一区二区三区视频在线观看| 91福利国产精品| a在线欧美一区| av亚洲精华国产精华| 成人免费视频一区二区| 国产福利精品一区| 国产成人免费在线视频| 狠狠狠色丁香婷婷综合久久五月| 日韩综合小视频| 毛片av一区二区三区| 美女精品一区二区| 久久爱另类一区二区小说| 轻轻草成人在线| 精品一区免费av| 国产高清不卡一区二区| 国产98色在线|日韩| 成人高清视频在线| 欧美偷拍一区二区| 欧美一区二区三区在| 精品成人免费观看| 中文字幕欧美国产| 亚洲国产精品久久久久秋霞影院| 亚洲成人免费电影| 国内精品久久久久影院薰衣草 | 欧美日韩亚洲国产综合| 91麻豆精品国产91| 国产精品美女www爽爽爽| 亚洲日本护士毛茸茸| 美女视频黄久久| 91美女蜜桃在线| 亚洲精品一区二区三区99|