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

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

?? sys_ssl.c

?? ssl vpn系統.web服務器不支持ssl的情況下,browser可以使用ssl建立連接.
?? C
字號:
#include <sys/un.h>
#include <setjmp.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include <sys/stat.h>

#include <sys/sysinfo.h>
//add for ssl
#include <openssl/rsa.h>       /* SSLeay stuff */
#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "sys_status.h"

#include <zebra.h>
#include "sys_ssl.h"
#include "list.h"
#define dprintf printf
extern int verify_client;
static SSL_CTX* ctx=NULL;
extern int ssl_listen_fd;

struct list_head  sslsocks;
extern fd_set ssl_read_set;
SSL * create_ssl_con(int sd);
int ssl_serv_accept ();
void ssl_init()
{

 	SSL_METHOD *meth;
 	SSL_load_error_strings();
	SSLeay_add_ssl_algorithms();
//	meth = TLSv1_server_method();
 	meth = SSLv23_server_method();
	ctx = SSL_CTX_new (meth);
	if (!ctx) 
	{
		dprintf("init ctx error\n");
		exit(2);
	}
	dprintf("init ctx ok\n");
  
  	if (SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM) <= 0) 
	{
   	  	dprintf("init certificate file  error\n");
   	 	exit(3);
 	 }
   	dprintf("init certificate file  ok\n");
  	if (SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM) <= 0)
	{
 	   dprintf("init private key file  error\n");
 	   exit(4);
	}
  	dprintf("init private key file  ok\n");
  	if (!SSL_CTX_check_private_key(ctx))
	{
  	dprintf("Private key does not match the certificate public key\n");
   	exit(5);
	}
 	dprintf("Private key  match the certificate public keyok \n");
     
 

 	if(NULL==SSL_load_client_CA_file(CAFP))
 	 { 
 		 dprintf(" load ca error\n");
 		 exit(1);
 	 }
	
 	dprintf("verify client =  %d       \n" ,verify_client);
	if(!verify_client) return;
	 SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT|
				SSL_VERIFY_CLIENT_ONCE,NULL);
	 SSL_CTX_set_client_CA_list(ctx,SSL_load_client_CA_file(CAFP));
 	
	//else
 		//SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL);


	if ((!SSL_CTX_load_verify_locations(ctx,CAFP,HOME)) ||
		(!SSL_CTX_set_default_verify_paths(ctx)))
	{
	   dprintf(" set default verify paths failed \n");
	   exit(1);
	}



}

inline struct ssl_client * sclient_alloc()
{
	 struct ssl_client * c= malloc(sizeof(struct ssl_client));
	 memset(c,0,sizeof(struct ssl_client));
	 return c;
}

intssl_serv_accept ()
{  int val;  SSL*ssl=NULL;
  int fd=-1;
  struct ssl_client * sclient;
  struct sockaddr_in client;
  socklen_t len;
  int accept_sock=ssl_listen_fd;

  len = sizeof (struct sockaddr_in);
  {

  	fd= accept (accept_sock, (struct sockaddr *) &client, &len);
  	if(fd==-1)
  	{
  	dprintf("\naccept error\n");
  	return -1;
  	}
   	dprintf("\naccept ok\n");
  	ssl=create_ssl_con(fd);
      if(ssl==NULL) {dprintf("\n ----------listen sock  ssl accept error \n");close(fd);}
  	else
  	{
  	sclient =sclient_alloc();//notice
  	if(sclient ==NULL) 
	{
		close(fd);
		
		exit(0);
	}
	else	{		val = fcntl (fd, F_GETFL, 0);   		fcntl ( fd, F_SETFL, (val | O_NONBLOCK)); 		sclient->fd=fd;  		sclient->ssl=ssl;
		add_fd_set(sclient->fd);
  		list_add (&(sclient->list),&sslsocks);
		
		dprintf("\n ----------ssl_listen_fd %d ssl accept fd %d ok \n",ssl_listen_fd,sclient->fd);
	}  }  }
  	//status_serv_event (SSL_SERV, ssl_listen_fd, NULL);
  	return 0;}
SSL * create_ssl_con(int sd)
{
  int verify_error;
  char * str=NULL;
  int err;
  X509*    client_cert;
 
  SSL *ssl = SSL_new (ctx);                          
  SSL_set_fd (ssl, sd);
  err = SSL_accept (ssl); 
  if(err<0) { 
  dprintf(" ssl con failed to create.%s\n",X509_verify_cert_error_string(err)); 
  return NULL;
  }

  verify_error=SSL_get_verify_result(ssl);
  if (verify_error != X509_V_OK)
 {
	dprintf("Client certificate verified failed :%s\n",
				X509_verify_cert_error_string(verify_error));
	SSL_free (ssl);
	return NULL;
 }
  
  /* Get the cipher - opt */

  dprintf ("SSL connection using %s\n", SSL_get_cipher (ssl));
  
  /* Get client's certificate (note: beware of dynamic allocation) - opt */

  client_cert = SSL_get_peer_certificate (ssl);
  if (client_cert != NULL) {
    dprintf ("Client certificate:\n");
    
    str = X509_NAME_oneline (X509_get_subject_name (client_cert), 0, 0);
   if(str!=NULL)
    dprintf ("\t subject: %s\n", str);
    OPENSSL_free (str);
    
    str = X509_NAME_oneline (X509_get_issuer_name  (client_cert), 0, 0);
   if(str!=NULL)
    dprintf ("\t issuer: %s\n", str);
    OPENSSL_free (str);
    
    /* We could do all sorts of certificate verification stuff here before
       deallocating the certificate. */
    
    X509_free (client_cert);
  } else
    dprintf ("Client does not have certificate.\n");
  return ssl;
}
int sslclient_close (struct ssl_client *client)
{  /* Close file descriptor. */  if (client->fd)    {      close (client->fd);      client->fd = -1;    } if(client->ssl)  SSL_free (client->ssl); free( client);
}

int ssl_serv_read (struct ssl_client * client)
{  int sock;  int rc;
  int nbytes=0,total=0;
  u_short length;  u_char command;  struct stream * ibuf=NULL;
  char buffer[BUFFERLEN]={0};
  /* Get thread data.  Reset reading thread because I'm running. */
  
  if(client->ssl!=NULL) dprintf("Start to read from client %d \n",client->fd);
  for(;;)
  {
	  nbytes= SSL_read (client->ssl, buffer, BUFFERLEN-1);
	  total+=nbytes;
	  if(nbytes>0)
	  {
	  			
	   		
				
				dprintf (" Read from Client byte= %d  \nmsg=%s\n",nbytes,buffer);
				//if((rc=http_transfer_ctos(buffer))!=0)
				//	dprintf("-------------------ctos error %d\n",rc);
				if(client->reverse_fd<=0)
					reverse_serv_connect(client,buffer,nbytes);
				else
					reverse_serv_send(client,buffer,nbytes);
				//       reverse_serv_read(client);
				if(nbytes==BUFFERLEN-1) 
					continue;
				else break;

	  }
	  if(nbytes==0&&total>0) break;
	   if(total==0||nbytes<0)
	  {
	  	remove_client(client);
	  	dprintf (" Read from Client error .byte= %d  \nmsg=%s\n",nbytes,buffer);
	  	return -1;
	  }
  	}

  	return 0;
}

void sendto_sslclient(struct ssl_client * client,char *buf, int len)
{    
	int nbyte;
       nbyte=SSL_write(client->ssl,buf,len);
      	if(nbyte>0)
      		dprintf("Send to client ok bytes=%d\n",nbyte);
	else
		dprintf("Send to client error bytes=%d\n",nbyte);
    

   }

int
inet_pton(int family, const char *strptr, void *addrptr)
{
    if (family == AF_INET) {
    	struct in_addr  in_val;

        if (inet_aton(strptr, &in_val)) {
            memcpy(addrptr, &in_val, sizeof(struct in_addr));
            return (1);
        }
		return(0);
    }
	errno = EAFNOSUPPORT;
    return (-1);
}
int 
reverse_serv_connect(struct ssl_client * client,char *buf, int len)
{
	struct sockaddr_in	servaddr;
	int n;
	if((client->reverse_fd = socket(AF_INET, SOCK_STREAM, 0))<0)
	{
		dprintf(" failed to init reverse socket\n");
		client->reverse_fd =-1;
		return -1;
	}
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(80);
	inet_pton(AF_INET, "192.168.19.217", &servaddr.sin_addr);
	if ( (n = connect(client->reverse_fd , (struct sockaddr *)&servaddr, sizeof(servaddr)) )< 0) 
	{
		close(client->reverse_fd );
		client->reverse_fd=-1;
		dprintf("Connect to  server failed \n");
		return -1;
	}

	dprintf("Connect to  reverse server ok %d\n",client->reverse_fd);
	add_fd_set(client->reverse_fd);
	reverse_serv_send(client, buf,len);
//	reverse_serv_read( client);

	
	return 0;
}


int 
reverse_serv_send(struct ssl_client * client,char *buf,int len)
{

	
	if (  write(client->reverse_fd, buf, len) <= 0) 
		dprintf("Send to  server failed rfd=%d\n",client->reverse_fd);
	else
		dprintf("SEND to  server ok rfd=%d\n",client->reverse_fd);
	

	
	return 0;
}
int reverse_serv_read(struct ssl_client * client)
{
	int total=0,nbytes=0;
	char buffer[BUFFERLEN]={0};
	dprintf("Receive from  Server ..................................... \n");
	for(;;)
	{
		nbytes=read(client->reverse_fd,buffer,BUFFERLEN-1);
		total+=nbytes;
		if(nbytes>0)
		{		
			dprintf("\nRecieve from  server bytes=%d\n",nbytes);//%s\n",htmlbuf);
			
			sendto_sslclient(client,buffer,nbytes);
			if(nbytes==BUFFERLEN-1) 
					continue;
			else break;
		}
		
		if(nbytes==0&&total>0) break;
		if(total==0||nbytes<0)
		{
			dprintf("Receive from   Server failed \n");
		
			if(client->reverse_fd>0)
			{
				close(client->reverse_fd);
				del_fd_set(client->reverse_fd);
				client->reverse_fd=-1;
			}
			return -1;
		}
	
	
	}
	return 0;
}
 int proxy_forwarding(struct ssl_client *client,char * buf ,int direction)
{
	return 0;
}

int   http_transfer_ctos(char *buf)
{
	char *p1,p2,p3,p4,p5,p6;
	char dn[500]={0};
	char *line =buf;
	int l;
	int i=0;
	printf("\n--%d\n",i++);
	p1=strchr(buf,'/');
	printf("\n--%d\n",i++);
	if(p1==0)return -1;
	printf("\n--%d\n",i++);
	p1++;
	if(strncmp(p1,"http/",5)&&strncmp(p1,"HTTP/",5)) return -2;
	printf("\n--%d\n",i++);
	p2=strchr(p1+5,'/');
	printf("\n--%d\n",i++);
	
	if(p2==0)return -3;
	printf("--p1= %s \n",p2);
	printf("\n--%d\n",i++);
	l=(unsigned long)p2-(unsigned long)p1-5;
	printf("\n--%d\n",i++);
	printf("\n domain name len =%d \n",l);
	strncpy(dn,p1+5,l);
	printf("\n--%d\n",i++);
	printf("\n domain name =%s \n",dn);
	p2++;
	strcpy(p1,p2);
	p2=strstr(p1,"Referer");
	if(p2==0) return -4;
	
	strcpy(p2+13,p2+14);
	
	printf("\n html buffer=%s \n",buf);
	return 0;
	
	
	
}

int   http_transfer_ctos2(char *buf)
{
	char *p2=NULL;
	
	p2=strstr(buf,"Referer");
	if(p2<=0) return -4;
	
	strcpy(p2+13,p2+14);
	//printf("\n domain name =%s \n",dn);
	//printf("\n html buffer=%s \n",buf);
//	printf("\n refer buffer=%s \n",p2);
	return 0;
	
}
	

void  http_transfer_stoc(char *buf)
{
	;
}
 	
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品欧美久久久久久动漫 | 国产一区二区久久| 亚洲午夜激情网站| 婷婷激情综合网| 久久精品国产99国产精品| 免费一区二区视频| 国产精品白丝jk黑袜喷水| 风间由美中文字幕在线看视频国产欧美| 日韩国产成人精品| 国产99久久久精品| 色香色香欲天天天影视综合网| 精品视频在线免费| 日韩免费看的电影| 亚洲三级视频在线观看| 亚洲国产日韩综合久久精品| 精品亚洲porn| 91免费看视频| 久久蜜桃一区二区| 亚洲一级电影视频| 91精品国产日韩91久久久久久| 欧美成人女星排行榜| 国产精品白丝jk白祙喷水网站| 精品一区二区免费看| 在线观看av一区| 久久午夜老司机| 日韩成人精品在线观看| 99久久99久久精品免费观看| 欧美精品一区二区三区很污很色的 | 另类调教123区 | 亚洲色图一区二区| 国产精品99久久久久| 91精品国产美女浴室洗澡无遮挡| 日韩你懂的在线播放| 亚洲国产一区二区a毛片| 国产盗摄视频一区二区三区| 91精品在线观看入口| 亚洲成人777| 欧美视频在线一区二区三区 | 国产精品性做久久久久久| 欧美日韩精品免费观看视频| 一区二区在线观看视频| 99re视频这里只有精品| 国产精品传媒在线| 成人综合婷婷国产精品久久| 国产亚洲制服色| 成人国产一区二区三区精品| 国产精品毛片久久久久久| 成人一区二区三区中文字幕| 国产精品毛片a∨一区二区三区| 高清国产一区二区| 亚洲免费观看高清完整版在线观看熊| www.综合网.com| 亚洲电影你懂得| www国产成人| 成人美女在线观看| 午夜婷婷国产麻豆精品| 91精品蜜臀在线一区尤物| 久久国产精品色婷婷| 日韩美女视频在线| 成人在线视频一区二区| 亚洲第一久久影院| 精品国产一区二区在线观看| 成人亚洲精品久久久久软件| 亚洲一区二区偷拍精品| 久久久精品免费免费| 在线观看不卡一区| 国产精品一品二品| 日韩福利视频导航| 亚洲欧美偷拍卡通变态| 精品国产露脸精彩对白| 91福利小视频| 成人av第一页| 国产99久久久精品| 丝袜美腿亚洲色图| 亚洲午夜一二三区视频| 国产嫩草影院久久久久| 精品国产91乱码一区二区三区 | 亚洲国产精品久久一线不卡| 久久久久久久久久久久久女国产乱 | 成人av网址在线| 国产精品99久久不卡二区| 亚洲尤物在线视频观看| 亚洲精品一卡二卡| 亚洲视频在线一区| 中文字幕高清不卡| 日韩欧美区一区二| 日韩精品一区二区三区三区免费| 欧美日韩一区二区欧美激情| 99国产一区二区三精品乱码| 91网站视频在线观看| 成人免费看的视频| 在线观看日韩精品| 欧美日韩国产三级| 日韩视频一区二区在线观看| 在线不卡的av| 91精品国模一区二区三区| 欧美放荡的少妇| 日韩欧美三级在线| 欧美经典三级视频一区二区三区| 中文字幕亚洲电影| 一区二区三区久久久| 日韩二区三区四区| 国产精品66部| 欧美伊人久久大香线蕉综合69 | 自拍偷拍国产精品| 自拍偷自拍亚洲精品播放| 午夜一区二区三区在线观看| 日韩高清一级片| 色网站国产精品| 成人免费在线观看入口| 亚洲电影在线播放| 国产老肥熟一区二区三区| 在线观看日韩精品| 国产欧美一区二区三区沐欲| 午夜精品久久久久久不卡8050| 国产乱一区二区| 日韩精品中文字幕一区| 亚洲国产毛片aaaaa无费看| 国内精品自线一区二区三区视频| 色狠狠综合天天综合综合| 久久综合久久久久88| 天堂成人国产精品一区| 在线免费av一区| 亚洲精品视频自拍| 色婷婷精品久久二区二区蜜臂av | 热久久国产精品| 欧美网站大全在线观看| 亚洲综合精品自拍| 欧美日韩一区二区三区视频| 一区二区三区在线观看国产| 91网址在线看| 亚洲高清在线精品| 欧美一区二区在线免费观看| 视频一区二区不卡| 欧美乱妇23p| 蜜臀久久99精品久久久久久9| 欧美日韩国产小视频在线观看| 亚洲成av人片一区二区三区| 欧美日韩色一区| 美腿丝袜亚洲三区| 欧美激情一区二区三区不卡 | 国产精品系列在线| av一本久道久久综合久久鬼色| 国产精品福利一区| 91精品国产色综合久久不卡蜜臀 | 久久先锋影音av| 成人爱爱电影网址| 亚洲第一狼人社区| 日韩欧美一级二级| 国产剧情在线观看一区二区| 国产精品区一区二区三| 另类小说一区二区三区| 免费成人av在线播放| 91精品免费在线| 99精品视频一区二区三区| 亚洲国产一区视频| 久久亚洲精精品中文字幕早川悠里 | 午夜电影久久久| 国产三级精品视频| 日韩一区二区免费在线电影| 岛国av在线一区| 激情综合色播激情啊| 夜夜揉揉日日人人青青一国产精品 | 日韩一级高清毛片| 欧美日韩在线播放一区| 国产传媒一区在线| 久久国产精品区| 日韩av网站免费在线| 亚洲国产综合人成综合网站| 亚洲国产成人自拍| ww亚洲ww在线观看国产| 69av一区二区三区| 欧美一区二区三区在| 欧美浪妇xxxx高跟鞋交| 欧美探花视频资源| 8v天堂国产在线一区二区| 欧美午夜片在线观看| 在线免费观看日韩欧美| 欧美色成人综合| 欧美中文字幕一区| 欧美日韩成人综合天天影院| 色妞www精品视频| 欧美视频日韩视频在线观看| 欧美影院一区二区| 欧美一个色资源| 久久久久国色av免费看影院| 国产日韩av一区二区| 国产欧美精品在线观看| 日韩码欧中文字| 夜夜嗨av一区二区三区中文字幕| 亚洲电影视频在线| 乱一区二区av| 99久久精品国产毛片| 欧美高清视频不卡网| 久久一留热品黄| 亚洲v精品v日韩v欧美v专区| 裸体歌舞表演一区二区| 97se亚洲国产综合自在线不卡| 欧美日韩成人综合天天影院| 亚洲国产精品99久久久久久久久|