把httpredirect到https是不好的?

我刚刚在我的服务器上安装了SSL证书。

然后,在端口80上为我的域上的所有stream量设置redirect,将其redirect到端口443。

换句话说,我所有的http://example.comstream量现在都被redirect到相应的https://example.com版本。

redirect在我的Apache虚拟主机文件中完成,像这样…

 RewriteEngine on ReWriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 

我的问题是,使用SSL有什么缺点吗?

由于这不是一个301redirect,我会通过切换到https失去search引擎链接果汁/排名吗?

我感谢帮助。 我一直想在服务器上设置SSL,只是为了做这个练习,最后我决定今晚做。 到目前为止,它似乎工作得很好,但是我不确定在每个页面上使用它是个好主意。 我的网站不是电子商务,不处理敏感数据; 它主要是为了学习而安装它的外观和快感。


更新的问题

奇怪的Bing从我的网站创build这个截图,现在它在任何地方使用HTTPS …

在这里输入图像描述

    [R]标志本身是302redirect( Moved Temporarily )。 如果你真的想让人们使用你网站的HTTPS版本(提示:你这样做),那么你应该使用[R=301]进行永久redirect:

     RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L] 

    一个301保持所有的谷歌福和来之不易的网页浏览完整 。 确保mod_rewrite已启用:

     a2enmod rewrite 

    要回答你确切的问题:

    把httpredirect到https是不好的?

    一定不行。 这很好。

    虽然我支持只有SSL的网站的想法,但我认为一个缺点是开销取决于您的网站devise。 我的意思是,例如,如果您在img标签中提供大量单独图片,这可能会导致您的网站运行速度变慢。 我build议任何人只使用SSL服务器,以确保他们在以下工作。

    1. 检查整个网站的内部链接,并确保他们都使用HTTPS,如果你在链接中指定自己的域名,所以你不会造成自己的redirect。
    2. 将您的<meta property="og:url"为使用您的域的https版本。
    3. 如果您使用<base href=再次更新以使用HTTPS。
    4. 如果可能,请安装SPDY协议
    5. 确保尽可能使用CSS图像精灵,以减less请求的数量。
    6. 更新您的站点地图,以表明https状态,所以随着时间的推移,蜘蛛学习这个变化。
    7. 更改search引擎首选项,如Google网站站长工具,以selectHTTPS
    8. 在可能的情况下,将任何stactic媒体卸载到HTTPS CDN服务器。

    如果上述问题得到解决,那么我怀疑你会有很多问题。

    我已经设置了https,那么你应该在网站上的任何地方使用它。 您将避免混合内容问题的风险,并且如果您有所需的工具,为什么不使整个网站安全?

    关于从httpredirect到https的答案并不那么简单。

    redirect将使您的用户更容易,他们只需键入whateversite.com并redirect到https。

    但。 如果用户有时在不安全的networking上(或者接近特洛伊亨特和他的菠萝 )呢? 然后,用户将请求http://whateversite.com摆脱旧习惯&#x3002; 那是http。 这可以妥协。 redirect可能指向https://whateversite.com.some.infrastructure.long.strange.url.hacker.org 。 对于一个普通的用户来说,它看起来很合法。 但交通可以被拦截。

    所以我们在这里有两个相互竞争的要求:为了用户友好和安全。 幸运的是,有一种称为HSTS头的补救措施。 有了它,你可以启用redirect。 浏览器将移动到安全的网站,但由于HSTS头还记得它。 当用户在不安全的networking上inputwhateversite.com时,浏览器将立即转到https,而不会跳过httpredirect。 除非您处理非常敏感的数据,否则我认为这对大多数站点来说是安全和可用性之间的公平权衡。 (当我最近设置了处理医疗logging的应用程序,我没有redirect的所有HTTPS)。 不幸的是Internet Explorer不支持HSTS( 源代码 ),所以如果你的目标受众主要使用IE并且数据是敏感的,你可能想要禁用redirect。

    因此,如果您不是针对IE用户,请继续使用redirect,但也启用HSTS标头。

    这没有什么错,事实上,这是最好的做法(对于通过安全连接提供服务的网站)。 实际上,你所做的与我正在使用的configuration非常相似:

     <VirtualHost 10.2.3.40:80> ServerAdmin [email protected] ServerName secure.example.com RedirectMatch 301 (.*) https://secure.example.com$1 </VirtualHost> # Insert 10.2.3.40:443 virtual host here :) 

    301状态码指示永久redirect,指示有能力的客户端使用安全URL用于未来连接(例如,更新书签)。

    如果您只是通过TLS / SSL提供服务,那么我build议您在安全虚拟主机中启用HTTP 严格传输安全性 (HSTS)的进一步指令:

     <IfModule mod_headers.c> Header set Strict-Transport-Security "max-age=1234; includeSubdomains" </IfModule> 

    这个头文件指示有能力的客户端(我相信这些客户端中的大多数,我相信)他们应该在接下来的1234秒内使用提供的域(本例中为secure.example.com )的HTTPS 。 The ; includeSubdomains ; includeSubdomains部分是可选的,并且指示该指令不仅适用于当前域,而且适用alpha.secure.example.com下的任何域(例如, alpha.secure.example.com )。 请注意,通过SSL / TLS连接提供服务时,HSTS头只能被浏览器接受!

    要根据当前的最佳实践testing您的服务器configuration,一个好的免费资源是Qualys的SSL服务器testing服务; 我的目标是至less得到一个A-(由于缺less对椭圆曲线密码体系的支持,所以你不能用Apache 2.2获得更多)。

    哇 ! redirectHTTP到HTTPS是一件非常好的事情,我不能看到任何缺点。

    只要确保您的客户有正确的CA,以避免浏览器中的证书的用户友好警告。

    另外,你设置Apacheredirect到HTTPS的方式似乎没问题。

    把httpredirect到https是不好的?

    一点都不。 其实,这是一件好事!

    在redirect上:

    完全消除重写可能会更有效率。 这是我的configuration类似的情况…

     <VirtualHost *:80> ServerName domainname.com <IfModule mod_alias.c> Redirect permanent / https://domainname.com/ </IfModule> </VirtualHost> 

    HTTPS并不完全是万无一失的。 当然,通常强制HTTPS是一件好事。 它可以防止正常的犯罪分子对您的用户做任何不好的事情。

    但请记住检查您的SSL设置,如SSLCiphers设置。 禁用像RC4encryption,SSLv2和SSLv3协议的东西。 此外,你应该知道,系统的encryption系统是否支持TLS1.2(这是你想要的东西;))

    打开SSL,这是一件好事。

    就我个人而言,我都是使用SSL来保护networking上的连接,但是我觉得这里所有其他答案都没有错过的一点是,并不是每一个能够使用HTTP连接的设备和软件都能够使用SSL,因此我会考虑为用户提供一些方法来避免它,如果它不被支持。 有些国家的encryption技术非法的人也有可能不被允许访问您的网站。 我会考虑添加一个未encryption的login页面,并链接到强制网站的不安全版本,但除非用户明确select了这样的操作,只是将其转发到HTTPS版本。

    以下是一些广泛的笔触问题:

    • MITM / SSLSTRIP :这是一个巨大的警告。 如果您要通过HTTPS为您的网站提供服务,请在网站上禁用HTTP 。 否则,您将让您的用户面对各种中间人攻击,包括SSLSTRIP,它将拦截请求并通过HTTP悄悄地提供服务,将自己的恶意软件脚本插入到stream中。 如果用户没有注意到,那么他们会认为他们的会话是安全的,但实际上并不安全。

      • 但是,与此相关的问题是,如果您的网站是公共站点,而您只是不经意地禁用HTTP,则可能会失去大量访问者。 如果网站不会使用HTTP加载,那么他们甚至不会尝试使用HTTPS。
    • 如果您的站点需要安全的login,那么整个用户会话应该是安全的。 不要通过HTTPS进行身份validation,然后将用户redirect回HTTP。 如果你这样做了,那么你的用户很容易受到MITM的攻击。 这些日子的身份validation的标准方法是validation一次,然后来回传递身份validation令牌(在cookie中)。 但是,如果您通过HTTPS进行身份validation,然后redirect到HTTP,那么中间人可以拦截该Cookie,并使用该网站,就好像它们是您的身份validation用户一样,绕过您的安全性。

    • HTTPS的“性能”问题实际上仅限于创build新连接所涉及的握手。 尽你所能,最大限度地减less从一个URL的多个HTTPS连接的需要,你会遥遥领先。 即使您通过HTTP提供内容,这也是坦率的。 如果你阅读SPDY,你会意识到它所做的一切都是为了试图通过一个单一的连接从一个单一的URL提供所有的内容。 是的,使用HTTPS会影响caching。 但是,无论如何,现在有多less个网站只是静态的,可caching的内容呢? 使用Web服务器上的高速caching,可能会让您的负担得到更大的回报,从而最大限度地减less冗余数据库查询一遍又一遍地检索未更改的数据,并防止代码path的执行次数超过必要的次数。

    这在技术上不是您的原始问题的答案,但是如果您使用Google Chrome扩展程序HTTPSEverywhere(我确定在其他浏览器上有相似的扩展名),扩展程序会自动使用HTTP将站点redirect到使用HTTPS的同一站点。 我已经使用了一段时间,我没有任何问题(除了可能放缓,但我没有testing过)。 HTTPSEverywhere可以通过在服务器端的某些规则来改变,但由于我没有在这方面做了很多,我不确定具体的细节。

    回到你真正的问题,如果你使用HTTPSEverywhere这样的东西,使用HTTP的动机就更less,尽pipe我想在你需要的时候很难设置正确的规则。

    HTTPS over HTTP技术的唯一技术缺点是处理HTTPS请求的计算成本比普通HTTP要高

    不过,鉴于大多数现代服务器都具有高性能的CPU,这种影响通常可以忽略不计,除非您处于极高的stream量级别,否则您很可能使用负载平衡器

    随着像SPDY这样需要SSL / TLS工作的协议的出现,这实际上抵消了前述的计算开销,通过对多个请求进行显着的性能改进并且总体上更快地将资产提供给客户端。

    redirect到https是非常好的,但我读它也取决于你如何组织redirect。

    根据security.stackexchange.com上的build议,build立一个专门的虚拟服务器,用于将传入的http请求redirect到https连接, 这听起来非常聪明,并且会closures一些额外的安全威胁。 Apache中的configuration看起来像这样:

     # Virtual host for rerouting <VirtualHost *:80> ServerName www.example.com Redirect permanent / https://www.example.com/ </VirtualHost> # Virtual host for secure hosting on https <VirtualHost *:443> ServerName www.example.com SSLEngine on Header set Strict-Transport-Security "max-age=8640000;includeSubdomains" ...site settings... </VirtualHost>