分类
知识中心

HTTP通信使用明文可能会被窃听

由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。

 

TCP/IP是可能被窃听的网络

 

如果要问为什么通信时不加密是一个缺点,这是因为,按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。

 

所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窥视行为。

 

即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。

 

窃听相同段上的通信并非难事。只需要收集在互联网上流动的数据包(帧)就行了。对于收集来的数据包的解析工作,可交给那些抓包(Packet Capture)或嗅探器(Sniffer)工具。

 

广泛使用的抓包工具Wireshark,它可以获取HTTP协议的请求和响应的内容,并对其进行解析。

 

像使用GET方法发送请求、响应返回了200 OK,查看HTTP响应报文的全部内容等一系列的事情都可以做到。

 

加密处理防止被窃听

 

在目前大家正在研究的如何防止窃听保护信息的几种对策中,最为普及的就是加密技术。加密的对象可以有这么几个。

 

通信的加密

 

一种方式就是将通信加密。HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。

 

用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL证书组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。

 

内容的加密

 

还有一种将参与通信的内容本身加密的方式。由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。

 

在这种情况下,客户端需要对HTTP报文进行加密处理后再发送请求。

 

诚然,为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。主要应用在Web服务中。有一点必须引起注意,由于该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。稍后我们会加以说明

 

分类
知识中心

如何开启Nginx TLS(SSL) SNI support

VPS上的多个站点都使用SSL加密,主要那些twitter api被墙怕了,还是加密好

但是看一个ip只能一个ssl证书,我不可能去多买几个ip吧,毕竟只是自己想玩玩,不是那种必须的

但是既然想了就折腾下,后来查了下资料,可以multiple SSL sites on a single IP address

而Nginx如果开启了TLS SNI support,就能支持多个SSL加密站点共同使用一个IP

方法也很简单,首先先看看你现在的Nginx是否enable了这个功能

/usr/local/nginx/sbin/nginx -V

nginx: nginx version: nginx/1.1.0

nginx: TLS SNI support disable

nginx: configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6

 

如果是TLS SNI support disable那你需要重新编译下Nginx,如果enable了,你直接修改配置文件就行

这里的环境事先说明,这里使用LNMP一键安装包搭建的环境,其他方法的请自行查看需要修改地方

方法很简单,首先安装OpenSSL,不过一般都装好的,这里忽略

下载openssl源码包

wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz

tar xvf openssl-1.0.0d.tar.gz

 

然后重新编译Nginx,需要在Configuare里多加一行参数,指明openssl的路径

我的openssl解压路径和nginx的目录在同级目录下,如果你的不在请自行修改

./configure –user=www –group=www –prefix=/usr/local/nginx \

–with-http_stub_status_module \

–with-http_ssl_module \

–with-http_gzip_static_module \

–with-ipv6 \

–with-openssl=../openssl-1.0.0d/

make

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

cp objs/nginx /usr/local/nginx/sbin/nginx

/usr/local/nginx/sbin/nginx -t

make upgrade

 

然后我们看下Nginx版本信息,确认下

/usr/local/nginx/sbin/nginx -V

nginx: nginx version: nginx/1.1.0

nginx: TLS SNI support enabled

nginx: configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –with-openssl=../../openssl-1.0.0d/

 

搞定,TLS SNI support enabled,接下来就是修改vhost的配置,加上ssl证书配置了

分类
知识中心

用SSL证书解决假冒钓鱼网站

随着网络贸易的飞速发展,不仅让我们的生活发生了很大的改变,也给了很多不法分子利用钓鱼网站诈骗广大网民的钱财,要防止网站假冒的发生,需要在许多方面采取安全防范措施。有的需从管理方面着手,如域名注册的严格管理、实名制手机、安全防范教育等;有的需从技术方面入手,如确保域名解析系统的安全等。除了这些措施外,SSL服务器证书是目前防止网站假冒最有效的技术手段。

服务器证书是一个标识网站身份的电子身份凭证(electronic credential),它采用密码技术构造。安装了服务器证书的网站通过使用Secure Socket Layer(SSL)安全协议进行身份鉴别和数据保密传送,因此,服务器证书又称为SSL服务器证书,或SSL证书

这里的证书,又称为数字证书(digital certificate),是公开密钥基础设施(Public Key Infrastructure,PKI)安全技术和服务体系的一个重要要素,它由一个被称为证书认证机构(Certification Authority,CA)的独立第三方签发,用于标识最终实体的身份。这里的实体,可以是人、组织或设备(如Web服务器)。

SSL协议,又称为Transport Layer Security(TLS)协议,它基于密码学原理设计;在用户通过浏览器访问一个Web网站时,SSL协议可以基于数字证书进行单向(仅鉴别网站身份)或双向(同时鉴别用户和网站身份)的身份鉴别,并通过构建安全的加密通道,保证数据在互联网上传送时不被泄露、窃取。

在有了服务器证书后,一个用户可以根据如下两点来判断这个网站是否真实可信:1)这个网站是否安装了服务器证书?2)如果安装了,这个网站的服务证书是否可信和有效?

判断一个网站是否安装了服务器证书,可以看这个网站是否可以通过https:\\xxx形式的URL(Uniform Resource Locator)访问(URL,即是输入到浏览器地址栏的网站访问地址及访问方法信息),例如,https:\\www.icbc.com.cn。若是,则说明网站安装了服务器证书;否则,就没有。没有安装服务器证书的网站是通过http:\\xxx形式的URL访问的,例如,http:\\www.icbc.com.cn。二者的差别是,https比http多一个“s”。

即便网站安装了服务器证书,如果服务器证书不可信或无效,则在用户访问网站时,浏览器会弹出一个警告窗口,提示用户,比如该证书的签名无效,或者证书不是由一个可信的证书认证机构(CA)签发(即证书不可信),又或者该证书已过了有效期、证书上的主机域名与网站的域名不相符等等;如果证书可信并有效,则浏览器不会弹出警告信息。若证书可信并有效,则用户可以进一步通过点击浏览器右下角的黄色小锁,或地址  栏右边的黄色小锁,查看证书的详细信息(但用户通常不会这么做)。

如果网站安装了服务器证书,且证书可信并有效,那么,这个网站就基本上可以确定是真实可信的了。