在服务器上配置仅使用HTTPS通信的教程_Linux

HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP。本文会说明如何在 Apache2、Nginx 和 Lighttpd 上如何启用 HSTS。在主流的 web 服务器上测试通过: Nginx 1.1.19、 Lighttpd 1.4.28 和 Apache 2.2.22 ,环境为 Ubuntu 12.04、 Debian 6 & 7 和 CentOS 6,只需要调整部分参数就可以工作在其它的发行版上。
什么是 HTTP 严格传输安全?

引用自 Mozilla Developer Network:

  •     如果一个 web 服务器支持 HTTP 访问,并将其重定向到 HTTPS 访问的话,那么访问者在重定向前的初始会话是非加密的。举个例子,比如访问者输入 http://www.foo.com/ 或直接输入 foo.com 时。
  •     这就给了中间人攻击的一个机会,重定向可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。
  •     HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

以下引自维基百科:

    HSTS 可以用来抵御 SSL 剥离攻击。SSL 剥离攻击是中间人攻击的一种,由 Moxie Marlinspike 于2009年发明。他在当年的黑帽大会上发表的题为 “New Tricks For Defeating SSL In Practice” 的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的。

    HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

    另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

场景举例:

    当你通过一个无线路由器的免费 WiFi 访问你的网银时,很不幸的,这个免费 WiFi 也许就是由黑客的笔记本所提供的,他们会劫持你的原始请求,并将其重定向到克隆的网银站点,然后,你的所有的隐私数据都曝光在黑客眼下。

    严格传输安全可以解决这个问题。如果你之前使用 HTTPS 访问过你的网银,而且网银的站点支持 HSTS,那么你的浏览器就知道应该只使用 HTTPS,无论你是否输入了 HTTPS。这样就防范了中间人劫持攻击。

注意,如果你之前没有使用 HTTPS 访问过该站点,那么 HSTS 是不奏效的。网站需要通过 HTTPS 协议告诉你的浏览器它支持 HSTS。

服务器开启 HSTS 的方法是,当客户端通过HTTPS发出请求时,在服务器返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。非加密传输时设置的HSTS字段无效。
在 Apache2 中设置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

  

复制代码 代码如下:

  # Optionally load the headers module:
    LoadModule headers_module modules/mod_headers.so
    <VirtualHost 67.89.123.45:443>
        Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    </VirtualHost>

现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数)。这个失效时间每次都会设置为两年后,所以,明天你访问时,它会设置为明天的两年后。

你只能在 HTTPS 虚拟机中设置这个头,而不能设置在 HTTP 虚拟机中。

要将你的访问者重定向到对应 HTTPS 站点,可使用如下设置:

  

复制代码 代码如下:

  <VirtualHost *:80>
      [...]
      ServerName example.com
      Redirect permanent / https://example.com/
    </VirtualHost>

如果仅仅是做重定向的话,甚至不需要设置 DocumentRoot。

你也可以使用 mod_rewrite 来做重定向,但是上述的方式更简单更安全。不过,mod_rewrite 可以重定向页面到对应的 HTTPS 页面,而上述配置则只重定向到“/”:

   

复制代码 代码如下:

<VirtualHost *:80>
      [...]
      <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
      </IfModule>
    </VirtualHost>

不要忘记重启 Apache。
Lighttpd

对于 lighttpd 来说很简单,将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

   

复制代码 代码如下:

server.modules += ( "mod_setenv" )
    $HTTP["scheme"] == "https" {
        setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
    }

重启 Lighttpd。失效时间也是两年。
Nginx

Nginx 甚至更简单,将下述行添加到你的 HTTPS 配置的 server 块中:

   

复制代码 代码如下:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

不要忘记重启 Nginx。

时间: 2024-10-30 01:20:40

在服务器上配置仅使用HTTPS通信的教程_Linux的相关文章

在服务器上启用HTTP公钥固定扩展的教程_Linux

公钥固定(Public Key Pinning)是指一个证书链中必须包含一个白名单中的公钥,也就是说只有被列入白名单的证书签发机构(CA)才能为某个域名*.example.com签发证书,而不是你的浏览器中所存储的任何 CA 都可以为之签发.本文讲述了这种机制的背景知识,并提供了 Apache. Lighttpd 和 NGINX 上的配置范例.HTTP 公钥固定扩展 用你使用的银行做个例子,它一直使用 CA 公司 A 为其签发证书.但是在当前的证书体系下,CA 公司 B.CA 公司 C 和 NS

在Windows的Apache服务器上配置对PHP和CGI的支持_Linux

现在有越来越多的个人主页站长需要了解如何如何在windows系统下配置自己的php,cgi服务器,以方便本地调试cgi和php的程序. 我们可以用Apache(windows版)来一次搞定:以下由我自己整理的关于在单机Windows环境下的安装和配置 Apache Server 的文章.假如您正在 Windows 单机环境下测试自己的网站,建议您参考一下. 主要包括:安装和配置 Apache Server:使用 Perl CGI 脚本:使用 PHP 脚本. --部分内容参考<Apache Ser

Windows服务器上配置SNMP服务方法

SNMP(Simple Network Management Protocol,简单网络管理协议),用来对通信线路进行管理.在Windows服务器上配置SNMP服务时,使用手动填写信息太麻烦.下面是使用命令行执行配置文件来实现. 创建snmp.inf [NetOptionalComponents] SNMP = 1 [SNMP] Contact_Name = "ITSupport" Location = "ServerRoom" Service = Physical

Windows服务器上配置SNMP服务的方法

SNMP(Simple Network Management Protocol,简单网络管理协议),用来对通信线路进行管理.在Windows服务器上配置SNMP服务时,使用手动填写信息太麻烦.下面是使用命令行执行配置文件来实现. 创建snmp.inf [NetOptionalComponents] SNMP = 1 [SNMP] Contact_Name = "ITSupport" Location = "ServerRoom" Service = Physical

在外网服务器上配置了tomcat 现在局域网能访问外网不行

问题描述 在外网服务器上配置了tomcat 现在局域网能访问外网不行 如题,tomcat端口是8080 防火墙也设置允许了8080但是现在只能内网访问 外网不可以 解决方案 外网服务器是否有公网访问权限,是否有限制端口等

在同一台服务器上配置多个Tomcat的方法_Tomcat

如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我们把配置的详细过程写在下面,以供参考:(此例以配置三个Tomcat为例) 1. 下载apache-tomcat-7.0.63,下载地址:http://tomcat.apache.org/download-70.cgi下载下来的文件为apache-tomcat-7.0.63.zip. 2. 解压该压缩

如何在CentOS6.x服务器上配置Nodejs

课程指数 难度指数: 4星(满星5星) 技术指数: 5星(满星5星) 理论指数: 3星(满星5星) 面向人群: 自动化运维&初中级运维 分享目录 1.1 添加额外的源 1 1.2 部署一个Node.js app 4 1.3 运行一个Node.js app 6 1.4 Node.js app服务器总结. 7 1.5 问题: 7 下面我们将要在我们的CentOS6.x服务器上配置Nodejs,启动一个简单的nodejs实例,这个服务器有很简单的架构. 开始了,首先创建一个playbook文件,我们尽

如何在服务器上配置零客户端

如果你想要减少为用户提供桌面技术支持和进行配置的时间,就不能使用本地操作系统.零客户端应运而生.虚拟桌面基础设施(VDI)可以通过更好的方式将操作系统交付给终端用户, 但是其仍然需要使用终端设备.对于这种情况,通常我会选择瘦客户端,但是它们也需要使用自己的操作系统. 所以也需要进行一系列的本地配置.如果能够避免使用操作系统,就可以减少可能导致问题的潜在因素.VDI为用户提供了操作系统,但是零客户端却取消了终端上的操作系统.而最终结果是我们不必再针对终端进行排错.在服务器上配置零客户端零客户端是一

在服务器上启用HTTP公钥固定扩展的教程

  这篇文章主要介绍了在服务器上启用HTTP公钥固定扩展的教程,示例包括对Apache和NGINX以及Lighttpd服务器的演示,需要的朋友可以参考下 公钥固定(Public Key Pinning)是指一个证书链中必须包含一个白名单中的公钥,也就是说只有被列入白名单的证书签发机构(CA)才能为某个域名*.example.com签发证书,而不是你的浏览器中所存储的任何 CA 都可以为之签发.本文讲述了这种机制的背景知识,并提供了 Apache. Lighttpd 和 NGINX 上的配置范例.