HTTPS的七个误解(转)

误解七:HTTPS无法缓存

许多人以为,出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。 微软的IE项目经理Eric Lawrence写道:

“说来也许令人震惊,只要HTTP头允许这样做,所有版本的IE都缓存HTTPS内容。比如,如果头命令是Cache-Control: max-age=600,那么这个网页就将被IE缓存10分钟。 New Balance 446 homme IE的缓存策略,与是否使用HTTPS协议无关。 adidas stan smith femme bleu Nike Air Max 2017 Heren grijs (其他浏览器在这方面的行为不一致,取决于你使用的版本,所以这里不加以讨论。 Nike Roshe Run enfants )”

Firefox默认只在内存中缓存HTTPS。但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上。下面的图片显示,Firefox的硬盘缓存中有HTTPS内容,头命令正是Cache-Control:Public。 误解六:SSL证书很贵 如果你在网上搜一下,就会发现很多便宜的SSL证书,大概10美元一年,这和一个.com域名的年费差不多。而且事实上,还能找到免费的SSL证书。 在效力上,便宜的证书当然会比大机构颁发的证书差一点,但是几乎所有的主流浏览器都接受这些证书。

误解五:HTTPS站点必须有独享的IP地址

由于IPv4将要分配完毕,所以很多人关心这个问题。每个IP地址只能安装一张SSL证书,这是毫无疑问的。但是,如果你使用子域名通配符SSL证书(wildcard SSL certificate,价格大约是每年125美元),就能在一个IP地址上部署多个HTTPS子域名。 nike flyknit lunar 3 homme 比如,https://www.httpwatch.com和https://store.httpwatch.com,就共享同一个IP地址。 Jabaal Sheard 另外,UCC(统一通信证书,Unified Communications Certificate)支持一张证书同时匹配多个站点,可以是完全不同的域名。SNI(服务器名称指示,Server Name Indication)允许一个IP地址上多个域名安装多张证书。服务器端,Apache和Nginx支持该技术,IIS不支持;客户端,IE 7+、Firefox 2.0+、Chrome 6+、Safari 2.1+和Opera 8.0+支持。

误解四:转移服务器时要购买新证书

部署SSL证书,需要这样几步:

  1. 在你的服务器上,生成一个CSR文件(SSL证书请求文件,SSL Certificate Signing Request)。 Adidas   2. Zapatillas Nike Air Max Baratas 使用CSR文件,购买SSL证书。   3. Nike Air Max 95 Homme ROSHE RUN

安装SSL证书。 New Balance 998 homme

这些步骤都经过精心设计,保证传输的安全,防止有人截取或非法获得证书。结果就是,你在第二步得到的证书不能用在另一台服务器上。如果你需要这样做,就必须以其他格式输出证书。 adidas bounce femme 比如,IIS的做法是生成一个可以转移的.pfx文件,并加以密码保护。 将这个文件传入其他服务器,将可以继续使用原来的SSL证书了。

误解三:HTTPS太慢

使用HTTPS不会使你的网站变得更快(实际上有可能,请看下文),但是有一些技巧可以大大减少额外开销。 首先,只要压缩文本内容,就会降低解码耗用的CPU资源。 Parajumpers Masterpiece Passport 不过,对于当代CPU来说,这点开销不值一提。 其次,建立HTTPS连接,要求额外的TCP往返,因此会新增一些发送和接收的字节。但是,从下图可以看到,新增的字节是很少的。 第一次打开网页的时候,HTTPS协议会比HTTP协议慢一点,这是因为读取和验证SSL证书的时间。下面是一张HTTP网页打开时间的瀑布图。 同一张网页使用HTTPS协议之后,打开时间变长了。 nike air max 95 homme 建立连接的部分,大约慢了10%。但是,一旦有效的HTTPS连接建立起来,再刷新网页,两种协议几乎没有区别。先是HTTP协议的刷新表现: 然后是HTTPS协议: 某些用户可能发现,HTTPS比HTTP更快一点。这会发生在一些大公司的内部局域网,因为通常情况下,公司的网关会截取并分析所有的网络通信。但是,当它遇到HTTPS连接时,它就只能直接放行,因为HTTPS无法被解读。正是因为少了这个解读的过程,所以HTTPS变得比较快。

误解二:有了HTTPS,Cookie和查询字符串就安全了

虽然无法直接从HTTPS数据中读取Cookie和查询字符串,但是你仍然需要使它们的值变得难以预测。 比如,曾经有一家英国银行,直接使用顺序排列的数值表示session id: 黑客可以先注册一个账户,找到这个cookie,看到这个值的表示方法。然后,改动cookie,从而劫持其他人的session id。至于查询字符串,也可以通过类似方式泄漏。

误解一:只有注册登录页,才需要HTTPS

这种想法很普遍。人们觉得,HTTPS可以保护用户的密码,此外就不需要了。Firefox浏览器新插件Firesheep,证明了这种想法是错的。 Baylor Bears 我们可以看到,在Twitter和Facebook上,劫持其他人的session是非常容易的。 adidas stan smith femme 咖啡馆的免费WiFi,就是一个很理想的劫持环境,因为两个原因:

  1. 这种WiFi通常不会加密,所以很容易监控所有流量。   2. WiFi通常使用NAT进行外网和内网的地址转换,所有内网客户端都共享一个外网地址。这意味着,被劫持的session,看上去很像来自原来的登录者。

以Twitter为例,它的登录页使用了HTTPS,但是登录以后,其他页面就变成了HTTP。这时,它的cookie里的session值就暴露了。 也就是说,这些cookie是在HTTPS环境下建立的,但是却在HTTP环境下传输。如果有人劫持到这些cookie,那他就能以你的身份在Twitter上发言了。

Posted in Linux | Leave a comment

VMware中ubuntu忘记密码的解决办法(转)

一、用安装盘重启, Nike Air Max 90 Homme 这时候你将获得root权限, Asics Gel Lyte 3 Femme Rose Asics Gel Lyte 5 Femme 但这个不是今天说的重点。 Adidas Zx 850 Homme adidas superstar homme asics gel lyte 5 mujer beige 二、这种情况更加常见, new balance 1400 invincible Fjallraven Kanken No.2 我们身边并没有安装盘, Landon Collins Giants Jerseys 但grub为我们提供一个非常方便的方法: 重启ubuntu, Canada Goose Parka Expedition Soldes Chaussures Nike 随即长按shift进入grub菜单;选择recovery mode, New Balance 998 homme New Balance 999 femme Marcus Mariota – Oregon Ducks 回车确认;在Recovery Menu中,选择“Root Drop to root shell prompt”, new balance mrl996dd deconstructed khakikhaki 回车确认;进入shell界面,使用passwd命令重新设定密码:passwd david, nike air zoom pegasus 32 homme Nike Air Max BW (david是系统中已有的username), asics gel stratus donna Nike Air Zoom Pegasus 31 homme Canotta Memphis Grizzlies 回车确认;输入新密码;再次确认新密码;看到密码设定成功提示:passwd: password updated successfully;重启系统进入GUI界面:sudo reboot; 备注: 1.进入root后 修改某一账号的密码: passwd usrname 2. Adidas Scarpe Donna 做完这个相信大家都会觉得linux这样太不安全了, asics femme pas cher 但是你可以设置bios密码嘛, adidas cloudfoam femme asics gel nimbus 17 mujer 毕竟给自己带来方便的同时也给别人提供了机会。 nike pas cher Nike Roshe Run Femme Adidas Nmd Uomo

Nike Air Max 2016 Dames Zwart 3. New Balance 1600 homme adidas ultra boost uncaged homme 在修改密码的时候, Adidas Zx Flux Homme Noir Nike Air Max Thea Femme Noir Taylor Lewan – Michigan Wolverines Jordan Shoes On Sale 或许会出现 authentication token manipulation error 导致修改不成功,这是因为存放密码的文件只读了, Nike Air Max 2015 femme 所以我们得修改一下该文件的权限, Nike Air Yeezy Womens 通过命令:mount -rw -o remount /, Nike Air Max 2016 Homme nike air max pas cher 然后在修改就搞定了。

Posted in Linux | Leave a comment

基于 Socket 的 UDP 和 TCP 编程介绍(转)

一、概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。 UDP:用户数据报协议。 Nike Air Presto Homme Jordan 11 enfants UDP是一种无连接协议。UDP套接口是数据报套接口(datagram socket)的一种。 louboutin homme nike air jordan 11 homme nike cortez bambini Nike Air Max Goedkoop 二、TCP和UDP介绍 1)基本TCP客户—服务器程序设计基本框架 说明:(三路握手) 1.客户端发送一个SYN段(同步序号)指明客户打算连接的服务器端口,以及初始化序号(ISN) 。 Nike Air Presto femme Nike Air Max 2016 Femme 2.服务器发回包含服务器的初始序号的SYN报文段作为应答。 nike pas cher 同时,将确认序号(ACK)设置为客户的ISN加1以对客户的SYN 报文段进行确认。 Nike Air Max 90 Femme Blanche 一个SYN将占用一个序号。 nike air max 97 homme Richard Sherman Seattle Seahawks Jersey 3.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。 2) 基本TCP客户—服务器程序设计基本框架流程图具体参见原文 3) UDP和TCP的对比: UDP没有三次握手过程。简单点说。UDP处理的细节比TCP少。 nike scarpe italia shop UDP不能保证消息被传送到(它也报告消息没有传送到)目的地。 adidas neo 10k męskie UDP也不保证数据包的传送顺序。 asics pas cher UDP把数据发出去后只能希望它能够抵达目的地。 nike free 5.0 donna TCP优缺点: 优点: 1.TCP提供以认可的方式显式地创建和终止连接。 2.TCP保证可靠的、顺序的(数据包以发送的顺序接收)以及不会重复的数据传输。 Kopen Nike Air Max 2017 Goedkoop 3.TCP处理流控制。 Nike Air Max Tavas femme 4.允许数据优先 5.如果数据没有传送到,则TCP套接口返回一个出错状态条件。 6.TCP通过保持连续并将数据块分成更小的分片来处理大数据块。—无需程序员知道 缺点: TCP在转移数据时必须创建(并保持)一个连接。 nike tn homme blanche latelierdecaro.fr 这个连接给通信进程增加了开销,让它比UDP速度要慢。 nike air zoom pegasus 34 femme New Balance 515 femme UDP优缺点: 1.UDP不要求保持一个连接 2.UDP没有因接收方认可收到数据包(或者当数据包没有正确抵达而自动重传)而带来的开销。 Adidas Zx Flux Homme Pas Cher adidas gazelle męskie 3.设计UDP的目的是用于短应用和控制消息 4.在一个数据包连接一个数据包的基础上,UDP要求的网络带宽比TDP更小。 三、Socket编程 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Air Jordan 14 Homme nike roshe flyknit uomo adidas superstar mujer Socket接口设计者最先是将接口放在Unix操作系统里面的。 New Balance Homme 如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。 Nike Air Max 95 homme asics gel lyte 3 uomo Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 ff14 gil for sale nike internationalist femme 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。 asics gel kinsei 5 homme 流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 1、socket调用库函数主要有: 创建套接字 Socket(af,type,protocol) 建立地址和套接字的联系 bind(sockid, local addr, addrlen) 服务器端侦听客户端的请求 listen( Sockid ,quenlen) 建立服务器/客户端的连接 (面向连接TCP) 客户端请求连接 Connect(sockid, destaddr, addrlen) 服务器端等待从编号为Sockid的Socket上接收客户连接请求 newsockid=accept(Sockid,Clientaddr, paddrlen) 发送/接收数据 面向连接: send(sockid, buff, bufflen) recv( ) 面向无连接: sendto(sockid,buff,…,addrlen) recvfrom( ) 释放套接字 close(sockid) 2、TCP/IP应用编程接口(API) 服务器的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,然后调用listen在相应的socket上监听,当accpet接收到一个连接服务请求时,将生成一个新的socket。 New Balance 1400 homme 服务器显示该客户机的IP地址,并通过新的socket向客户端发送字符串” hi,I am server!”。 Nike Roshe Run homme 最后关闭该socket。 Parajumper Gobi Femme Nike Homme main() { int sock_fd, client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */ struct sockaddr_in ser_addr; /* 本机地址信息 */ struct sockaddr_in cli_addr; /* 客户端地址信息 */ char msg[MAX_MSG_SIZE]; /* 缓冲区*/ ser_sockfd = socket( AF_INET, SOCK_STREAM, 0 ); /*创建连接的SOCKET */ if ( ser_sockfd < 0 ) { /*创建失败 */ fprintf( stderr, “socker Error:%sn”, strerror( errno ) ); exit( 1 ); } /* 初始化服务器地址*/ addrlen = sizeof(struct sockaddr_in); bzero( &ser_addr, addrlen ); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = htonl( INADDR_ANY ); ser_addr.sin_port = htons( SERVER_PORT ); if ( bind( ser_sockfd, (struct sockaddr *) &ser_addr, sizeof(struct sockaddr_in) ) < 0 ) { /*绑定失败 */ fprintf( stderr, “Bind Error:%sn”, strerror( errno ) ); exit( 1 ); } /*侦听客户端请求*/ if ( listen( ser_sockfd, BACKLOG ) < 0 ) { fprintf( stderr, “Listen Error:%sn”, strerror( errno ) ); close( ser_sockfd ); exit( 1 ); } while ( 1 ) { /* 等待接收客户连接请求*/ cli_sockfd = accept( ser_sockfd, (struct sockaddr *) &cli_addr, &addrlen ); if ( cli_sockfd <= 0 ) { fprintf( stderr, “Accept Error:%sn”, strerror( errno ) ); }else { /*开始服务*/ recv( cli_addr, msg, MAX_MSG_SIZE, 0 ); /* 接受数据*/ printf( “received a connection from %sn”, inet_ntoa( cli_addr.sin_addr ) ); printf( “%sn”, msg ); /*在屏幕上打印出来 */ strcpy( msg, “hi,I am server!” ); send( cli_addr, msg, sizeof(msg), 0 ); /*发送的数据*/ close( cli_addr ); } } close( ser_sockfd ); } 客户端的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,请求连接服务器,通过新的socket向客户端发送字符串” hi,I am client!”。 New Balance 574 homme Nike Air Zoom Pegasus 31 homme nike air max 1 femme noir 最后关闭该socket。

  • Nike Air Max 1 Femme
  • main() { int cli_sockfd; /*客户端SOCKET */ int addrlen; char seraddr[14]; struct sockaddr_in ser_addr, /* 服务器的地址*/ cli_addr; /* 客户端的地址*/ char msg[MAX_MSG_SIZE]; /* 缓冲区*/ GetServerAddr( seraddr ); cli_sockfd = socket( AF_INET, SOCK_STREAM, 0 ); /*创建连接的SOCKET */ if ( ser_sockfd < 0 ) { /*创建失败 */ fprintf( stderr, “socker Error:%sn”, strerror( errno ) ); exit( 1 ); } /* 初始化客户端地址*/ addrlen = sizeof(struct sockaddr_in); bzero( &ser_addr, addrlen ); cli_addr.sin_family = AF_INET; cli_addr.sin_addr.s_addr = htonl( INADDR_ANY ); cli_addr.sin_port = 0; if ( bind( cli_sockfd, (struct sockaddr *) &cli_addr, addrlen ) < 0 ) { /*棒定失败 */ fprintf( stderr, “Bind Error:%sn”, strerror( errno ) ); exit( 1 ); } /* 初始化服务器地址*/ addrlen = sizeof(struct sockaddr_in); bzero( &ser_addr, addrlen ); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = inet_addr( seraddr ); ser_addr.sin_port = htons( SERVER_PORT ); if ( connect( cli_sockfd, (struct sockaddr *) &ser_addr, &addrlen ) != 0 ) /*请求连接*/ { /*连接失败 */ fprintf( stderr, “Connect Error:%sn”, strerror( errno ) ); close( cli_sockfd ); exit( 1 ); } strcpy( msg, “hi,I am client!” ); send( sockfd, msg, sizeof(msg), 0 ); /*发送数据*/ recv( sockfd, msg, MAX_MSG_SIZE, 0 ); /* 接受数据*/ printf( “%sn”, msg ); /*在屏幕上打印出来 */ close( cli_sockfd ); } 服务器的工作流程:首先调用socket函数创建一个Socket,然后调用bind函数将其与本机地址以及一个本地端口号绑定,接收到一个客户端时,服务器显示该客户端的IP地址,并将字串返回给客户端。 3、UDP/IP应用编程接口(API) int main( int argc, char **argv ) { int ser_sockfd; int len; /* int addrlen; */ socklen_t addrlen; char seraddr[100]; struct sockaddr_in ser_addr; /*建立socket*/ ser_sockfd = socket( AF_INET, SOCK_DGRAM, 0 ); if ( ser_sockfd < 0 ) { printf( “I cannot socket successn” ); return(1); } /*填写sockaddr_in 结构*/ addrlen = sizeof(struct sockaddr_in); bzero( &ser_addr, addrlen ); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = htonl( INADDR_ANY ); ser_addr.sin_port = htons( SERVER_PORT ); /*绑定客户端 * if(bind(ser_sockfd,(struct sockaddr *)&ser_addr,addrlen)<0) * { * printf(“connect”); * return 1; * } * while(1) * { * bzero(seraddr,sizeof(seraddr)); * len=recvfrom(ser_sockfd,seraddr,sizeof(seraddr),0,(struct sockaddr*)&ser_addr,&addrlen); * /*显示client端的网络地址*/ printf( “receive from %sn”, inet_ntoa( ser_addr.sin_addr ) ); /*显示客户端发来的字串*/ printf( “recevce:%s”, seraddr ); /*将字串返回给client端*/ sendto( ser_sockfd, seraddr, len, 0, (struct sockaddr *) &ser_addr, addrlen ); } 客户端的工作流程:首先调用socket函数创建一个Socket,填写服务器地址及端口号,从标准输入设备中取得字符串,将字符串传送给服务器端,并接收服务器端返回的字符串。 nike internationalist uomo Nike Air Max Thea Femme Noir nike tn homme blanche 最后关闭该socket。 nike cortez epic uomo Nike Air Presto enfants nike air max 2015 hombre int GetServerAddr( char * addrname ) { printf( “please input server addr:” ); scanf( “%s”, addrname ); return(1); } int main( int argc, char **argv ) { int cli_sockfd; int len; socklen_t addrlen; char seraddr[14]; struct sockaddr_in cli_addr; char buffer[256]; GetServerAddr( seraddr ); /* 建立socket*/ cli_sockfd = socket( AF_INET, SOCK_DGRAM, 0 ); if ( cli_sockfd < 0 ) { printf( “I cannot socket successn” ); return(1); } /* 填写sockaddr_in*/ addrlen = sizeof(struct sockaddr_in); bzero( &cli_addr, addrlen ); cli_addr.sin_family = AF_INET; cli_addr.sin_addr.s_addr = inet_addr( seraddr ); /* cli_addr.sin_addr.s_addr=htonl(INADDR_ANY); */ cli_addr.sin_port = htons( SERVER_PORT ); bzero( buffer, sizeof(buffer) ); /* 从标准输入设备取得字符串*/ len = read( STDIN_FILENO, buffer, sizeof(buffer) ); /* 将字符串传送给server端*/ sendto( cli_sockfd, buffer, len, 0, (struct sockaddr *) &cli_addr, addrlen ); /* 接收server端返回的字符串*/ len = recvfrom( cli_sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *) &cli_addr, &addrlen ); /* printf(“receive from %sn”,inet_ntoa(cli_addr.sin_addr)); */ printf( “receive: %s”, buffer ); close( cli_sockfd ); } 四、调试 Makefile文件为: CC=gcc all:server client CFLAGS=-o server: server.c $(CC) $(CFLAGS) $@ server.c client: client.c $(CC) $(CFLAGS) $@ client.c clean: rm -f server client 运行:在shell中执行make进行编译,make clean删除生成文件。

    Posted in Linux | Leave a comment