Drupal启用HTTP安全(HTTPS)

hrs 提交于 2019/07/12 - 13:40 , 周五

HTTPS是一种加密HTTP请求及其响应的协议。这可以确保如果有人能够破坏您的计算机与您请求的服务器之间的网络,他们将无法收听或篡改通信。

当您通过HTTPS访问网站时,URL如下所示:https//drupal.org/user/login当您通过普通(未加密)HTTP访问网站时,它看起来像这样:http//drupal.org/user/login

为什么它对你(以及何时)很重要

HTTPS通常用于用户将敏感信息发送到网站并且拦截该信息将成为问题的情况。通常,此信息包括:

  • 信用卡
  • 敏感的cookie,如PHP会话cookie
  • 密码和用户名
  • 可识别信息(社会安全号码,州ID号码等)
  • 机密内容

特别是在您作为管理员发送服务器的Drupal密码或FTP密码的情况下,应尽可能使用HTTPS以降低危及您网站的风险。

此外,HTML5 Geolocation 现在需要 HTTPS 才能出于隐私原因在几乎所有现代浏览器中运行!这是在JavaScript实现级别,因此用于提供此功能的模块(例如 GeoField [“Lat / Long”小部件]或IP地理位置视图和地图 [“设置我的位置”阻止]等)不能覆盖它。如果您尝试在任何此类浏览器中通过HTTP使用此功能(目前唯一的例外是危险的过时浏览器,例如在旧的Android设备上,可能还有一些计算机仍在运行Windows XP或PowerPC版本的Mac OS X),它将无法正常工作你不会得到一条错误消息解释原因(除了可能在浏览器的开发人员工具错误控制台中) - 基础JavaScript函数调用不会通过HTTP执行。因此,如果您的Web应用程序需要知道访问者的位置而无需键入地址或手动Lat / Long坐标,则必须使用HTTPS。

HTTPS还可以防止窃听者获取经过身份验证的会话密钥,该密钥是您的浏览器向网站发送的每个请求发送的Cookie,并使用它来冒充您。例如,如果您是通过HTTP而不是HTTPS访问站点的站点管理员,则攻击者可以获得对站点的管理访问权限。这称为会话劫持,可以使用Firesheep等工具完成

安全是一种平衡。服务HTTPS流量的资源比HTTP请求(服务器和Web浏览器)的成本更高,因此您可能希望使用混合HTTP / HTTPS,网站所有者可以决定哪些页面或用户应使用HTTPS。但是,通过提高SSL / TLS效率和更快的硬件,开销比以前更少。许多安全专家现在都在敦促所有与网络相关的流量应该通过HTTPS,并且其好处远大于成本(特别是考虑到Let的加密相对较新的存在[见下文])。

如何在Drupal中启用HTTPS支持

Web服务器配置

  1. 获得证书许多托管服务提供商为您设置这些服务 - 自动或收费。您还可以使用免费,自动和打开证书颁发机构的Let's Encrypt如果要保护测试站点,则可以生成自签名证书。
  2. 配置Web服务器。一些有用的链接:

    如果您使用共享或托管主机,您的webhost可以为您执行此操作。

注意:清除URL如果您使用Apache进行HTTP和HTTPS:

您可能会有两个不同的VirtualHost存储桶。

  1. 端口桶:80 http
  2. 端口桶:443 https

如果您使用的是Clean URL,则每个VirtualHost容器或存储桶都需要在其中添加特定的Apache指令这是因为Drupal广泛使用.htaccess和mod_rewrite来提供友好的URL

确保在指令中有以下内容,该指令是VirtualHost容器下的子项:请参阅Apache文档以获取AllowOverride

 <Directory "/path/to/yoursite">
AllowOverride All
 </Directory>

这意味着您的.htaccess优先,Apache配置将允许它像您对Drupal所期望的那样运行。

故障排除:
如果您启用了HTTPS并且它仅适用于主页并且您的子链接已损坏,那是因为VirtualHost:443存储桶需要启用AllowOverride All,因此可以在HTTPS模式下重写URL。

Drupal配置

  • 在Drupal 7上,如果要支持混合模式HTTPS和HTTP会话,请打开sites / default / settings.php并添加这使您可以在HTTP和HTTPS上使用相同的会话 - 但是使用两个cookie,其中HTTPS cookie仅通过HTTPS发送。您需要使用像securepages这样的贡献模块来对此模式执行任何有用的操作,例如通过HTTPS提交表单。虽然你的HTTP cookie仍然容易受到通常的攻击$conf['https'] = TRUE;攻击。被劫持的不安全会话cookie只能用于获取对HTTP站点的经过身份验证的访问,并且在HTTPS站点上无效。这是否是一个问题取决于您的站点需求和各种模块配置。例如,如果所有表单都设置为通过HTTPS,并且访问者可以看到与登录用户相同的信息,则这不是问题。

    请注意,在Drupal 8中,已删除混合模式支持#2342593:从核心删除混合SSL支持

  • 为了更好的安全性,通过HTTPS发送所有经过身份验证的流量,并使用HTTP进行匿名会话。在Drupal 8上,安装Secure Login模块,该模块可解决混合内容警告。在Drupal 7上,保留默认值()并安装安全登录Drupal 7和8自动在HTTPS站点上启用PHP配置,这会导致向浏览器发出仅SSL的安全会话cookie。在Drupal 6上,请参阅提供的模块 443会话和 安全登录。 $conf['https']FALSEsession.cookie_secure

  • 为了获得最佳安全性,请将您的站点设置为仅使用HTTPS,并通过重定向到您的HTTPS站点来响应所有HTTP请求。Drupal 7 可以在纯HTTPS站点上保留其默认值()。即使这样,如果连接在重定向到HTTPS之前作为HTTP连接开始,HTTPS也容易受到中间人攻击。使用HSTS模块Security Kit模块,或在Web服务器中设置Strict-Transport-Security标头,并将您的域添加到浏览器HSTS预加载列表,以帮助阻止用户在没有HTTPS的情况下访问该站点。$conf['https']FALSE

    您可能希望将所有流量从http://example.comhttp://www.example.com重定向https://example.com您可以通过将以下代码添加到服务器配置文件(即VirtualHost定义)来执行此操作:

    <VirtualHost *:80>
        ServerName www.example.com
        Redirect "/" "https://www.example.com/"
    </VirtualHost>
    
    <VirtualHost *:443>
        ServerName www.example.com
        # ... SSL configuration goes here
    </VirtualHost>

    如果您无权访问主服务器配置文件,则必须使用RewriteRule,并且必须在.htaccess文件中执行此任务:

    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^www\.example\.com*
    RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

    .htaccess中现有注释解释了如何将http://example.com重定向http://www.example.com(反之亦然),但此处的代码会将这两个注释重定向到https:// example。 com

食谱

重定向所有请求wo https://www.url.de

我正在将drps添加到drupal多站点安装中。应该强制https在所有网址上,http不再可能。你得到这个:

# uncomment the following:
   #1
   RewriteCond %{HTTP_HOST} .
   RewriteCond %{HTTP_HOST} !^www\. [NC]
   RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  
   # 2 Redirect to HTTPS
   RewriteCond %{HTTPS} off
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

#1是标准htaccess指令的修改版本,#2取自drupal 8 htaccess

这会将旧的http网址重定向为301到https://www.url.de
请记住,http访问无法正常使用,因为我删除了{ENV:protossl}

大多数时候Drupal Developers在安装新模块和主题时遇到这个问题,遇到了“错误:你没有使用加密连接,所以你的密码将以纯文本形式发送”的问题。所以我建议所有人首先授予你的drupal_directory和网站和主题的权限,运行几个命令可以帮助你在完成整个技术部分之前.. 
在linux中 在mac中
sudo chown www-data:www-data -R /var/www/html/drupal_directory/sites

sudo chown -R www:www /Library/WebServer/Documents/drupal_directory/sites

使用settings.php重定向到HTTPS

你也可以强制SSL并重定向到settings.php中有或没有www的域,好处是它在更新Drupal后不会被覆盖。将它插入settings.php的顶部,紧跟在<?php之后,如下所示:

<?php
// Force HTTPS
// PHP_SAPI command line (cli) check prevents drush commands from giving a
// "Drush command terminated abnormally due to an unrecoverable error"
if ( (!array_key_exists('HTTPS', $_SERVER)) && (PHP_SAPI !== 'cli') ) {
  header('HTTP/1.1 301 Moved Permanently');
  header('Location: https://example.org'. $_SERVER['REQUEST_URI']);
  exit();
}

// Remove www
if ($_SERVER['HTTP_HOST'] == 'www.example.org') {
  header('HTTP/1.0 301 Moved Permanently');
  header('Location: https://example.org'. $_SERVER['REQUEST_URI']);
  exit();
}

对于通用域,您可以使用:

<?php
if ( (!array_key_exists('HTTPS', $_SERVER)) && (PHP_SAPI !== 'cli') ) {
  if (substr($_SERVER['HTTP_HOST'], 0, 4) <> 'www.') {
    $new_url = 'www.' . $_SERVER['HTTP_HOST'];
  } else {
    $new_url = $_SERVER['HTTP_HOST'];
  }
  $new_url .= $_SERVER['REQUEST_URI'];

  header('HTTP/1.1 301 Moved Permanently');
  header('Location: https://'. $new_url);
  exit();
}

标签